本文参考( https://my.oschina.net/u/876354/blog/1606419 )安装 greenplum 成功,并记录一下过程。
一、创建 docker 节点
拉取 centos 镜像
<code>[xiaoyu@xiaoyu ~]$ docker pull centos/<code>
创建几个容器,作为 greenplum 的节点
<code>[xiaoyu@xiaoyu ~]$ docker run -it --name gp-master centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment1 centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment2 centos /bin/bash
[xiaoyu@xiaoyu ~]$ docker run -it --name gp-segment3 centos /bin/bash/<code>
二、配置基础环境
进入每个 greenplum 节点,配置基础环境
- 安装相关的依赖包
由于 docker 的 centos 镜像是 centos 的简化版本,里面有很多包是没有安装的,会影响到后面部署 greenplum,因此在 docker 的每个节点中安装相关的依赖包
<code>[root@00bcc0ba2b3f ~]# yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute/<code>
- 启动 ssh
docker 中默认没有启动 ssh,为了方便各节点之间的互连,创建相关的认证 key,并启动 docker 的每个节点里面的 ssh
<code>[root@00bcc0ba2b3f ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@00bcc0ba2b3f ~]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@00bcc0ba2b3f ~]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
[root@00bcc0ba2b3f ~]# /usr/sbin/sshd/<code>
- 修改 /etc/hosts 文件
在每个 docker 节点中添加如下配置,方便后续 greenplum 集群的配置文件中用到,ip 为各个 docker 节点中的 ip 地址
<code>[root@00bcc0ba2b3f ~]# vi /etc/hosts
172.17.0.2 dw-greenplum-1 mdw
172.17.0.3 dw-greenplum-2 sdw1
172.17.0.4 dw-greenplum-3 sdw2
172.17.0.5 dw-greenplum-4 sdw3/<code>
同时修改所有节点里面的 /etc/sysconfig/network 文件,保持与主机名一致
<code>[root@00bcc0ba2b3f ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mdw/<code>
- 创建 greenplum 的用户和用户组
为了方便安装 greenplum 集群,且使 greenplum 自带的 python 不与系统的 python 版本相冲突,在每个节点中创建 greenplum 的用户和用户组
<code>[root@00bcc0ba2b3f ~]# groupadd -g 530 gpadmin
[root@00bcc0ba2b3f ~]# useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
[root@00bcc0ba2b3f ~]# chown -R gpadmin:gpadmin /home/gpadmin
[root@00bcc0ba2b3f ~]# passwd gpadmin/<code>
- 修改每个节点上的文件打开数量限制
<code>[root@00bcc0ba2b3f ~]# vi /etc/security/limits.conf
# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072/<code>
- 关闭每个节点上的防火墙,关闭 selinux
<code>[root@00bcc0ba2b3f ~]# service iptables stop
[root@00bcc0ba2b3f ~]# chkconfig iptables off
[root@00bcc0ba2b3f ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted /<code>
三、下载 greenplum 安装包
到 greenplum 的官网上,下载 greenplum 安装包,点开 Greenplum Database Server,根据自己的操作系统下载安装包,我下载当前最新的 greenplum-db-5.10.2-rhel7-x86_64.zip,将其拷到 master 节点的 /home/gpadmin 目录中
四、在 master 节点上安装 greenplum
切换到 gpadmin 用户
<code>[root@00bcc0ba2b3f ~]# su gpadmin/<code>
解压下载后的 zip 文件
<code>[gpadmin@mdw ~]$ unzip greenplum-db-5.10.2-rhel7-x86_64.zip/<code>
执行安装文件
<code>[gpadmin@mdw ~]$ ./greenplum-db-5.10.2-rhel7-x86_64.bin/<code>
安装期间需要配置安装目录,输入 /home/gpadmin/greenplum-db-5.10.2
为了方便安装集群,greenplum 提供了批量操作节点的命令,通过指定配置文件使用批处理命令
<code>[gpadmin@mdw ~]$ vi ./conf/hostlist
mdw
sdw1
sdw2
sdw3
[gpadmin@mdw ~]$ vi ./conf/seg_hosts
sdw1
sdw2
sdw3/<code>
greenplum-db/greenplum_path.sh 中保存了运行 greenplum 的一些环境变量,包括 GPHOME、PYTHONHOME 等,在 gpadmin 账号下设置环境变量,并将 master 节点的 key 交换到各个 segment 节点
<code>[gpadmin@mdw ~]$ source /home/gpadmin/greenplum-db/greenplum_path.sh
[gpadmin@mdw ~]$ gpssh-exkeys -f /home/gpadmin/conf/hostlist
[STEP 1 of 5] create local ID and authorize on local host
[STEP 2 of 5] keyscan all hosts and update known_hosts file
[STEP 3 of 5] authorize current user on remote hosts
... send to mdw
... send to sdw1
***
*** Enter password for sdw1:
... send to sdw2
... send to sdw3
[STEP 4 of 5] determine common authentication file content
[STEP 5 of 5] copy authentication files to all remote hosts
... finished key exchange with mdw
... finished key exchange with sdw1
... finished key exchange with sdw2
... finished key exchange with sdw3
[INFO** completed successfully/<code>
交换成功后,后续就可以使用一些命令执行批量操作
注意:使用 gpssh-exkeys 命令时一定要使用 gpadmin 用户,因为会在 /home/gpadmin/.ssh 中生成 ssh 的免密码登录秘钥,如果使用其它账号登录,则会在其它账号下生成密钥,在 gpadmin 账号下就无法使用 gpssh 的批处理命令
<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
=> pwd
[sdw1] /home/gpadmin
[sdw3] /home/gpadmin
[ mdw] /home/gpadmin
[sdw2] /home/gpadmin
=> ls
[sdw1]
[sdw3]
[ mdw] conf greenplum-db greenplum-db-5.10.2
[sdw2]
=> exit/<code>
pwd 命令是 linux 中的查看路径命令,在这里也是查看批量操作时各个节点当前所在的路径,从中可以看到已经成功连通了4个节点
五、分发安装包到每个子节点
打包 master 节点上的安装包
<code>[gpadmin@mdw ~]$ tar -czf gp.tar.gz greenplum-db-5.10.2/<code>
使用 gpscp 命令将这个文件复制到每个子节点
<code>[gpadmin@mdw ~]$ gpscp -f /home/gpadmin/conf/seg_hosts gp.tar.gz =:/home/gpadmin/<code>
批量解压,并创建软链接
<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/seg_hosts
=> tar -zxf gp.tar.gz
[sdw3]
[sdw1]
[sdw2]
=> ln -s greenplum-db-5.10.2 greenplum-db
[sdw3]
[sdw2]
[sdw1]/<code>
这样就完成了所有子节点数据库的安装
六、初始化安装数据库
- 批量创建数据目录
<code>[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
=> mkdir gpdata
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> cd gpdata
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2
[sdw1]
[sdw3]
[ mdw]
[sdw2]
=> exit/<code>
- 在 master 节点上修改 .bash_profile 配置环境变量,并发送给其他子节点,确保这些环境变量生效
<code>[gpadmin@mdw ~]$ vi .bash_profile
source /opt/gpadmin/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=2345
export PGDATABASE=testDB
[gpadmin@mdw ~]$ source .bash_profile
[gpadmin@mdw ~]$ gpscp -f /home/gpadmin/conf/seg_hosts /home/gpadmin/.bash_profile
[gpadmin@sdw1 ~]$ source .bash_profile
[gpadmin@sdw2 ~]$ source .bash_profile
[gpadmin@sdw3 ~]$ source .bash_profile/<code>
- 初始化配置文件
<code>[gpadmin@mdw ~]$ vi /home/gpadmin/conf/gpinitsystem_config
ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
# Segment 的名称前缀
SEG_PREFIX=gpseg
# Primary Segment 起始的端口号
PORT_BASE=33000
# 指定 Primary Segment 的数据目录
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
# Master 所在机器的 Hostname
MASTER_HOSTNAME=mdw
# 指定 Master 的数据目录
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
# Master 的端口
MASTER_PORT=2345
# 指定Bash的版本
TRUSTED_SHELL=/usr/bin/ssh
# Mirror Segment起始的端口号
MIRROR_PORT_BASE=43000
# Primary Segment 主备同步的起始端口号
REPLICATION_PORT_BASE=34000
# Mirror Segment 主备同步的起始端口号
MIRROR_REPLICATION_PORT_BASE=44000
# Mirror Segment 的数据目录
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)/<code>
- 初始化数据库
<code>[gpadmin@mdw ~]$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw3/<code>
其中,-s sdw3 是指配置 master 的 standby 节点,然后按照提示步骤就能完成安装了
如果 gpinitsystem 不成功,在 master 节点的 /home/gpadmin/gpAdminLogs 目录下 gpinitsystem_*.log 文件中查看日志信息,找出原因进行修改,然后再重新执行 gpinitsystem 进行初始化安装。
静心
https://gitop.cc/posts/install-greenplum-in-docker/
閱讀更多 Greenplum中文社區 的文章