数据库集群的容量调整是运维中常见的需求。在openGauss高可用架构中,流复制技术通过实时同步数据保障业务连续性。但当业务规模变化时,如何安全移除冗余从库节点?本文将以真实环境为背景,详细拆解操作流程、提供生产级示例,并梳理避坑要点。
一、为什么要移除从库?典型的应用场景
应用场景一:资源利用率优化 某电商公司大促后,原集群配置的6个从库中,有3台资源利用率长期低于20%。通过缩容每年可节省约45%的硬件成本。
应用场景二:架构重构 某金融系统将原有"一主三从"架构改为"两地三中心"模式,需下线本地冗余节点,同步升级到新版本数据库。
场景验证方法:
-- 查询当前复制拓扑(技术栈:openGauss 3.0)
SELECT peer_role, peer_state, sync_state FROM pg_stat_get_stream_replications();
/* 输出示例:
peer_role | peer_state | sync_state
-----------+------------+------------
Primary | Normal | Quorum
Standby | Normal | Async
Standby | Normal | Async
*/
二、操作前的关键准备
- 同步状态验证
通过
gs_ctl query -D 数据目录
确认从库处于正常同步状态:
gs_ctl query -D /opt/huawei/install/data/dn1
# 预期看到"Senders info"包含待移除节点的PID
- 业务流量确认 通过性能视图排查是否存在从库承担只读查询:
SELECT client_addr, application_name
FROM pg_stat_activity
WHERE backend_type='client backend';
-- 若发现连接来自待移除节点,需先迁移查询流量
三、分步操作流程与生产级示例
3.1 停用流复制通道
# 在待移除的从库执行(技术栈:openGauss 3.1)
gs_ctl stop -D /opt/ogdata/dn1 -m fast
# -m fast:快速关闭,适用于生产环境
3.2 修改主库配置文件
# 主库修改postgresql.conf
vim /opt/ogdata/dn1/postgresql.conf
# 注释或删除以下配置项:
# synchronous_standby_names = 'standby1,standby2'
# 修改后保存并重载配置
gs_ctl reload -D /opt/ogdata/dn1
3.3 清理复制槽(关键步骤)
-- 查询复制槽
SELECT slot_name, active FROM pg_replication_slots;
-- 删除对应从库的复制槽
SELECT pg_drop_replication_slot('standby2_slot');
/* 注意:
若未清理复制槽,可能导致WAL日志堆积
检查pg_xlog目录占用情况:du -sh /opt/ogdata/dn1/pg_xlog
*/
四、实战中的技术陷阱
4.1 幽灵连接问题
某运维团队移除从库后,主库仍显示复制连接:
SELECT pid, application_name
FROM pg_stat_activity
WHERE backend_type = 'walsender';
-- 解决方法:主库执行pg_terminate_backend()终止残留进程
4.2 配置残留导致启动失败
某从库重新加入集群时报错"duplicate replication user":
# 检查postgresql.conf中是否有残留配置
grep "primary_conninfo" /opt/ogdata/dn1/postgresql.conf
# 必须完全清除旧的主库连接信息
五、技术方案优劣分析
优势比较表:
方法类型 | 操作复杂度 | 停机时间 | 风险等级 |
---|---|---|---|
直接关闭从库 | ★☆☆ | 秒级 | ★★★★ |
滚动移除 | ★★★☆ | 无 | ★★☆ |
流复制缩容的特殊优势:
- 数据零丢失:确保移除前后事务完整性
- 弹性扩展:与扩容操作形成闭环管理
- 版本兼容:支持混合版本集群缩容(需满足最小版本要求)
六、必须掌握的注意事项
- 顺序敏感操作
# 错误操作顺序示例:
停止主库->移除从库 # 会导致业务中断
# 正确顺序:
停止从库->修改主配置->清理资源
- 监控空窗期处理 建议在操作后立即检查:
SELECT * FROM pg_stat_get_stream_replications()
WHERE peer_role = 'Standby';
-- 确保目标节点已不在复制拓扑中
- 备份策略调整 移除节点后需重新计算备份窗口:
原备份策略:
全量备份(每天01:00) + 6节点并行
新策略建议:
全量备份(每天02:00) + 3节点交叉备份
七、总结与建议
通过三阶段验证法确保操作成功:
- 拓扑验证:确认目标节点已移出复制列表
- 配置验证:检查所有相关参数文件
- 业务验证:模拟故障确保高可用机制生效
建议结合OM工具完成操作:
# 使用openGauss OM工具
gs_om -t remove-node -N standby2
# 优势:自动完成配置同步和检查
评论