前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >snova运维篇(四):GP集群扩容

snova运维篇(四):GP集群扩容

原创
作者头像
snova-最佳实践
发布2019-12-26 16:07:59
1.6K0
发布2019-12-26 16:07:59
举报
文章被收录于专栏:Snova最佳实践系列

本节主要从集群扩容的角度,进一步了解gp集群的日常运维工作。

目录:

  1. 集群扩容的一般性原则
  2. 扩容规划
  3. 准备增加新节点
  4. 初始化新的segment
  5. 重分布表

基本概念:


1.集群扩容的一般性原则

  • 弹性伸缩容量和性能
  • 扩容期间服务不中断
  • 扩容前后事务的一致性
  • 容错机制不受干扰
  • 数据复制和灾备恢复不受影响
  • 扩容机制透明,方便管理员排查问题和进度
  • 流程可配置化

2.扩容规划

  • 系统扩容检查列表

扩容前的准备工作,制定扩容方案,验证新旧环境,验证内存磁盘带宽目录和文件可用性。

扩容开始后,降低大规模操作的进程,重新分布表,移除扩展方案,运行健康检查,查看统计信息。

  • 规划新的硬件平台

主要考虑软硬件的兼容性和版本一致性。

一般性的考虑如下:

为新硬件准备物理空间,考虑冷却、电力供应和其他物理因素。

确定连接新旧硬件所需的物理网络和布线。

为扩展后的系统映射现有的IP地址空间和开发中的网络规划。

从现有的硬件捕捉系统配置(用户、配置文件、NIC等等),这将被用作订购新硬件时的清单。

为在特定站点和环境中用期望的配置部署硬件创建一个自定义的建设计划

3.准备增加节点

  • 新节点互信配置
  • root用户互信
代码语言:javascript
复制
$ 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
代码语言:javascript
复制
# 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用户建立互信
代码语言:javascript
复制
# gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x 
/home/gpadmin/new_hosts_file
代码语言:javascript
复制
***Enter password for gpadmin@hostname: <gpadmin_password>
  • 系统健康检查 确保OS层面软硬件环境无异常
代码语言:javascript
复制
$ su - gpadmin
代码语言:javascript
复制
$ gpcheck -f new_hosts_file
  • 磁盘IO、内存、带宽、检查
代码语言:javascript
复制
$ 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

  • 创建输入文件
代码语言:javascript
复制
#su - gpadmin  //登录master 切换到gpadmin
代码语言:javascript
复制
$ gpexpand -f /home/gpadmin/new_hosts_file
> sdw4, sdw5, sdw6, sdw7
  • 扩展输入文件格式
代码语言:javascript
复制
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
代码语言:javascript
复制
$ gpexpand -i input_file -D database1  // -i 输入文件 -D 指定哪个数据库创建扩展

扩展命令运行完毕后,系统会被重启

  • 回滚一个失败的扩展
代码语言:javascript
复制
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
代码语言:javascript
复制
$ 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)
  • 移除扩展方案
代码语言:javascript
复制
$ gpexpand -c 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.集群扩容的一般性原则
  • 2.扩容规划
  • 3.准备增加节点
  • 4.初始化新的segment
  • 5.重分布表
相关产品与服务
弹性伸缩
弹性伸缩(Auto Scaling,AS)为您提供高效管理计算资源的策略。您可设定时间周期性地执行管理策略或创建实时监控策略,来管理 CVM 实例数量,并完成对实例的环境部署,保证业务平稳顺利运行。在需求高峰时,弹性伸缩自动增加 CVM 实例数量,以保证性能不受影响;当需求较低时,则会减少 CVM 实例数量以降低成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档