本节主要从集群扩容的角度,进一步了解gp集群的日常运维工作。
目录:
- 集群扩容的一般性原则
- 扩容规划
- 准备增加新节点
- 初始化新的segment
- 重分布表
基本概念:
1.集群扩容的一般性原则
- 弹性伸缩容量和性能
- 扩容期间服务不中断
- 扩容前后事务的一致性
- 容错机制不受干扰
- 数据复制和灾备恢复不受影响
- 扩容机制透明,方便管理员排查问题和进度
- 流程可配置化
2.扩容规划
- 系统扩容检查列表
扩容前的准备工作,制定扩容方案,验证新旧环境,验证内存磁盘带宽目录和文件可用性。
扩容开始后,降低大规模操作的进程,重新分布表,移除扩展方案,运行健康检查,查看统计信息。
- 规划新的硬件平台
主要考虑软硬件的兼容性和版本一致性。
一般性的考虑如下:
为新硬件准备物理空间,考虑冷却、电力供应和其他物理因素。
确定连接新旧硬件所需的物理网络和布线。
为扩展后的系统映射现有的IP地址空间和开发中的网络规划。
从现有的硬件捕捉系统配置(用户、配置文件、NIC等等),这将被用作订购新硬件时的清单。
为在特定站点和环境中用期望的配置部署硬件创建一个自定义的建设计划
3.准备增加节点
- 新节点互信配置
- root用户互信
$ su -
# source /usr/local/greenplum-db/greenplum_path.sh //记在环境变量
代码语言:javascript复制# gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x //加入互信新节点
/home/gpadmin/new_hosts_file
代码语言:javascript复制***Enter password for root@hostname: <root_password> //提示时输入root密码
- 创建gpadmin
# gpssh -f new_hosts_file '/usr/sbin/useradd gpadmin -d //创建新用户
/home/gpadmin -s /bin/bash'
代码语言:javascript复制# gpssh -f new_hosts_file 'echo gpadmin_password | passwd //设置gpadmin密码
gpadmin --stdin'
代码语言:javascript复制# gpssh -f new_hosts_file ls -l /home //验证用户创建成功
- 作为gpadmin用户建立互信
# gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x
/home/gpadmin/new_hosts_file
代码语言:javascript复制***Enter password for gpadmin@hostname: <gpadmin_password>
- 系统健康检查 确保OS层面软硬件环境无异常
$ su - gpadmin
代码语言:javascript复制$ gpcheck -f new_hosts_file
- 磁盘IO、内存、带宽、检查
$ gpcheckperf -f new_hosts_file -d /data1 -d /data2 -v
代码语言:javascript复制[root@gp-master gpadmin]# gpcheckperf -f seg_hosts -d /data -v
[Info] sh -c 'cat /proc/meminfo | grep MemTotal'
MemTotal: 1882752 kB
/usr/local/greenplum-db/./bin/gpcheckperf -f seg_hosts -d /data -v
--------------------
SETUP
--------------------
[Info] verify python interpreter exists
[Info] /usr/local/greenplum-db/./bin/gpssh -f seg_hosts 'python -c print'
[Info] making gpcheckperf directory on all hosts ...
[Info] /usr/local/greenplum-db/./bin/gpssh -f seg_hosts 'rm -rf /data/gpcheckperf_$USER ; mkdir -p /data/gpcheckperf_$USER'
[Info] copy local /usr/local/greenplum-db-5.21.1/bin/lib/multidd to remote /data/gpcheckperf_$USER/multidd
[Info] /usr/local/greenplum-db/./bin/gpscp -f seg_hosts /usr/local/greenplum-db-5.21.1/bin/lib/multidd =:/data/gpcheckperf_$USER/multidd
[Info] /usr/local/greenplum-db/./bin/gpssh -f seg_hosts 'chmod a rx /data/gpcheckperf_$USER/multidd'
--------------------
-- DISK WRITE TEST
代码语言:javascript复制====================
== RESULT //检查结果
====================
disk write avg time (sec): 35.61
disk write tot bytes: 7711752192
disk write tot bandwidth (MB/s): 206.50
disk write min bandwidth (MB/s): 103.24 [gp-node2]
disk write max bandwidth (MB/s): 103.26 [gp-node1]
disk read avg time (sec): 35.00
disk read tot bytes: 7711752192
disk read tot bandwidth (MB/s): 210.10
disk read min bandwidth (MB/s): 104.94 [gp-node1]
disk read max bandwidth (MB/s): 105.15 [gp-node2]
stream tot bandwidth (MB/s): 20801.19
stream min bandwidth (MB/s): 8355.19 [gp-node2]
stream max bandwidth (MB/s): 12446.01 [gp-node1]
Netperf bisection bandwidth test
gp-node1 -> gp-node2 = 18.870000
gp-node2 -> gp-node1 = 69.070000
Summary:
sum = 87.94 MB/sec
min = 18.87 MB/sec
max = 69.07 MB/sec
avg = 43.97 MB/sec
median = 69.07 MB/sec
4.初始化新的segment
- 创建输入文件
#su - gpadmin //登录master 切换到gpadmin
代码语言:javascript复制$ gpexpand -f /home/gpadmin/new_hosts_file
> sdw4, sdw5, sdw6, sdw7
- 扩展输入文件格式
hostname:address:port:fselocation:dbid:content:preferred_role:replication_port
例如:
代码语言:javascript复制sdw5:sdw5-1:50011:/gpdata/primary/gp9:11:9:p:53011
sdw5:sdw5-2:50012:/gpdata/primary/gp10:12:10:p:53011
sdw5:sdw5-2:60011:/gpdata/mirror/gp9:13:9:m:63011
sdw5:sdw5-1:60012:/gpdata/mirror/gp10:14:10:m:63011
- 运行gpexpand初始化新的segment
$ gpexpand -i input_file -D database1 // -i 输入文件 -D 指定哪个数据库创建扩展
扩展命令运行完毕后,系统会被重启
- 回滚一个失败的扩展
gpstart -m //进入master-only模式 重启数据库
代码语言:javascript复制gpexpand --rollback -D database_name //执行回滚操作
5.重分布表
重分布时集群必须处于生产模式中。
- 重分布表排名
rank值就能让重度使用的表优先并且最小化性能影响。可用的空闲磁盘空间可能会影响表的排名
代码语言:javascript复制=> UPDATE gpexpand.status_detail SET rank=10;
=> UPDATE gpexpand.status_detail SET rank=1 WHERE fq_name = 'public.lineitem';
=> UPDATE gpexpand.status_detail SET rank=2 WHERE fq_name = 'public.orders';
- 运行gpexpand
$ gpexpand -d 60:00:00 //定义会话失效
- 监控表的重新分布
查看扩展进度:
代码语言:javascript复制=# SELECT * FROM gpexpand.expansion_progress;
name | value
------------------------------ -----------------------
Bytes Left | 5534842880
Bytes Done | 142475264
Estimated Expansion Rate | 680.75667095996092 MB/s
Estimated Time to Completion | 00:01:01.008047
Tables Expanded | 4
Tables Left | 4
(6 rows)
查看扩展表状态:
代码语言:javascript复制=> SELECT status, expansion_started, source_bytes FROM
gpexpand.status_detail WHERE fq_name = 'public.sales';
status | expansion_started | source_bytes
----------- ---------------------------- --------------
COMPLETED | 2017-02-20 10:54:10.043869 | 4929748992
(1 row)
- 移除扩展方案
$ gpexpand -c