MongoDB副本集故障转移演练记录
2026/9/24 17:35:55 网站建设 项目流程

基于rs0副本集

(一主两从:27017主,27018、27019从)

部署主机:10.10.10.128

操作系统:CentOS Linux7.9.2009

MongoDB版本:4.2.25

部署日期:2026‑09‑20

一、部署概述

基于已搭建rs0副本集,做两类故障演练:

1.主节点主动降级 rs.stepDown(),观察自动选举新主节点。

2.模拟主进程宕机,kill进程,观测故障转移、角色切换,故障节点恢复后自动加入副本集作为从节点。

副本集初始状态: localhost:27017 PRIMARY priority=5 localhost:27018 SECONDARY priority=3 localhost:27019 SECONDARY priority=1

二、演练1:

主节点主动降级 stepDown

#登录当前主节点27017

mongo --port 27017

#执行主动降级,让出主节点角色

rs.stepDown(30)

#执行之后,27017会变为SECONDARY;

副本集会根据priority优先级选举新PRIMARY。

#本环境

priority:27018(priority3) >27019(priority1),27018被选举成为新主节点。

#查看副本集状态

rs.status()

#查看当前主节点

db.hello().primary

三、写入验证,新主节点可正常写数据

#连接新主节点27018

mongo --port 27018

use appdb

db.test.insertOne({"test":"stepdown_new_master"})

#登录从节点执行

rs.slaveOk(),确认数据复制同步正常。

四、演练2:模拟主节点进程崩溃(kill模拟宕机)

#假设当前主节点为27018;kill掉mongod进程模拟硬件故障

ps -ef | grep mongod

kill -9 <27018进程PID>

#等待选举超时,副本集剩余节点(27017、27019)进行投票选举新PRIMARY

#执行rs.status(),观察27018状态为not reachable,health=0

#连接存活节点查看集群状态

mongo --port 27017

rs.status()

db.hello().primary

五、故障节点恢复

#重新启动被kill的27018实例

mongod --port 27018 -dbpath /var/lib/mongo1 -logpath /var/log/mongod/mongod1.log -replSet rs0 --fork --wiredTigerCacheSizeGB 0.25

#启动完成,节点自动加入副本集,自动同步缺失oplog日志,角色变为SECONDARY,不需要手动修改配置。 rs.status()

六、关键概念说明

1.priority数值越大,越优先选为PRIMARY;0代表永远不能成为主。

2.选举需要副本集多数节点存活;3成员副本集至少2个节点在线才可以完成选举。

3.故障节点恢复依靠oplog操作日志同步丢失数据;注意oplog空间大小,长时间宕机oplog被覆盖会需要全量重同步。

七、常见问题

现象:节点无法加入副本集同步数据

排查点:防火墙、端口连通性;时间同步;oplog大小是否不足以覆盖宕机时间。

八、常用演练命令

rs.status() #副本集完整状态

rs.stepDown(sec) #主节点主动降级

db.hello().primary #快速获取当前主节点地址

rs.printReplicationInfo() #查看oplog大小、时间窗口

九、实验结论

1.MongoDB副本集在主节点故障时,集群自动完成投票选举出新主,实现故障转移高可用。

2.故障节点恢复后自动同步oplog,自动作为从节点加入集群,无需人工干预配置。

3.副本集高可用前提保证集群存活节点达到法定多数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询