本文在Ubuntu系统上的Docker中安装配置greenplum集群。
Docker和Ubuntu的版本信息如下
root@leo-VirtualBox:~# cat /proc/version Linux version 4.13.0-36-generic (buildd@lgw01-amd64-033) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) #40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018 root@leo-VirtualBox:~# docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:11:19 2017 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:09:53 2017 OS/Arch: linux/amd64 Experimental: false
安装步骤如下
1.拉取centos镜像
因为国外站点的速度比较慢,本文从阿里云开发者平台上拉取镜像。首先需要在平台上进行注册账号,然后创建镜像仓库,平台会提供一个加速URL信息和不同平台上的配置方法。
docker pull centos:6.8 root@leo-VirtualBox:~# docker image ls | grep centos centos 6.8 6704d778b3ba 4 months ago 195MB
使用上述的centos镜像为gp创建容器,主机名分别为mdw,sdw1和sdw2
docker run --name gpcentos1 --hostname mdw -it 6704d778b3ba /bin/bash docker run --name gpcentos2 --hostname sdw1 -it 6704d778b3ba /bin/bash docker run --name gpcentos3 --hostname sdw2 -it 6704d778b3ba /bin/bash root@leo-VirtualBox:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d01c67550a4c 6704d778b3ba "/bin/bash" 2 hours ago Up 2 hours gpcentos3 725bf50e783f 6704d778b3ba "/bin/bash" 2 hours ago Up 2 hours gpcentos2 c68396a9068a 6704d778b3ba "/bin/bash" 2 hours ago Up 2 hours gpcentos1
2.配置容器的基础环境
由于拉取的docker的centos镜像是centos的简化版本,里面有一些程序包是没有默认安装的,会影响到后面部署greenplum,因此在docker的每个节点中安装相关的依赖包.
在每个容器节点进行安装配置
yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64
容器默认没有ssh服务,影响后续的gpssh配置项,需要配置互联并认证
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key /usr/sbin/sshd
配置主机IP地址映射
在每个容器的/etc/hosts文件中加入如下部分,同时修改/etc/sysconfig/network保持hostname一致。
172.17.0.2 mdw 172.17.0.3 sdw1 172.17.0.4 sdw2
创建GreenPlum用户和组
groupadd -g 501 gpadmin useradd -g 501 -u 501 -m -d /home/gpadmin -s /bin/bash gpadmin chown -R gpadmin:gpadmin /home/gpadmin echo gpadmin | passwd gpadmin --stdin
修改每个容器节点的文件数
vi /etc/security/limits.conf # End of file * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072
3.下载安装包并安装
拷贝介质到容器中
docker cp /home/leo/greenplum-db-5.5.0-rhel6-x86_64.zip c68396a9068a:/home/gpadmin
解压安装
每个节点执行创建安装目录
mkdir -p /opt/greenplum
chown -R gpadmin:gpadmin /opt
--master节点执行
mkdir -p /data/master
chown gpadmin:gpadmin /data/master
segment节点执行
chown -R gpadmin:gpadmin /data
[root@mdw greenplum]# more all_host
mdw
sdw1
sdw2
[root@mdw greenplum]# more seg_host
sdw1
sdw2
[gpadmin@mdw greenplum]$ gpssh-exkeys -f all_host
[STEP 1 of 5] create local ID and authorize on local host
... /home/gpadmin/.ssh/id_rsa file exists ... key generation skipped
[STEP 2 of 5] keyscan all hosts and update known_hosts file
[STEP 3 of 5] authorize current user on remote hosts
... send to sdw1
***
*** Enter password for sdw1:
... send to sdw2
[STEP 4 of 5] determine common authentication file content
[STEP 5 of 5] copy authentication files to all remote hosts
... finished key exchange with sdw1
... finished key exchange with sdw2
[INFO] completed successfully
[gpadmin@mdw greenplum]$ source greenplum_path.sh
[gpadmin@mdw greenplum]$
[gpadmin@mdw greenplum]$
[gpadmin@mdw greenplum]$ gpseginstall -f seg_host -u gpadmin -p gpadmin --安装
20180309:07:09:01:000783 gpseginstall:mdw:gpadmin-[INFO]:-Installation Info:
执行下面的语句创建各个segment实例的目录
gpssh -f seg_host -e 'mkdir -p /data/primary'
gpssh -f seg_host -e 'mkdir -p /data/mirror'
gpssh -f seg_host -e 'chown gpadmin:gpadmin /data/primary'
gpssh -f seg_host -e 'chown gpadmin:gpadmin /data/mirror'
[gpadmin@mdw greenplum]$ source greenplum_path.sh
[gpadmin@mdw greenplum]$
[gpadmin@mdw greenplum]$ gpssh -f seg_host -e 'mkdir -p /data/primary'
[sdw1] mkdir -p /data/primary
[sdw2] mkdir -p /data/primary
[gpadmin@mdw greenplum]$ gpssh -f seg_host -e 'mkdir -p /data/mirror'
[sdw2] mkdir -p /data/mirror
[sdw1] mkdir -p /data/mirror
ry'admin@mdw greenplum]$ gpssh -f seg_host -e 'chown gpadmin:gpadmin /data/prima
[sdw2] chown gpadmin:gpadmin /data/primary
[sdw1] chown gpadmin:gpadmin /data/primary
r'padmin@mdw greenplum]$ gpssh -f seg_host -e 'chown gpadmin:gpadmin /data/mirro
[sdw1] chown gpadmin:gpadmin /data/mirror
[sdw2] chown gpadmin:gpadmin /data/mirror
gp配置文件为
[gpadmin@mdw ~]$ more gpinitsystem_config
ARRAY_NAME="Greenplum DW"
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/data/primary)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/data/master
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MIRROR_PORT_BASE=50000
REPLICATION_PORT_BASE=41000
MIRROR_REPLICATION_PORT_BASE=51000
declare -a MIRROR_DATA_DIRECTORY=(/data/mirror)
初始化数据库
gpinitsystem -c gpinitsystem_config -h seg_host
启动并查看数据库状态
gpstart和gpstate
[gpadmin@mdw ~]$ gpstate
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Master instance = Active
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Master standby = No master standby
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Total segment instance count from metadata = 4
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Primary Segment Status
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Total primary segments = 2
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Total primary segment valid (at master) = 2
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Total primary segment failures (at master) = 0
20180309:07:56:57:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Mirror Segment Status
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total mirror segments = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total mirror segment valid (at master) = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total mirror segment failures (at master) = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes missing = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes found = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number mirror segments acting as primary segments = 0
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:- Total number mirror segments acting as mirror segments = 2
20180309:07:56:58:005338 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------