Add new segment to greenplum cluster
在生产环境中,因为数据量的增加,存在动态扩容 greenplum 存储容量的需求。
纵向扩容指在现有服务器上增加配置,如增加磁盘,增加内存等,因为在集群初始化部署规划中就已经考虑到了服务器各资源的配置,一般而言多用于测试环境。
横向扩容指增加服务器节点,这在分布式存储系统上是通用解决方案,如 hdfs,ceph 等都能做到横向动态扩容。
本文续接上文:greenplum 部署 因此环境与上文保持一致,测试增加一台服务器 sdw2 作为segment 节点,服务器列表如下表:
IP | hostname | role | 数据盘 |
---|---|---|---|
192.168.1.213 | mdw | master | vdb |
192.168.1.223 | smdw | standby master | vdb |
192.168.1.233 | sdw1 | segment1 | vdb |
192.168.1.204 | localhost | dns, ntp | |
192.168.1.243 | sdw2 | segment2 | vdb |
ansible 脚本配置 sdw2 服务器环境
ansible inventory配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ntp]
sdw2
[dns]
sdw2
[greenplum_master]
[greenplum_standby]
[greenplum_segments]
sdw2
[greenplums]
sdw2
site.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- name: configure local DNS server
hosts: dns
remote_user: root
roles:
- {role: dns, dns_nameservers:['192.168.1.204']}
tags:
- dns
- name: deploy greenplum
hosts: greenplums
remote_user: root
roles:
- greenplum
tags:
- greenplum
ansible-playbook
1
2
3
# git clone http://git.jfbrother.com/zhengtianbao/jfbigdata-ansible.git jfbigdata-ansible
# cd jfbigdata-ansible
# ansible-playbook -t ntp,dns,greenplum -i inventory site.yml
初始化 sdw2 环境完毕。
扩容
登录到 master 节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ssh root@mdw
[root@mdw ~]# cat << EOF > /home/gpadmin/new_segnodes
sdw2
EOF
# ssh key
[root@mdw ~]# gpssh-exkeys -e /home/gpadmin/all_nodes -x /home/gpadmin/newseg_nodes
# 初始化新增segment node
[root@mdw ~]# gpseginstall -f /home/gpadmin/newseg_nodes -u gpadmin -p 123456
# 登录到gpadmin用户
[root@mdw ~]# su - gpadmin
# greenplum创建临时数据库
[gpadmin@mdw ~]$ psql postgres gpadmin
psql (8.3.23)
Type "help" for help.in;
postgres=# create database jfbrother owner gpadmin;
postgres=# \q
# 生成gpexpand配置文件,也可以自己手动配置
[gpadmin@mdw ~]$ gpexpand -f newseg_nodes -D jfbrother
# ! 注意 这里报错,因为集群已配置为mirror模式,因此需要增加偶数个节点,作为测试手动配置文件,文件规则见下文
[gpadmin@mdw ~]$ cat << EOF > gpexpand_inputfile
sdw2:sdw2:40000:/data1/gpdatap1/gpseg2:7:2:p:41000
sdw2:sdw2:40001:/data1/gpdatap2/gpseg3:8:3:p:41001
sdw2:sdw2:50000:/data1/gpdatam1/gpseg2:9:2:m:51000
sdw2:sdw2:50001:/data1/gpdatam2/gpseg3:10:3:m:51001
EOF
# expand节点
[gpadmin@mdw ~]$ gpexpand -i gpexpand_inputfile -D jfbrother -S -V -v -n 1 -t /tmp
# 查看结果
[gpadmin@mdw ~]$ gpstate
gpexpand 文件规则说明
postgre 中查看现有的配置规则:
1
2
3
4
5
6
7
8
9
10
11
12
13
[gpadmin@mdw ~]$ psql postgres gpadmin
psql (8.3.23)
Type "help" for help.
postgres=# select * from gp_segment_configuration;
dbid | content | role | preferred_role | mode | status | port | hostname | address | replication_port
------+---------+------+----------------+------+--------+-------+----------+---------+------------------
1 | -1 | p | p | s | u | 5432 | mdw | mdw |
2 | 0 | p | p | s | u | 40000 | sdw1 | sdw1 | 41000
3 | 1 | p | p | s | u | 40001 | sdw1 | sdw1 | 41001
4 | 0 | m | m | s | u | 50000 | sdw1 | sdw1 | 51000
5 | 1 | m | m | s | u | 50001 | sdw1 | sdw1 | 51001
6 | -1 | m | m | s | u | 5432 | smdw | smdw |
而 gpexpand 文件每行为:
1
2
3
4
5
6
7
8
9
<hostname>:<address>:<port>:<fselocation>:<dbid>:<content>:<preferred_role>:<replication_port>
hostname 主机名
address 类似主机名
port segment 监听端口
fselocation segment data 目录,注意是全路径
dbid gp 集群的唯一 ID,可以到gp_segment_configuration 中获得,必须顺序累加
content 可以到 gp_segment_configuration 中获得,必须顺序累加
prefered_role 角色(p 或 m)(primary,mirror)
replication_port 如果没有 mirror 则不需要(用于 replication 的端口)
扩容失败回滚操作
1
2
3
[gpadmin@mdw ~]$ gpstart -R
[gpadmin@mdw ~]$ gpexpand -r -D jfbrother
[gpadmin@mdw ~]$ gpstart
参考链接
This post is licensed under CC BY 4.0 by the author.