高效使用Greenplum:入门、进阶与数据中台
上QQ阅读APP看书,第一时间看更新

3.1 Greenplum数据库安装过程

本节主要介绍如何以二进制或者RPM包的方式在Linux系统上安装和部署Greenplum数据库。数据库开发者也可以下载Greenplum源码进行编译和安装。

下面以目前最常用的CentOS为例,展示如何部署Greenplum集群。安装和部署Greenplum数据库主要有4个步骤:常规的准备工作,比如修改系统参数等;安装Master节点;复制安装包到其他节点;初始化数据库。

3.1.1 准备工作

安装之前的准备工作主要包括选择合适的软硬件系统以及对系统参数进行配置。安装Greenplum对软硬件的要求如表3-1所示。

表3-1 安装Greenplum对软硬件系统的要求

000

注意

表3-1所示的要求是针对生产环境的。在非生产环境下,Greenplum对软硬件系统并没有严格的要求,如果读者想在自己的电脑或者VMware上安装Greenplum也是可以的。

部署Greenplum数据库,需要对各个节点的操作系统参数进行修改。详细过程如下。

第一步:添加Greenplum管理用户,一般命名为gpadmin,代码如下所示。通常情况下,不建议用root用户运行Greenplum软件。

groupadd -g 520 gpadmin
useradd -g 520 -u 520 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /data/greenplum/
passwd gpadmin
Changing password for user root.
New password: 
Retype new password: 

第二步:修改网络映射。检查/etc/hosts文件夹,确保该文件夹包含Greenplum集群所有主机的别名的网络IP地址映射。这里的别名可以是主机名,也可以是适合表示节点用途的名字,代码如下。

#查看/etc/hosts主机映射信息
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4

192.168.8.101    gp-master
192.168.8.102    gp-datanode01
192.168.8.103    gp-datanode02
192.168.8.104    gp-datanode03

第三步:修改系统参数。编辑/etc/sysctl.config文件,添加以下内容并执行sysctl -p命令让其生效。

kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 1000 10240000 400 10240
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
kernel.pid_max = 655360
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2
vm.overcommit_ratio = 90
vm.swappiness = 10

系统控制参数含义如表3-2所示。

表3-2 系统控制参数解释说明

000
000

第四步:修改文件打开限制。编辑/etc/security/limits.conf文件并添加以下内容。

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

第五步:创建安装目录并赋权限,代码如下。

mkdir /data/greenplum
chown -R gpadmin:gpadmin /data/greenplum/

以上修改需要在所有Greenplum集群上逐个执行。除了对操作系统进行修改之外,可能需要更新一些常用软件或者工具,比如sed、tar、perl等,大部分CentOS版本已经默认安装,在此不一一列举。如果在配置安装过程中缺失某些软件,用户可以根据错误提示信息自行安装。

3.1.2 安装Master节点

在完成准备工作之后,就可以安装Greenplum软件了。通常先在一个节点(一般是在Master节点)上安装,然后通过脚本将安装包复制到其他节点上。安装Greenplum数据库可以选择RPM包或者BIN包安装。由于BIN安装包在Greenplum 6.x及以后版本不再提供,因此我们选择RPM包的安装方式。

1. RPM包安装

可以从Greenplum的GitHub页面(https://github.com/greenplum-db/gpdb/releases)下载RPM包,或注册并登录到Pivotal公司官网(https://network.pivotal.io/products/pivotal-gpdb)进行下载。如果需要二次开发,建议使用GitHub的版本,如果需要集成GPCC等组件,建议下载Pivotal官网版本,命令如下所示。

#通过wget命令下载Greenplum安装包
cd /home/pgadmin
wget  https://github.com/greenplum-db/gpdb/releases/download/6.10.1/greenplum-db-
    6.10.1-rhel7-x86_64.rpm
#先安装Greenplum相关依赖包
yum install apr apr-util krb5-devel libyaml rsync zip libevent
#RPM安装需要以root用户身份执行,并安装到指定目录/data/greenplum目录下
rpm -ivh --prefix=/data/greenplum/ greenplum-db-6.10.1-rhel7-x86_64.rpm

常见安装报错如图3-1所示。这个错误提示我们,安装Greenplum之前需要先安装apr、apr-util、krb5-devel、libyaml、rsync、zip、libevent等依赖包。

000

图3-1 Greenplum缺少依赖包报错

执行安装的过程如图3-2所示。

000

图3-2 Greenplum安装过程截图

2. Greenplum文件结构

Greenplum安装完成后,需要设置Greenplum的安装目录到环境变量中。

#添加环境变量到/etc/profile
export GP_HOME=/data/greenplum/greenplum-db

Greenplum安装成功后,目录结果如图3-3所示。

000

图3-3 Greenplum根目录截图

从上往下看,各个文件夹或者文件的内容(不同版本的安装文件可能会略有不同)如下。

1)all_hosts在安装Segment实例时创建,存放Greenplum所有节点的host信息。

2)bin主要存放Greenplum客户端和服务器端的可执行程序。

3)COPYRIGHT存放Pivotal的著作权声明。

4)docs存放Greenplum的帮助文档和一些参数配置模板。

5)etc存放Greenplum的配置文件。

6)ext存放Greenplum工具类使用的一些程序。

7)gpinitsystem_config是创建Segment实例时用户定义的文件。

8)greenplum_path.sh保存的是Greenplum的环境变量,用户在使用Greenplum的各种命令前应该先执行source $GP_HOME/greenplum_path.sh命令。

9)include包含Greenplum的一些C语言文件。

10)lib和libexec存放Greenplum和PostgreSQL的部分库文件。

11)LICENSE存放Apache的开源协议。

12)NOTICE存放Greenplum遵守Apache开源协议的声明。

13)open_source_license_greenplum_database.txt和open_source_licenses.txt存放VMware的许可声明。

14)pxf存放Greenplum的PXF组件,用于用户访问外部数据。

15)sbin存放一些为Greenplum提供支持的脚本。

16)seg_hosts在安装Segment实例时创建,存放数据节点的host信息。

17)share存放Greenplum数据库的共享文件。

3.1.3 复制安装包到其他节点

1. 创建节点信息配置文件

创建节点的配置文件,包含all_hosts和seg_hosts文件,分别存放全部节点和数据节点的主机信息,代码如下所示。

[gpadmin@gp-master ~]$ cat /home/gpadmin/all_hosts
gp-master
gp-datanode01
gp-datanode02
gp-datanode03
[gpadmin@gp-master ~]$ cat /home/gpadmin/seg_hosts
gp-datanode01
gp-datanode02
gp-datanode03

2. 打通不同节点之间的ssh验证

第一步:在各个节点服务器上生成ssh密钥,代码如下所示。

[gpadmin@gp-master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
88:c0:be:87:6a:c2:40:ed:fd:ab:34:f0:35:60:47:0f root@mdw
The key's randomart image is:
+--[ RSA 2048]----+
|       E         |
| .    . o        |
|  +  o . .       |
| o o..o.         |
|. o.o .oS        |
|.  +o.. .        |
|o o .+.          |
|.+ .. ..         |
|+    ....        |
+-----------------+

第二步:交换密钥,将本机的公钥复制到各个集群服务器的authorized_keys文件中。

[gpadmin@gp-master ~]# ssh-copy-id gp-master
[gpadmin@gp-master ~]# ssh-copy-id gp-datanode01
[gpadmin@gp-master ~]# ssh-copy-id gp-datanode02
[gpadmin@gp-master ~]# ssh-copy-id gp-datanode03

第三步:验证节点之间的ssh是否全部打通,即服务器间免密码登录是否成功,代码如下所示。

#ssh打通后就可以使用gpssh命令对所有节点进行批量操作了
[gpadmin@gp-master ~]$ gpssh -f all_hosts=> pwd
[gp-datanode01] /home/gpadmin
[gp-master]     /home/gpadmin
[gp-datanode02] /home/gpadmin
[gp-datanode03] /home/gpadmin

注意

较大规模的集群建议直接通过Greenplum数据库安装包提供的gpssh-exkeys工具实现ssh密钥的生成和分发。具体命令为gpssh-exkeys -f /home/gpadmin/all_hosts。

3. 复制Greenplum安装包并分发至其他节点

单机版本的Greenplum安装以后,直接把Greenplum安装包复制并分发至其他节点再解压缩,代码如下所示。

#把主节点安装好的程序压缩后分发至每个子节点
tar -cf gpdb6.10.1.tar greenplum-db-6.10.1/ #压缩
gpscp -f /home/gpadmin/all_hosts gpdb6.10.1.tar =:/data/greenplum/ #分发
#批量解压文件
gpssh -f seg_hosts=> 
=> tar -xf gpdb6.10.1.tar
=>ln -s /data/greenplum/greenplum-db-6.10.1 /data/greenplum/greenplum-db #建立软链接

3.1.4 初始化Greenplum数据库

分别创建数据目录和管理节点目录,代码如下所示。

#在主节点创建master目录
MASTER=> mkdir -p /data/greenplum/gpdata/master
#在从节点分布创建primary目录和mirror目录
[gpadmin@gp-master ~]$ gpssh -f seg_hosts=> 
=> mkdir -p /data/greenplum/gpdata/primary
=> mkdir -p /data/greenplum/gpdata/mirror

修改并生成配置文件,配置.bash_profile环境变量,代码如下所示。

#向gpadmin用户的.bash_profile文件中添加以下信息
vi ~/.bash_profile
source /data/greenplum/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/greenplum/gpdata/gpmaster/gpseg-1
export PGPORT=5432
source .bash_profile

生成初始化配置文件模板gpinitsystem_config并修改参数,本示例保存的配置模板如下。

ARRAY_NAME="Greenplum"
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/data/greenplum/gpdata/primary /data/greenplum/gpdata/
    primary /data/greenplum/gpdata/primary /data/greenplum/gpdata/primary)
    #以每个数据节点上面创建4个Segment实例为例
MASTER_HOSTNAME=gp-master
MASTER_DIRECTORY=/data/greenplum/gpdata/gpmaster
MASTER_PORT=5432
TRUSTED_SHELL=/usr/bin/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/greenplum/gpdata/mirror /data/greenplum/
    gpdata/mirror /data/greenplum/gpdata/mirror /data/greenplum/gpdata/mirror)
    #对应的镜像实例数量要和主实例一致;如果不创建镜像则留空
MACHINE_LIST_FILE=/home/gpadmin/seg_hosts

初始化数据库代码如下。

gpinitsystem -c /home/gpadmin/gpinit_config -s gp-datanode03 -h /home/gpadmin/seg_hosts

注意

-s gp-datanode03是指Standby Master节点安装的主机,一些资料中将备份放在最后一个节点上,是约定俗成的做法。

初始化数据库时根据脚本的提示操作即可,如果配置有问题,gpinitsystem命令就不能运行成功,错误日志存储在/home/gpadmin/gpAdminLogs中,需要认真查看日志报错信息,修改正确后再重新安装。

注意

虽然Greenplum配置Mirror节点的目的是做数据备份,但是我认为其起到的备份作用十分有限,建议根据硬件资源是否充足来决定是否安装数据库。如果系统批处理数据是全量更新的,建议做好离线备份,忽略Mirror节点,以提高系统资源使用率,加快查询速度。

测试数据库,登录默认的数据库postgres,代码如下所示。

[gpadmin@gp-master ~]$  psql -d postgres
psql (9.4.20)
Type "help" for help.
postgres=#

至此,Greenplum数据库集群就安装成功了。如果想通过Docker安装Greenplum,可以参考网上教程,过程相差不大。