Greenplum是一个MPP(海量并行处理)计算框架的分布式数据库,其数据库引擎层是基于著名的Postgresql数据库,企业级数据库产品,现已开源。Greenplum拥有丰富的特性,包括:
1、完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展,支持ODBC和JDBC
2、支持分布式事务,支持ACID
3、支持行存储、列存储,以及可通过外部表的方式访问其它关系型数据库或者Hadoop
4、拥有良好的线性扩展能力,支持上千个节点
 

Greenplum的体系架构如下:

Greenplum 7安装部署 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进行初始化安装。