GaussDB(DWS) 集群扩容系列一:集群扩容与数据重分布
集群扩容
当数据库在运行性能和存储上到达瓶颈时,就需要通过增加主机来提升集群的性能及存储能力,此时,原集群需要进行扩容。
如图所示,集群扩容流程包含了四个步骤:
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表示离线模式。
在线重分布
- 在线扩容添加节点过程中会阻塞用户的DDL语句,但和离线扩容相比,阻塞时间较短,不阻塞用户数据的查询、插入、更新、删除语句,对用户业务影响小。
- 在线数据重分布过程中,对正在重分布的数据表,除少量场景有规格限制外,能保证大多数场景业务正常运行。
在线重分布期间的规格限制:
- 支持新建table、schema、tablespace、view、游标、存储等;
- 对于正在重分布的表,支持insert、select、update、delete、merge into、drop、copy、gds、truncate、truncate partition等操作;
- 对正在重分布的表,不支持绝大部分ALTER TABLE操作,包括修改表名、修改schema、新增或删除字段、删除分区、修改默认值等操作,但ALTER TABLE ... TRUNCATE PARTITION除外;
- 支持从jdbc、odbc、DS、gsql、LVS等客户端下发作业;
- 支持审计功能;
- 对于超过996列的宽表,该表重分布期间,仅支持insert和select操作,不支持delete、update操作;
- 不支持创建、删除、重命名database;
- 不支持创建、删除、重命名表空间;
- 不支持对正在重分布的表执行vacuum full和cluster命令,实际上,表完成重分布后也相当于完成了一次vacuum full操作;
- data_redis是重分布预留的schema,用户应该避免创建同名的schema, 如果存在会导致重分布失败;
- CN剔除和DN节点故障期间,集群状态为degraded,不支持在线重分布;
- 备份恢复期间,不支持与在线重分布同时使用;
- 增删cn期间,不支持与在线重分布同时使用;
用户业务对在线重分布的影响:
- 用户对重分布的表执行频繁的DDL和DML操作并且时间比较长时,会影响重分布时间,导致重分布作业处于pending中;
- 用户作业在事务中长时间对表加锁,会长时间阻塞对该表进行重分布,甚至导致该表重分布失败,并反复重试;
- 用户作业对正在重分布的表有大量的数据更新或删除时,会导致重分布多次追增时间较长,增加重分布时间;
- 用户作业如果有truncate或truncate 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表来动态调整配置参数。
- 点赞
- 收藏
- 关注作者
评论(0)