Greenplum是一个MPP(海量并行处理)计算框架的分布式数据库,其数据库引擎层是基于著名的Postgresql数据库,企业级数据库产品,现已开源。Greenplum拥有丰富的特性,包括:
1、完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展,支持ODBC和JDBC
2、支持分布式事务,支持ACID
3、支持行存储、列存储,以及可通过外部表的方式访问其它关系型数据库或者Hadoop
4、拥有良好的线性扩展能力,支持上千个节点
Greenplum的体系架构如下:
master节点可实现主备高可用,避免单点故障;segments节点分散存放数据,数据作多副本保存,可进行数据的并行查询和操作,非常高效。
下面描述在docker中安装配置greenplum集群的过程
一、安装docker
本人手上只有一台笔记本,安装了Ubuntu操作系统,为了方便安装测试greenplum集群,在Ubuntu操作系统上安装docker,然后创建多个容器构建出一个greenplum集群。
1、安装docker
sudo apt-get install docker
2、拉取centos镜像
docker pull centos:latest
3、创建容器,作为greenplum的节点
sudo docker run --name gpcentos1 -it centos /bin/bash
sudo docker run --name gpcentos2 -it centos /bin/bash
sudo docker run --name gpcentos3 -it centos /bin/bash
sudo docker run --name gpcentos4 -it centos /bin/bash
二、配置基础环境
进入到每个greenplum节点,配置基础环境
1、安装相关的依赖包
由于拉取了docker的centos镜像,这个是centos的简化版本,里面有一些程序包是没有默认安装的,会影响到后面部署greenplum,因此在docker的每个节点中安装相关的依赖包
# centos 安装相关的依赖包(每个节点)
yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64
2、启动ssh
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
3、配置主机域名映射关系
在每个docker节点中配置,方便后续greenplum集群的配置文件中用到
vi /etc/hosts
172.17.0.2 25cd9b8d455f
172.17.0.3 2ced6321dab6
172.17.0.4 d2b44bb77b77
172.17.0.2 dw-greenplum-1 mdw
172.17.0.3 dw-greenplum-2 sdw1
172.17.0.4 dw-greenplum-3 sdw2
同时,修改所有节点里面的 /etc/sysconfig/network 文件,保持主机名一致
cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mdw
4、创建greenplum的用户和用户组
在每个节点中创建greenplum的用户和用户组,方便安装greenplum集群。另外,由于greenplum自带了一个python,容易也系统的python版本相冲突,为了不影响到系统的其它用户,将创建安装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
5、修改每个节点上的文件打开数量限制
vi /etc/security/limits.conf
# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
6、关闭每个节点上的防火墙,关闭selinux
service iptables stop
chkconfig iptables off
[root@mdw selinux]# cat /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安装包,点开Greenplum Database Server,根据操作系统下载安装包 greenplum-db-4.3.14.1-rhel5-x86_64.zip,将其上传到master节点mdw的/home/gpadmin目录中。
四、在master节点上安装greenplum
切换到gpadmin账号
su gpadmin
解压下载后的zip文件
unzip greenplum-db-4.3.14.1-rhel5-x86_64.zip
赋予文件执行权限
chmod +x greenplum-db-4.3.14.1-rhel5-x86_64.bin
执行安装文件
./greenplum-db-4.3.14.1-rhel5-x86_64.bin
安装期间需要修改默认安装目录,输入/home/gpadmin/greenplum-db-4.3.14.1
为了方便安装集群,greenplum提供了批量操作的指令,通过创建配置文件,以使用批处理命令
[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
[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的批处理命令
[gpadmin@mdw ~]$ gpssh -f /home/gpadmin/conf/hostlist
Note: command history unsupported on this machine ...
=> pwd
[sdw1] /home/gpadmin
[sdw2] /home/gpadmin
[ mdw] /home/gpadmin
=> exit
这里pwd命令是linux中的查看路径命令,在这里也是查看批量操作时所在的路径,从中可以看到已经成功连通了三个节点
五、分发安装包到每个子节点
打包master节点上的安装包
tar -cf gp.4.3.tar greenplum-db-4.3.14.1/
使用gpscp命令将这个文件复制到每一台机器上
gpscp -f /home/gpadmin/conf/hostlist gp.4.3.tar =:/home/gpadmin/
批量解压,并建立软链接
[gpadmin@mdw conf]$ gpssh -f hostlist
=> cd /opt/greenplum
[sdw1]
[sdw2]
[mdw]
=> tar -xf gp.4.3.tar
[sdw1]
[sdw2]
[mdw]
=> ln -s ./greenplum-db-4.3.8.1 greenplum-db
[sdw1]
[sdw2]
[mdw]
这样就完成了所有节点的安装
六、初始化安装数据库
1、批量创建数据目录
[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
2、在每个节点上配置.bash_profile环境变量
[gpadmin@mdw ~]$ cd
[gpadmin@mdw ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
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
3、初始化配置文件
[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)
4、初始化数据库
gpinitsystem -c /home/gpadmin/conf/gpinitsystem_config -s sdw2
其中,-s sdw2是指master的standby所在的节点,然后按照提示步骤就能完成安装了。
如果gpinitsystem不能成功,就在master节点的/home/gpadmin/gpAdminLogs/的gpinitsystem_*.log文件中查看日志信息,找出原因进行修改,然后再重新执行gpinitsystem进行初始化安装。