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 greenplum
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.sem = 250 64000 100 512
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 64000 100 512
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_max_syn_backlog=4096
net.core.netdev_max_backlog=10000
vm.overcommit_memory=2
net.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.lst
elevator=deadline
- 设置磁盘预读,优化磁盘IO效率(重启系统才能生效)
[root@xxx]# nano /etc/rc.d/rc.local
blockdev --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 firewalld
systemctl disable firewalld
- 重启系统
[root@xxx]# reboot
1.1.2 检查操作系统参数
重新启动后,应该逐一对各项参数进行检查。
- 验证内核参数配置是否生效
[root@xxx]# cat /sys/block/*/queue/scheduler
noop anticipatory deadline [cfq]
noop anticipatory deadline [cfq]
输出的行应该含有[deadline]
- 验证磁盘预读预读配置
修改前:
[root@xxx]# blockdev --getra /dev/sd*
256
256
256
256
256
修改后:
[root@xxx]# blockdev --getra /dev/sd*
16384
16384
16384
16384
16384
1.1.3 开始安装 Greenplum 数据库
此处假设有 3 个节点,即: mdw,sdw01,sdw02。
需要在所有节点进行配置:
- 修改 hosts 文件配置如下
su root
nano /etc/hosts
10.20.17.178 mdw
10.20.17.179 sdw1
10.20.17.180 sdw2
- 添加 gpadmin 用户
groupadd -g 3030 gpadmin
useradd -u 3030 gpadmin -g gpadmin -d /home/gpadmin
passwd gpadmin
- 在 mdw (主节点)上安装 greenplum greenplum-db-4.3.11.3-rhel5-x86_64.zip 安装压缩包 已经预先放置在所有节点的 /home/gpadmin/gpdb_install_package 下
cd /home/gpadmin/gpdb_install_package
su gpadmin
unzip greenplum-db-4.3.11.3-rhel5-x86_64.zip
su root
./greenplum-db-4.3.11.3-rhel5-x86_64.bin
- 赋权
chown -R gpadmin:gpadmin /usr/local/green*
- 添加 all_hosts 和 seg_hosts 文件
su gpadmin
cd ~
nano all_hosts
mdw
sdw1
sdw2
nano seg_hosts
sdw1
sdw2
- 建立文件夹并赋权
su root
mkdir -p /tol/master
mkdir -p /tol/data/gp1
mkdir -p /tol/data/gp2
mkdir -p /tol/data/gp3
mkdir -p /tol/data/gp4
chown -R gpadmin:gpadmin /tol/master
chown -R gpadmin:gpadmin /tol/data/gp*
- 修改 .bash_profile 文件 注意所有节点都需要建立此文件并执行后才能执行
gpinitsystem -c gpinitsystem_config
这是非常重要的步骤!
su gpadmin
cd ~
nano .bash_profile
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/tol/master/gpseg-1
export PGPORT=5432
export PGUSER=gpadmin
export PGDATABASE=gpdb1
source .bash_profile
- 建立节点信任
gpssh-exkeys -f all_hosts
- 打包主节点上的安装文件
su root
cd /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 root
cd /usr/local/
tar -vxf gpdb4.3.tar
ln -s greenplum-db-4.3.11.3 greenplum-db
chown -R gpadmin:gpadmin /usr/local/green*
- 添加需要的文件夹
su root
mkdir -p /tol/master
mkdir -p /tol/data/gp1
mkdir -p /tol/data/gp2
mkdir -p /tol/data/gp3
mkdir -p /tol/data/gp4
chown -R gpadmin:gpadmin /tol/master
chown -R gpadmin:gpadmin /tol/data/gp*
- 回到 主节点 配置初始化文件
su gpadmin
cp /usr/local/greenplum-db/docs/cli_help/gpconfigs/gpinitsystem_config .
- 修改 gpinitsystem_config 文件
nano gpinitsystem_config
declare -a DATA_DIRECTORY=(/tol/data/gp1 /tol/data/gp2 /tol/data/gp3 /tol/data/gp4)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/tol/master
DATABASE_NAME=gpdb1
MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
- 初始化数据库(-a为不提示安装)
gpinitsystem -c gpinitsystem_config -a
1.1.4 安装完毕后数据库初始设置
- 安装结束后可以连接GP数据库了:
[gpadmin@xxx]$ psql -d gpdb1
psql (8.2.15)
Type "help" for help.
goolen=# \q
- 初始设置, 设置密码
psql -h mdw -p 5432 -d gpdb1 -U gpadmin
alter 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=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/tol/data/gp1)
MASTER_HOSTNAME=mdw
MASTER_DIRECTORY=/tol/master
MASTER_PORT=5432
TRUSTED_SHELL=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=(/tol/data/mi1)
DATABASE_NAME=gpdb1
MACHINE_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 节点。