目前安装的是最新版本的greenplum 5.4.0。这个版本是基于PostgreSQL 8.3.23 (Greenplum Database 5.4.0 build commit:1971b301f52979ac74fb3d0a141bbaae06b70857) on x86_64-pc-linux-gnu, compiled by GCC gcc (GCC) 6.2.0, 64-bit compiled on Jan
12 2018 21:15:36
经验证这个版本支持json 不支持jsonb。默认端口是-p 2345
安装基本流程
创建容器
docker run --name gp_master --privileged -p 2345:2345 -it centos /bin/bash
docker run --name gp_db1 --privileged -p 2346:2345 -it centos /bin/bash
docker run --name gp_db2 --privileged -p 2347:2345 -it centos /bin/bash
进入容器,在每一个容器做如下配置
yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64
docker中默认没有启动ssh,为了方便各节点之间的互连,启动docker的每个节点里面的ssh,并创建相关的认证key
- 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
- 配置主机域名映射关系
vi /etc/hosts
172.17.0.11 187ad7900973
172.17.0.12 f41764ccbedc
172.17.0.22 dw-greenplum-1 mdw
172.17.0.24 dw-greenplum-2 sdw1
- 修改所有节点里面的 /etc/sysconfig/network 文件,保持主机名一致
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mdw
- 创建greenplum的用户和用户组
在每个节点中创建greenplum的用户和用户组,方便安装greenplum集群。另
- groupadd -g 530 gpadmin
- useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
- chown -R gpadmin:gpadmin /home/gpadmin
- passwd gpadmin
- 修改每个节点上的文件打开数量限制
vi /etc/security/limits.conf
End of file
- soft nofile 65536
- hard nofile 65536
- soft nproc 131072
- hard nproc 131072
- 关闭每个节点上的防火墙,关闭selinux(目前没有发现防火墙的配置,此处没有处理)
- vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
在master节点上安装greenplum, 以下过程只需要在master节点处理
- mkdir gpfoler
chown -R gpadmin:gpadmin gpfoler - 复制greenplum-db-5.4.0-rhel7-x86_64.zip到gpfolder
- chown -R gpadmin:gpadmin greenplum-db-5.4.0-rhel7-x86_64.zip
- 切换到gpadmin账号
- su - gpadmin
- 解压下载后的zip文件
cd /gpfoler
unzip greenplum-db-5.4.0-rhel7-x86_64.zip - 赋予文件执行权限
chmod +x greenplum-db-5.4.0-rhel7-x86_64.bin - 执行安装文件
./greenplum-db-5.4.0-rhel7-x86_64.bin
yes --> /home/gpadmin/greenplum-db-5.4.0--> yes -->yes
安装期间需要修改默认安装目录,输入/home/gpadmin/greenplum-db-5.4.0 - 为了方便安装集群,greenplum提供了批量操作的指令,通过创建配置文件,以使用批处理命令, 以下的当前路径是/home/gpadmin
note: 在gpadmin下可能不能创建这两个文件,需要切换到root创建
exit --切换到root账户下
cd /home/gpadmin/
mkdir conf
cd conf
touch hostlist
vi hostlist
touch seg_hosts
vi seg_hosts
chown -R gpadmin:gpadmin /home/gpadmin/conf
[gpadmin@mdw ~]$ cat ./conf/hostlist
mdw
sdw1
sdw2
[gpadmin@mdw ~]$ cat ./conf/seg_hosts
sdw1
sdw2
- 设置环境变量,打通所有节点
greenplum-db/greenplum_path.sh中保存了运行greenplum的一些环境变量设置,包括GPHOOME、PYTHONHOME等设置,在gpadmin账号下设置环境变量生效,然后打通所有节点
[gpadmin@mdw ~]$ source /home/gpadmin/greenplum-db/greenplum_path.sh
[gpadmin@mdw ~]$ gpssh-exkeys -f /home/gpadmin/conf/hostlist -- 中间会插入一个密码123456
[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
... 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
成功打通,后面就可以使用以下命令开启批量操作
注意:使用gpssh-exkeys命令时一定要使用gpadmin身份,因为会在/home/gpadmin/.ssh中生成ssh的免密码登录秘钥,如果使用了其它账号登录,则会生成密钥在其它账号下,后面在gpadmin账号下就无法使用gpssh的批处理命令
使用gpssh的批处理命令
[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
Note: command history unsupported on this machine ...
=> pwd
[sdw] /home/gpadmin
[ mdw] /home/gpadmin
=> exit
这里pwd命令是linux中的查看路径命令,在这里也是查看批量操作时所在的路径,从中可以看到已经成功连通了三个节点打包master节点上的安装包
tar -cf gp.5.4.tar /home/gpadmin/ -- 在/home/pgadmin/gp.5.4.tar出现
使用gpscp命令将这个文件复制到每一台机器上
gpscp -f /home/gpadmin/conf/hostlist gp.5.4.tar =:/home/gpadmin/ --可以看到其他的两个节点有/home/pgadmin/gp.5.4.tar
批量解压,并建立软链接
cd /home/gpadmin/conf
[gpadmin@mdw conf]$ gpssh -f hostlist
=> cd /home/gpadmin
[sdw]
[mdw]
=> tar -xf gp.5.4.tar
[sdw]
[mdw]
=> ln -s ./greenplum-db-5.4.0 greenplum-db
[sdw]
[mdw]初始化安装数据库
- 批量创建数据目录 结果是/home/gpadmin/gpdata
[gpadmin@mdw conf]$ gpssh -f hostlist
=> mkdir gpdata
[ mdw]
[sdw2]
[sdw1]
=> cd gpdata
[ mdw]
[sdw2]
[sdw1]
=> mkdir gpmaster gpdatap1 gpdatap2 gpdatam1 gpdatam2
[ mdw]
[sdw2]
[sdw1]
=> exit
在每个节点上配置.bash_profile环境变量 对于这一步,查看数据节点的greenplum_path.sh的确切位置 使用 su - gpadmin
[gpadmin@mdw ~]$ cd
[gpadmin@mdw ~]$ cat .bash_profile
.bash_profile
Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fiUser specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
source /home/gpadmin/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=2345
export PGDATABASE=postgres
[gpadmin@mdw ~]$ source .bash_profile
在主节点上初始化配置文件
ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
SEG_PREFIX=gpseg
PORT_BASE=33000
declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster
MASTER_PORT=2345
TRUSTED_SHELL=/usr/bin/ssh
MIRROR_PORT_BASE=43000
REPLICATION_PORT_BASE=34000
MIRROR_REPLICATION_PORT_BASE=44000
declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)
- chown -R gpadmin:gpadmin /home/gpadmin/conf/gpinitsystem_config
[gpadmin@mdw ~]$ cat /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)
在主节点初始化数据库
gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config
如果gpinitsystem不能成功,就在master节点的/home/gpadmin/gpAdminLogs/的gpinitsystem_*.log文件中查看日志信息,找出原因进行修改,然后再重新执行gpinitsystem进行初始化安装。
出现如下问题:ping: socket: Operation not permitted
命令行执行 su - gpadmin
setcap cap_net_raw=ep $(which ping)
安装完成后使用 su - gpadmin
psql