GaussDB-节点扩容
GaussDB-节点扩容
操作场景
随着业务的增长,数据库在运行性能及存储上逐渐会达到瓶颈。此时,需要通过增加节点来提升集群的性能及存储能力。GaussDB分布式实例支持节点扩容操作。
扩容方案
|
部署形态 |
底层资源类型 |
扩容方案 |
说明 |
|---|---|---|---|
|
金融版(标准型) |
BMS,ECS |
初始形态:9节点,部署架构图请参考《产品介绍》中的“部署方案”章节。 每次扩容固定新增节点个数为8的倍数,不扩容仲裁AZ内的ETCD节点。最终一致性策略下分片最大可扩容至128分片,节点最大扩容到257;强一致性策略下分片最多可到32分片,节点最大扩容到65。 |
|
|
企业版 |
BMS,ECS |
初始形态:3节点,部署架构图请参考《产品介绍》中的“部署方案”章节。 每次扩容固定新增节点个数为3的倍数。最终一致性策略下分片最多可扩容到126分片,节点最大扩容到126;强一致性策略下分片最多可到30分片,节点最大扩容到30。 |
|
|
金融版(数据计算型) |
BMS |
初始形态:5节点,部署架构图请参考《产品介绍》中的“部署方案”章节。 每次扩容固定新增节点个数为4的倍数,不扩容仲裁AZ内的ETCD节点。最终一致性策略下分片最多可到128分片,节点最大扩容到129;强一致性策略下分片最多可到32分片,节点最大扩容到33。 |
以金融版(数据计算型)为例:
扩容前实例形态:

扩容后实例形态:

数据重分布示意如下:

注意事项
- 金融版(标准型):每次支持扩容的节点个数为8的整数倍,最终一致性策略下分片最大可扩容至128分片,节点最大扩容到257;强一致性策略下分片最多可到32分片,节点最大扩容到65。
- 企业版:每次支持扩容节点的个数为3的整数倍,最终一致性策略下分片最多可到126分片,节点最大扩容到126;强一致性策略下分片最多可到30分片,节点最大扩容到30。
- 金融版(标准型)的容灾形态:每次支持扩容节点的个数为4的整数倍,最终一致性策略下分片最多可到128分片,节点最大扩容到128;强一致性策略下分片最多可到32分片,节点最大扩容到32。
- 金融版(数据计算型):每次支持扩容节点的个数为4的整数倍,最终一致性策略下分片最多可到128分片,节点最大扩容到129;强一致性策略下分片最多可到32分片,节点最大扩容到33。
- 金融版(数据计算型)的容灾形态:每次支持扩容节点的个数为4的整数倍,最终一致性策略下分片最多可到128分片,节点最大扩容到64;强一致性策略下分片最多可到32分片,节点最大扩容到16。
一致性类型可以在实例基本信息页的“数据库信息”处查看。
- 扩容是指分片扩容,扩容的节点仅包含CN、DN,不含有其他组件。
- 扩容以节点组为单位,扩容节点的组件分布形态与扩容前实例分布规律相同。
- 主备版部署模式暂时不支持扩容。
- 存在故障节点的实例不允许扩容。
- 实例扩容过程中会有锁表操作,可能会阻塞业务,属于高危操作。请选择在业务低峰期进行该操作。
- 实例扩容分两个阶段:增加节点阶段和数据重分布阶段。
- 增加节点阶段会有锁实例的时间窗,该时间窗(分钟级)内阻塞DDL和DCL操作,但在整个加节点阶段,用户的DML操作可以正常进行。
- 重分布过程会占用部分IO,且不支持下列SQL语句:create database/alter database/alter database set/create tablespace/drop tablespace/alter tablespace
- 扩容新增CN与DN分片数量与当前集群CN的max_wal_senders参数值有关,建议(新增CN+DN分片数)/(已有CN数量)向上取整后的数值小于或等于max_wal_senders参数值的一半,若大于该取值可能会造成扩容失败。参数查看或修改请参考修改公共参数。
- 扩容前各个DN节点均需满足如下磁盘空间约束:
- DN节点剩余可用空间需大于DN节点的最大单表空间。
- DN节点的剩余空间 = 磁盘总大小 * 只读阈值 - 磁盘已使用大小,DN节点的最大单表空间(单位:字节)可通过遍历每个库执行如下语句查询并取最大值。具体判断方法请参考《云数据库 GaussDB 24.1.30 维护指南(for 华为云Stack 8.3.1)》中的“运维指南 > 其他运维操作 > 查询DN剩余空间和最大表空间”。
select pg_total_relation_size(oid) as size from pg_class where relkind ='r' order by size DESC limit 1;
- ECS资源类型的实例预检查功能依赖8.2.0以上的底座。
扩容参数确认
- redis_parallel_jobs:表示数据重分布过程的并发执行任务个数,允许设置1~8,默认值为1表示非并发执行方式,推荐并发任务数为4。参考redis_resource_level资源百分比合理设置并发度。
- redis_resource_level:表示数据重分布过程允许使用的IO资源百分比。
- l:允许占用10%资源。
- m:允许占用30%资源。
- h:允许占用50%资源。
- f:允许占用100%资源。
如果redis_parallel_jobs的值设置过大,可用系统资源不足以满足并发任务个数,则redis_parallel_jobs的值将不会生效。
重分布参数redis_resource_level和redis_parallel_jobs可在扩容过程前或扩容过程中动态调整,扩容结束后恢复为默认值。
参数详细内容请参考《云数据库 GaussDB 24.1.30 维护指南(for 华为云Stack 8.3.1)》中的“云数据库 GaussDB 8.102.0 分布式工具参考(for 华为云Stack 8.3.1) > 系统内部调用的工具 > gs_expand”。
参数修改请参考修改扩容重分布参数。
- redis_join_tables:多表扩容模式,具有join关系的用户表建议分为一组进行扩容,否则可能出现扩容后SQL性能下降的情况。使用多表扩容模式注意事项如下:
- 需要为属于一个group的表预留足够的磁盘空间,即group中所有表(表+索引)总和的1倍;考虑到资源有限,逐个group进行重分布,因此需要预留最大group大小1倍即可。
- 多表扩容需要配合写报错模式和业务快速失败模式进行,需要用户业务配置有连接级重试机制,否则不允许使用多表扩容。写报错模式和业务快速失败模式默认为true,分别对应扩容参数列表中的write_error_mode和enable_cancel。
写报错模式开启后扩容期间用户写业务会有ERROR级报错,而不是在锁队列等待。持续时长与扩容参数last_catchup_threshold参数有关,默认值5秒。
切换元数据影响时长增加:期间阻塞相关表所有业务,耗时与group中表数量有关,通常采用cancel模式拿锁加切换元数据,单表2秒,最长10秒(最多5张表);最坏场景:(lockwait_timeout + 2)*group中表数量,lockwait_timeout默认4s。
- 连接数据库,执行以下语句查询是否涉及join语句。
select n_calls,query from dbe_perf.statement where query ilike '%join%' and user_name!='rdsAdmin' and query not like '% pg_catalog.%' order by n_calls desc;
扩容前检查项
- 进入扩容页面会自动检查以下内容:
- 实例中各节点状态均正常。
- 扩容要求整个实例没有被锁定。
- 新增主机和现有实例之间网络连接正常。
- 扩容前需保证实例所有CN可连接。
- ECS形态可以在扩容页面进行资源预检查。
NOTICE:
预检查仅可以检查CPU和内存。
- 以下检查项需要手动进行:
- 扩容前检查数据表读写正常。
- 扩容前评估数据量预估扩容重分布耗时,基线如下:
前提条件:实例数据节点读带宽500MB/s、写带宽800MB/s,万兆网络,业务负载低峰且不做资源管控(即redis_resource_level参数设置为“f”,参数查看方法参考修改实例参数)
基线:单DN并且1TB数据下,分片数量翻倍扩容的情况下,3小时完成。根据此原则评估自己的扩容场景的耗时。
- 扩容前需要联系运维在运维面进行巡检。具体操作请参考《云数据库 GaussDB 24.1.30 维护指南(for 华为云Stack 8.3.1)》中的“运维指南 > 巡检指南”。
- 扩容前需手动检查底层资源是否满足需求。
操作步骤
- 登录管理控制台。
- 在“实例管理”页面,选择指定的实例,单击实例的名称,进入
- 在
- 选择节点数量,确认“实例扩容过程中会有锁表操作,可能会阻塞业务,属于高危操作。请选择在业务低峰期进行该操作。”风险提示信息,并勾选“我已确认阅读上述风险提示”。
- 可以在单击“下一步”之前,单击“预检查”按钮,进行资源预检查。检查资源包括CPU资源、内存资源。BMS实例暂不支持预检查功能,不显示“预检查”按钮。
NOTICE:
预检查仅可以检查CPU和内存。
- 单击“下一步”,进入“规格确认”界面。
- 确认无误后,单击“提交”,进行扩容。
数据库实例状态将显示为“添加节点中”,则说明扩容指令下发成功。
可以在实例详情页面,通过查看“节点数量”确定是否扩容成功。

浙公网安备 33010602011771号