如何安全地移除一个节点(缩容)?这个过程与替换一个故障节点有何异同?
安全地移除节点(缩容) 与替换故障节点是GBase 8a集群运维中的两项核心操作。它们既有相似的“数据安全为先”的核心逻辑,又在目标、流程和细节上存在关键差异。
一、安全移除节点(缩容)的标准流程
移除节点的目标是永久减少集群规模,释放资源。其核心原则是:“数据先行,人走茶凉”——必须先将该节点上的所有数据完整迁移到其他节点后,才能移除该节点。
详细步骤与命令:
创建新的分布表(Distribution):
修改
gcChangeInfo.xml文件,只包含要保留的节点。- 执行命令创建新的Distribution(假设ID为2):
gcadmin distribution gcChangeInfo.xml p 2 d 1 pattern 1- 在
gccli中初始化新分布表:initnodedatamap
- 执行REBALANCE数据搬移:
- 这是最关键的一步,将数据从旧的分布表(关联着待移除节点)迁移到新的分布表。
在
gccli中执行:rebalance instance;- 必须监控进度直至100%完成:
SELECT * FROM gclusterdb.rebalancing_status;
- 清理旧的分布表和Hashmap:
- 删除旧Distribution(假设ID为1)的Hashmap:
refreshnodedatamap drop 1; 删除旧Distribution:
gcadmin rmdistribution 1
- 删除旧Distribution(假设ID为1)的Hashmap:
从集群中移除节点:
再次修改
gcChangeInfo.xml,只填写要移除的节点IP。- 执行移除命令,将其移出VC变为Free Node:
gcadmin rmnodes gcChangeInfo.xml vc1- (可选)如需彻底卸载软件,需关停服务后运行
./unInstall.py --silent=demo.options。
二、替换故障节点的标准流程
替换节点的目标是维持原有集群规模,用新硬件替代故障硬件。其核心原则是:“无缝切换,身份继承”——在保证服务不中断的前提下,让新节点继承旧节点的角色和数据。
根据新节点来源,有两种替换模式:
- 模式A:使用Freenode替换(新旧IP不同)
模式B:使用全新节点替换(新旧IP必须相同)
关键步骤详解:
- 隔离故障节点:
gcadmin setnodestate <故障节点IP> unavailablegcadmin rmfeventlog <故障节点IP>(清理事件日志)
- 创建过渡Distribution并迁出数据(与缩容步骤1-3类似):
- 创建不包含故障节点的Distribution,执行
rebalance将数据迁到其他节点。目的是确保在替换过程中,即使该节点完全离线,数据仍有完整副本。
- 创建不包含故障节点的Distribution,执行
执行替换命令:
- 这是替换操作独有的步骤。
./replace.py --host=故障节点IP --freenode=新节点IP --type=data --vcname=vc1 --dbaUser=gbase --overwrite- 命令成功后,新节点会加入集群并自动生成一个全新的Distribution。
- 二次REBALANCE与清理:
- 再次执行
rebalance instance;,将数据迁回到新节点。 - 删除过渡用的旧Distribution。
- 再次执行
- 移除旧节点:
- 此时旧节点已无数据,可安全移除:
gcadmin rmnodes …
- 此时旧节点已无数据,可安全移除:
三、移除节点(缩容)与替换节点的异同对比
| 对比维度 | 移除节点(缩容)
| 替换故障节点
|
|---|---|---|
| 根本目标 | 减少节点数量,释放资源。 | 维持节点数量,更换硬件,保持服务能力。 |
| 数据最终去向 | 单向迁出,分散到其他保留节点。 | 双向迁移:先从故障节点迁出,换新后再迁回新节点。 |
| 新节点要求 | 不需要新节点。 | 必须准备新节点(Freenode或全新安装)。 |
| 核心命令 | gcadmin distribution, rebalance, gcadmin rmnodes | gcadmin setnodestate, replace.py, rebalance |
| Distribution变化 | 创建一个新Distribution(不含移除节点)。 | 通常创建两个新Distribution: 1. 过渡Distribution(不含故障节点) 2. 最终Distribution(含新节点) |
| REBALANCE次数 | 1次(将数据迁出)。 | 至少2次(先迁出,替换后再迁回)。 |
| 节点状态管理 | 通常直接操作。 | 必须先将故障节点设为UNAVAILABLE。 |
| 操作风险 | 主要风险是数据迁移期间的性能压力和迁移失败。 | 风险更高,涉及新旧节点交接、状态转换、可能的数据不一致。 |
| 适用场景 | 业务负载降低、硬件回收、成本优化。 | 硬件故障、性能升级、硬件维护。 |
四、总结与关键注意事项
共同核心:两者都必须通过 REBALANCE 来安全地移动数据,这是保证数据完整性的基石。
关键区别:替换操作的核心是 replace.py 命令和节点状态管理,而移除操作的核心是 gcadmin rmnodes 命令。
安全操作黄金法则:
- 永远先备份:在执行任何节点变更前,确认有可用的数据备份。
- 监控是生命线:全程监控
rebalancing_status和集群状态。 - 顺序不能乱:特别是替换操作,必须严格遵循“隔离 -> 迁出 -> 替换 -> 迁回 -> 清理”的顺序。
- 选择业务低峰期:两种操作都会引起大量数据IO和网络传输,影响集群性能。
替换时注意IP:使用Freenode替换时IP会变,需确保应用连接配置或DNS能适应;使用全新节点替换时,必须保证IP一致。
通过理解这些异同,DBA可以根据实际目标(是“减肥”还是“换零件”)选择正确的流程,安全、高效地完成集群节点变更。
热门帖子
- 12025-12-01浏览数:182104
- 22023-05-09浏览数:24358
- 42023-09-25浏览数:17562
- 52020-05-11浏览数:16605