1. 分布式部署
此节主要介绍 Greenplum 数据库的几种部署方式,和常见问题。
1.1 基础部署
1.1.1 初始化操作系统(所有节点都需要做此项工作)
- 创建用户和组 gpadmin
[root@xxx]# groupadd -g 3030 gpadmin[root@xxx]# useradd -u 3030 gpadmin -g gpadmin -d /home/gpadmin[root@xxx]# passwd gpadmin
- 配置内核参数,添加如下内容
[root@xxx]# nano /etc/sysctl.conf #By greenplumnet.ipv4.ip_forward = 0net.ipv4.conf.default.accept_source_route = 0kernel.sysrq = 1kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.sem = 250 64000 100 512kernel.shmmax = 500000000kernel.shmmni = 4096kernel.shmall = 4000000000kernel.sem = 250 64000 100 512net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_max_syn_backlog=4096net.core.netdev_max_backlog=10000vm.overcommit_memory=2net.ipv4.conf.all.arp_filter = 1
- 手工执行命令,让参数生效
[root@xxx]# sysctl -p
- 在limits.conf文件中添加如下配置
[root@xxx]# nano /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 131072* hard nproc 131072
- 调整IO调度算法 修改内核参数,添加如下配置,调整IO调度算法:(重启系统才能生效)
[root@xxx]# nano /boot/grub/menu.lstelevator=deadline
- 设置磁盘预读,优化磁盘IO效率(重启系统才能生效)
[root@xxx]# nano /etc/rc.d/rc.localblockdev --setra 16384 /dev/sd*
- 安装其他必备系统软件
此处以 CentOS 7.2 (1511) 为例。
- 解压缩 greenplum 安装包使用
yum -y install unzip
- 监控系统负载使用(mpstat,iostat等)
yum -y install sysstat
- Greenplum 扩展节点时需要使用到 Perl
yum -y install perl
- 防火墙设置
用户可以详细配置系统防火墙允许的端口,由于 Greenplum 使用到的端口较多,这里选择关闭。
systemctl stop firewalldsystemctl disable firewalld
- 重启系统
[root@xxx]# reboot
1.1.2 检查操作系统参数
重新启动后,应该逐一对各项参数进行检查。
- 验证内核参数配置是否生效
[root@xxx]# cat /sys/block/*/queue/schedulernoop anticipatory deadline [cfq] noop anticipatory deadline [cfq] 输出的行应该含有[deadline]
- 验证磁盘预读预读配置
修改前:[root@xxx]# blockdev --getra /dev/sd*256256256256256修改后:[root@xxx]# blockdev --getra /dev/sd*1638416384163841638416384
1.1.3 开始安装 Greenplum 数据库
此处假设有 3 个节点,即: mdw,sdw01,sdw02。
需要在所有节点进行配置:
- 修改 hosts 文件配置如下
su rootnano /etc/hosts10.20.17.178 mdw10.20.17.179 sdw110.20.17.180 sdw2
- 添加 gpadmin 用户
groupadd -g 3030 gpadminuseradd -u 3030 gpadmin -g gpadmin -d /home/gpadminpasswd gpadmin
- 在 mdw (主节点)上安装 greenplum greenplum-db-4.3.11.3-rhel5-x86_64.zip 安装压缩包 已经预先放置在所有节点的 /home/gpadmin/gpdb_install_package 下
cd /home/gpadmin/gpdb_install_packagesu gpadminunzip greenplum-db-4.3.11.3-rhel5-x86_64.zipsu root./greenplum-db-4.3.11.3-rhel5-x86_64.bin
- 赋权
chown -R gpadmin:gpadmin /usr/local/green*
- 添加 all_hosts 和 seg_hosts 文件
su gpadmincd ~nano all_hostsmdwsdw1sdw2nano seg_hostssdw1sdw2
- 建立文件夹并赋权
su rootmkdir -p /tol/mastermkdir -p /tol/data/gp1mkdir -p /tol/data/gp2mkdir -p /tol/data/gp3mkdir -p /tol/data/gp4chown -R gpadmin:gpadmin /tol/masterchown -R gpadmin:gpadmin /tol/data/gp*
- 修改 .bash_profile 文件 注意所有节点都需要建立此文件并执行后才能执行
gpinitsystem -c gpinitsystem_config
这是非常重要的步骤!
su gpadmincd ~nano .bash_profilesource /usr/local/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/tol/master/gpseg-1export PGPORT=5432export PGUSER=gpadminexport PGDATABASE=gpdb1source .bash_profile
- 建立节点信任
gpssh-exkeys -f all_hosts
- 打包主节点上的安装文件
su rootcd /usr/local/tar -cvf gpdb4.3.tar greenplum-db-4.3.11.3
- 将包传至 各个节点的
usr/local/
scp gpdb4.3.tar root@sdw1:/usr/local/scp gpdb4.3.tar root@sdw2:/usr/local/
-
在 段节点(从节点) 进行操作
-
解压安装包
su rootcd /usr/local/tar -vxf gpdb4.3.tarln -s greenplum-db-4.3.11.3 greenplum-dbchown -R gpadmin:gpadmin /usr/local/green*
- 添加需要的文件夹
su rootmkdir -p /tol/mastermkdir -p /tol/data/gp1mkdir -p /tol/data/gp2mkdir -p /tol/data/gp3mkdir -p /tol/data/gp4chown -R gpadmin:gpadmin /tol/masterchown -R gpadmin:gpadmin /tol/data/gp*
- 回到 主节点 配置初始化文件
su gpadmincp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config .
- 修改 gpinitsystem_config 文件
nano gpinitsystem_configdeclare -a DATA_DIRECTORY=(/tol/data/gp1 /tol/data/gp2 /tol/data/gp3 /tol/data/gp4)MASTER_HOSTNAME=mdwMASTER_DIRECTORY=/tol/masterDATABASE_NAME=gpdb1MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
- 初始化数据库(-a为不提示安装)
gpinitsystem -c gpinitsystem_config -a
1.1.4 安装完毕后数据库初始设置
- 安装结束后可以连接GP数据库了:
[gpadmin@xxx]$ psql -d gpdb1psql (8.2.15)Type "help" for help.goolen=# \q
- 初始设置, 设置密码
psql -h mdw -p 5432 -d gpdb1 -U gpadminalter role gpadmin with password 'gpadmin';
- 修改远程访问(检查你的IP段进行设置)
nano $MASTER_DATA_DIRECTORY/pg_hba.conf增加host all all 10.20.17.0/24 md5
- 重新加载配置
gpstop -u
- 查询数据分布,users_info 是 自己创建的表, 数据会均匀分布在 sdw1 和 sdw2 节点 的 上 /tol/data/gp1 ~ /tol/data/gp4 上,共 8 个段
select gp_segment_id, count(*) from users_info group by gp_segment_id;gpdb1=# select gp_segment_id, count(*) from users_info group by gp_segment_id; gp_segment_id | count ---------------+------- 7 | 133 3 | 130 4 | 130 0 | 113 1 | 118 2 | 115 6 | 142 5 | 121
1.2 无镜像模式部署
假设你拥有 3 个节点,分别为 mdw,sdw01,sdw02。在这种情况下,对 sdw 中的 segment 的数量Greenplum 没有限制,但是 Linux 内核信号量限制在 40 个左右(建议不要超过 32 个)。初始化时需要将 gpinitsystem_config
中所有与镜像模式相关的选项全部注释。初始化命令如下:
gpinitsystem -c gpinitsystem_config -a
典型的就是上述的这种基础部署这种模式。
1.3 添加新节点
-
首先需要对新节点进行系统初始化 参考基础部署中的初始化系统。并将安装包拷贝至新节点指定位置
/usr/local
,解压,并建立快捷方式。 -
在 mdw节点 上添加节点 略
1.4 镜像模式部署
假设你拥有 3 个节点,分别为 mdw,sdw01,sdw02。sdw01 做 standby,Greenplum 对 sdw 中的 segment 限制为 1 个(只能为1),内部机制为交叉备份。修改配置文件gpinitsystem_config
为:
ARRAY_NAME="EMC Greenplum DW"SEG_PREFIX=gpsegPORT_BASE=40000declare -a DATA_DIRECTORY=(/tol/data/gp1)MASTER_HOSTNAME=mdwMASTER_DIRECTORY=/tol/masterMASTER_PORT=5432TRUSTED_SHELL=sshCHECK_POINT_SEGMENTS=8ENCODING=UNICODE# 镜像相关配置#MIRROR_PORT_BASE=50000#REPLICATION_PORT_BASE=41000#MIRROR_REPLICATION_PORT_BASE=51000#declare -a MIRROR_DATA_DIRECTORY=(/tol/data/mi1)DATABASE_NAME=gpdb1MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
初始化命令:
# 默认使用 sdw01 为 standby 节点gpinitsystem -c gpinitsystem_config -a -s sdw01 -S
那么,假设你拥有 5 个节点,分别为 mdw,sdw01,sdw02,sdw03,sdw04,那么每个 segment 节点最多可以有 2 个 segment(当然 1 个 segment 也可以)。共计 8 个 segment 。
在镜像模式下,节点(mdw节点不计在内)与段的关系为: 每个节点上的(最佳)大段数为总节点数的 1/2 ,即:
节点数 | 每个节点的最大段数 | 总计最大有效段数 |
---|---|---|
2 | 1 | 2 |
4 | 2 | 8 |
8 | 4 | 32 |
16 | 8 | 128 |
32 | 16 | 512 |
如果不按照上述建议,在镜像模式下,可以采用最大 段节点数 的倍数来调试。
例如:
现有 6个段节点,那么段实例的个数可以使用 6,12,18,24,30...这种方式来扩展,但是段实例过多会导致初始化时,段实例启动失败。
由于段数受到此规则(交叉备份)限制,这一点必须要注意。
注意:
经过实际测试,在6个段节点规模,使用 gpinitsystem 初始化镜像模式最大为6个段实例,超过6后,一直无法通过初始化。
但是,可以采用先使用无镜像模式初始化,在初始化完成后,通过 gpaddmirrors 工具添加镜像节点使得一个节点的最大段实例提高至18个(共6个节点,段实例加镜像段实例总计216个段),这一方法可以借鉴。
在完成镜像节点的添加后,再通过 gpinitstandby 来添加 standby 节点。