GaussDB(DWS) 集群扩容系列一:集群扩容与数据重分布

举报
红山华夏 发表于 2020/12/24 18:11:03 2020/12/24
【摘要】 扩容:添加主机与数据重分布。

集群扩容

当数据库在运行性能和存储上到达瓶颈时,就需要通过增加主机来提升集群的性能及存储能力,此时,原集群需要进行扩容。

如图所示,集群扩容流程包含了四个步骤:

1. 节点预处理:确保扩容的节点符合当前环境部署要求。

2. 添加主机:将主机和实例添加到指定物理集群。

3. 数据重分布:将物理集群原有数据重分布到新扩容节点中。

4. 扩容验证:扩容结束后,验证新加主机及新增服务是否正常。

其中,添加主机与数据重分布为两个核心步骤,也是耗时最长的步骤,接下来,主要介绍添加主机和重分布的步骤。

添加主机

添加主机的核心点就是让新增节点上的GaussDB实例和老集群上的实例具有相同的元数据信息,此部分内容涵盖技术点较多,将在以后章节中单独介绍。下面介绍一下添加主机过程中的gs_expand运维工具的使用方法:

修改集群部署配置文件(cluster.xml)

在集群部署配置文件中添加新增主机的信息:

 

注意事项:

 a) 原有的主备关系不能破坏; 

b) 新增节点上不能包含主备GTM和主备CM Server; 

c) 新增点上的DN自行成环;

执行前置脚本

执行前置脚本gs_preinstall, 在任意一台旧集群机器的安装目录下,以root用户执行:

gs_preinstall -U perfadm -G users -X  /opt/cluster.xml  --alarm-type=1  --sep-env-file=/opt/temp/env

其中: -U:表示用户名; 

           -G:表示用户群组; 

           -X:表示配置文件的地址; 

           --alarm-type:表示告警类型: 

               a) 1表示使用FusionInsight的告警管理工具管理告警; 

               b) 2表示告警将写入syslog日志,不发送恢复告警; 

               c) 3表示预留给OLTP的接口。 

执行添加主机

在集群用户perfadm下执行:

gs_expand -t dilatation -X /opt/cluster.xml --dilatation-mode=insert

其中:-t dilatation:表示添加主机;

          -X:表示配置文件的地址;

          --dilatation-mode=insert:insert表示在线模式,read-only表示离线模式。

至此,添加主机的步骤已经完成。

数据重分布

通常情况下,集群老节点上的数据量基本趋于饱和,只有将数据平均的搬迁到新节点上,才能降低老节点的负载,这就是数据重分布需要达到的目标。

在集群用户perfadm下执行:

gs_expand -t redistribute --fast-redis --parallel-jobs=4 --redis-mode=insert

其中:-t redistribute :表示数据重分布;

          --fast-redis:表示快速重分布模式;

          --parallel-jobs=4:表示数据重分布的并发度为4;

          --redis-mode=insert:insert表示在线模式,read-only表示离线模式。

在线重分布

  1. 在线扩容添加节点过程中会阻塞用户的DDL语句,但和离线扩容相比,阻塞时间较短,不阻塞用户数据的查询、插入、更新、删除语句,对用户业务影响小。
  2. 在线数据重分布过程中,对正在重分布的数据表,除少量场景有规格限制外,能保证大多数场景业务正常运行。

在线重分布期间的规格限制:

  • 支持新建tableschematablespaceview、游标、存储等;
  • 对于正在重分布的表,支持insertselectupdatedeletemerge intodropcopygdstruncatetruncate partition等操作;
  • 对正在重分布的表,不支持绝大部分ALTER TABLE操作,包括修改表名、修改schema、新增或删除字段、删除分区、修改默认值等操作,但ALTER TABLE ... TRUNCATE PARTITION除外;
  • 支持从jdbcodbcDSgsqlLVS等客户端下发作业;
  • 支持审计功能;
  • 对于超过996列的宽表,该表重分布期间,仅支持insertselect操作,不支持deleteupdate操作;
  • 不支持创建、删除、重命名database
  • 不支持创建、删除、重命名表空间;
  • 不支持对正在重分布的表执行vacuum fullcluster命令,实际上,表完成重分布后也相当于完成了一次vacuum full操作;
  • data_redis是重分布预留的schema,用户应该避免创建同名的schema, 如果存在会导致重分布失败;
  • CN剔除和DN节点故障期间,集群状态为degraded,不支持在线重分布;
  • 备份恢复期间,不支持与在线重分布同时使用;
  • 增删cn期间,不支持与在线重分布同时使用;

用户业务对在线重分布的影响:

  1. 用户对重分布的表执行频繁的DDLDML操作并且时间比较长时,会影响重分布时间,导致重分布作业处于pending中;
  2. 用户作业在事务中长时间对表加锁,会长时间阻塞对该表进行重分布,甚至导致该表重分布失败,并反复重试;
  3. 用户作业对正在重分布的表有大量的数据更新或删除时,会导致重分布多次追增时间较长,增加重分布时间;
  4. 用户作业如果有truncatetruncate partition操作,会中断重分布作业,重分布作业需要重入;

离线重分布

离线扩容采用read-only方式执行扩容重分布,在扩容加节点过程中,不建议执行用户业务,如果执行业务,会导致DDL相关语句报错。对于有大的数据库集群,扩容加节点执行时间很长,会导致用户业务被长时间阻塞。在扩容重分布阶段,仅允许用户执行查询操作,由于离线重分布会对重分布表加共享锁,用户插入、更新、删除数据都会被阻塞。由于大表的重分布时间很长,有可能几十分钟或一两个小时,被阻塞的用户作业会等锁超时而中断执行。

重分布进度查询

重分布过程中会创建以下几张表或视图,包括redis_progress视图、redis_progress_detail表、pgxc_redistb表、redis_status表和redis_config表。

它们各自的作用如下,管理员通过对应的视图或表可以查看重分布的进度。

  • 管理员可以通过redis_progress视图查看重分布总体进度。
  • redis_progress_detail表记录了数据库中每张表重分布所耗时间。
  • pgxc_redistb表会在每个数据库中创建,记录了对应数据库中需要重分布的表。
  • redis_status表记录了重分布目前所处状态。
  • redis_config表记录了重分布的参数,可以直接通过修改数据库中的redis_config表来动态调整配置参数。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。