Docker安装Greenplum集群

Docker安装可以参考:

Manjaro安装Docker

Centos7 安装 docker

一、创建 docker 节点

拉取centos镜像

1
docker pull centos

这里如果没有权限,则参考 Manjaro安装Docker 中的分组操作。

查看镜像

1
docker images

创建几个容器,作为greenplum的节点

1
2
3
4
5
# 用 exit退出
docker run -it --name gp-master centos /bin/bash
docker run -it --name gp-master1 centos /bin/bash
docker run -it --name gp-master2 centos /bin/bash
docker run -it --name gp-master3 centos /bin/bash

注意:exit 退出后,容器停止(Exited)

命令解释:为centos这个镜像创建一个容器

  • run: 在新的容器中运行命令 . run=create + start
  • -it : -i-t, 为该docker创建一个伪终端,这样就可以进入到容器的交互模式
  • --name gp-master 容器名称
  • centos: 镜像
  • */bin/bash :表示启动容器后启动bashdocker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself

查看帮助:docker run --help

守护态运行,通过 run后加-d实现

二、配置基础环境

进入每个greenplum节点,配置基础环境

由于dockercentos镜像是centos的简化版本,里面有很多包是没有安装的,会影响到后面部署greenplum,因此在docker的每个节点中安装相关的依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看正在运行的容器
docker ps -s
# 查看所有容器
docker ps -a
# 启动
docker start gp-master
docker start gp-master1
docker start gp-master2
docker start gp-master3
# 停止容器
# docker stop gp-master
# 进入容器
docker exec -it gp-master /bin/bash
  • 安装相关的依赖包
1
yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute
  • 启动ssh

docker中默认没有启动ssh,为了方便各节点之间的互连,创建相关的认证key,并启动docker的每个节点里面的ssh

1
2
3
4
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
/usr/sbin/sshd
  • 修改/etc/hosts文件

在每个docker节点中添加如下配置,方便后续greenplum集群的配置文件中用到,ip为各个docker节点中的ip地址

1
2
3
4
5
6
7
# 查看
cat /etc/hosts
# 写入
echo "172.17.0.2 dw-greenplum-1 mdw" >> /etc/hosts
echo "172.17.0.3 dw-greenplum-2 sdw1" >> /etc/hosts
echo "172.17.0.4 dw-greenplum-3 sdw2" >> /etc/hosts
echo "172.17.0.5 dw-greenplum-4 sdw3" >> /etc/hosts

同时修改所有节点里面的/etc/sysconfig/network文件,保持与主机名一致

1
2
3
4
5
6
7
8
9
# 查看
cat /etc/sysconfig/network
# 不存在,则写入
echo "NETWORKING=yes" >> /etc/sysconfig/network
echo "HOSTNAME=mdw" >> /etc/sysconfig/network
# 存在,则修改
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mdw
  • 创建greenplum的用户和用户组

为了方便安装greenplum集群,且使greenplum自带的python不与系统的python版本相冲突,在每个节点中创建greenplum的用户和用户组

1
2
3
4
5
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin
# 这里可能会提示 bash: passwd: command not found
passwd gpadmin
  • 修改每个节点上的文件打开数量限制
1
2
3
4
5
6
cat /etc/security/limits.conf
# 不存在,则写入, 存在,则用 vi 修改
echo "soft nofile 65536" >> /etc/security/limits.conf
echo "hard nofile 65536" >> /etc/security/limits.conf
echo "soft nproc 131072" >> /etc/security/limits.conf
echo "hard nproc 131072" >> /etc/security/limits.conf
  • 关闭每个节点上的防火墙,关闭selinux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 最新的centos好像这些都不需要操作
service iptables stop
chkconfig iptables off
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

三、下载greenplum安装包

greenplum的官网上,下载greenplum安装包
GitHub下载,点开Greenplum Database Server,根据自己的操作系统下载安装包,我下载当前最新的 greenplum-db-6.15.0-rhel7-x86_64.rpm,将其拷到master节点的/home/gpadmin目录中

版本快速链接: github:open-source-greenplum-db-6.15.0-rhel7-x86_64.rpm

四、在master节点上安装greenplum

切换到gpadmin用户

1
2
su gpadmin
cd ~/

传递文件到docker

1
2
docker ps 
docker cp /home/maxzhao/Downloads/open-source-greenplum-db-6.15.0-rhel7-x86_64.rpm 348d61c65324:/home/gpadmin/open-source-greenplum-db-6.15.0-rhel7-x86_64.rpm

Rpm 安装

1
yum localinstall /home/gpadmin/open-source-greenplum-db-6.15.0-rhel7-x86_64.rpm -y
1
2
3
4
5
# 查看安装地址
[root@3b2ae1fbe58b /]# whereis greenplum-db
greenplum-db: /usr/local/greenplum-db
[root@3b2ae1fbe58b /]# ls -l /usr/local/greenplum-db
lrwxrwxrwx 1 root root 30 Apr 20 11:14 /usr/local/greenplum-db -> /usr/local/greenplum-db-6.15.0

gpssh-exkeys 报错问题:

cd /usr/bin

mv python python.bak

解压安装(ZIP)

解压下载后的zip文件

1
unzip greenplum-db-5.10.2-rhel7-x86_64.zip

执行安装文件

1
./greenplum-db-5.10.2-rhel7-x86_64.bin

安装期间需要配置安装目录,输入/home/gpadmin/greenplum-db-5.10.2

为了方便安装集群,greenplum提供了批量操作节点的命令,通过指定配置文件使用批处理命令

1
2
3
4
5
6
7
8
9
10
11
cd ~/ ;mkdir conf
echo mdw > ./conf/hostlist
echo sdw1 >> ./conf/hostlist
echo sdw2 >> ./conf/hostlist
echo sdw3 >> ./conf/hostlist
cat ./conf/hostlist

echo sdw1 > ./conf/seg_hosts
echo sdw2 >> ./conf/seg_hosts
echo sdw3 >> ./conf/seg_hosts
cat ./conf/seg_hosts

greenplum-db/greenplum_path.sh中保存了运行greenplum的一些环境变量,包括GPHOME、PYTHONHOME等,在gpadmin账号下设置环境变量,并将master节点的key
交换到各个segment节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[gpadmin@mdw ~]$ source /home/gpadmin/greenplum-db/greenplum_path.sh 
# 或者
[gpadmin@mdw ~]$ source /usr/local/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

交换成功后,后续就可以使用一些命令执行批量操作

注意:使用gpssh-exkeys命令时一定要使用gpadmin用户,因为会在/home/gpadmin/.ssh中生成ssh的免密码登录秘钥,如果使用其它账号登录,则会在其它账号下生成密钥,在gpadmin
账号下就无法使用gpssh的批处理命令

1
2
3
4
5
6
7
8
9
10
11
12
[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

pwd命令是linux中的查看路径命令,在这里也是查看批量操作时各个节点当前所在的路径,从中可以看到已经成功连通了4个节点

五、分发安装包到每个子节点

打包master节点上的安装包

1
[gpadmin@mdw ~]$ tar -czf gp.tar.gz greenplum-db-5.10.2

使用gpscp命令将这个文件复制到每个子节点

1
[gpadmin@mdw ~]$ gpscp -f /home/gpadmin/conf/seg_hosts gp.tar.gz =:/home/gpadmin

批量解压,并创建软链接

1
2
3
4
5
6
7
8
9
[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]

这样就完成了所有子节点数据库的安装

六、初始化安装数据库

  • 批量创建数据目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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
  • 在master节点上修改.bash_profile配置环境变量,并发送给其他子节点,确保这些环境变量生效
1
2
3
4
5
6
7
8
9
10
[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
  • 初始化配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[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)
  • 初始化数据库
1
[gpadmin@mdw ~]$ gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw3

其中,-s sdw3是指配置master的standby节点,然后按照提示步骤就能完成安装了

如果gpinitsystem不成功,在master节点的/home/gpadmin/gpAdminLogs目录下gpinitsystem_*
.log文件中查看日志信息,找出原因进行修改,然后再重新执行gpinitsystem进行初始化安装。

本文地址: https://github.com/maxzhao-it/blog/post/47598/