专栏首页Snova最佳实践系列snova运维篇(四):GP集群扩容
原创

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

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

目录:

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

基本概念:


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

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

2.扩容规划

  • 系统扩容检查列表

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

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

  • 规划新的硬件平台

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

一般性的考虑如下:

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

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

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

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

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

3.准备增加节点

  • 新节点互信配置
  • root用户互信
$ su - 
# source /usr/local/greenplum-db/greenplum_path.sh //记在环境变量
# gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x  //加入互信新节点
/home/gpadmin/new_hosts_file
***Enter password for root@hostname: <root_password>  //提示时输入root密码
  • 创建gpadmin
# gpssh -f new_hosts_file '/usr/sbin/useradd gpadmin -d   //创建新用户
/home/gpadmin -s /bin/bash'
# gpssh -f new_hosts_file 'echo gpadmin_password | passwd  //设置gpadmin密码
gpadmin --stdin'
# gpssh -f new_hosts_file ls -l /home  //验证用户创建成功
  • 作为gpadmin用户建立互信
# gpssh-exkeys -e /home/gpadmin/existing_hosts_file -x 
/home/gpadmin/new_hosts_file
***Enter password for gpadmin@hostname: <gpadmin_password>
  • 系统健康检查 确保OS层面软硬件环境无异常
$ su - gpadmin
$ gpcheck -f new_hosts_file
  • 磁盘IO、内存、带宽、检查
$ gpcheckperf -f new_hosts_file -d /data1 -d /data2 -v 
[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
====================
==  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
$ gpexpand -f /home/gpadmin/new_hosts_file
> sdw4, sdw5, sdw6, sdw7
  • 扩展输入文件格式
hostname:address:port:fselocation:dbid:content:preferred_role:replication_port

例如:

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模式 重启数据库
gpexpand --rollback -D database_name  //执行回滚操作

5.重分布表

重分布时集群必须处于生产模式中。

  • 重分布表排名

rank值就能让重度使用的表优先并且最小化性能影响。可用的空闲磁盘空间可能会影响表的排名

=> 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  //定义会话失效
  • 监控表的重新分布

查看扩展进度:

=# 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)

查看扩展表状态:

=> 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 

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

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

相关文章

  • Snova基础篇(一):生产环境搭建及运行测试数据

    地址: https://buy.cloud.tencent.com/snova#/?region=ap-guangzhou

    snova-最佳实践
  • Snova运维篇(二):GP集群配置和高可用特性

    Greenplum数据的配置文件postgresql.conf位于数据库实例的数据目录之下。

    snova-最佳实践
  • Snova运维篇(三):GP数据库备份和恢复

    本节主要从gp数据备份和恢复角度深入学习gp数据库。定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建Greenplum数据库系统。用户还可以使用...

    snova-最佳实践
  • MySQL、SqlServer、Oracle三种数据库区别在哪里?

    MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用...

    java思维导图
  • MySQL、SqlServer、Oracle三种数据库区别在哪里?

    MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用...

    Rookie
  • salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow。 当你分配许多任务,定期发送电子邮件,记录修改时,可...

    用户1169343
  • Ares:基于Python的B/S远控

    七夜安全博客
  • CRM, C4C和Hybris的工作流简介

    Step by Step to debug IC inbox workflow WS14000164

    Jerry Wang
  • 99%的程序员认不全的软件开发定律

    与其他领域一样,软件开发领域也有一些非常有趣的定律。程序员、技术经理和架构师们经常在会议和聊天中提到它们。作为小白,我们常常只有点头附和的份,因为我们不希望让对...

    纯洁的微笑
  • CRM, C4C和Hybris的工作流简介

    Step by Step to debug IC inbox workflow WS14000164

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券