You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB副本集升级至4.4.5版本后多主节点异常问题问询

MongoDB副本集多主节点异常问题处理

问题现象

MongoDB副本集偶尔出现多个主节点异常,本次场景中mongo-b为真实可用主节点,mongo-c无响应但虚假持有主节点角色。
副本集总共有4个节点:3个普通节点+1个无投票权延迟节点。经排查不存在网络分区或连通性问题,该问题在集群从4.2.5版本升级到4.4.5版本后多次出现,当前临时修复方式为清理虚假主节点数据目录后重启节点。

副本集配置

{
        "_id" : 0,                                                                                                          
        "host" : "mongo-a:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "slaveDelay" : NumberLong(0),
        "votes" : 1
},
{
        "_id" : 3,
        "host" : "mongo-h:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : true,
        "priority" : 0,
        "tags" : {

        },
        "slaveDelay" : NumberLong(900),
        "votes" : 0
},
{
        "_id" : 5,
        "host" : "mongo-c:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "slaveDelay" : NumberLong(0),
        "votes" : 1
},
{
        "_id" : 6,
        "host" : "mongo-b:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "slaveDelay" : NumberLong(0),
        "votes" : 1
}

rs.status()部分返回结果

{
        "_id" : 5,                                       
        "name" : "mongo-c:27017",                     
        "health" : 1,
        "state" : 1,
        "stateStr" : "PRIMARY",
        "uptime" : 3435,
        "optime" : {
                "ts" : Timestamp(1637525581, 2),
                "t" : NumberLong(87)
        },
        "optimeDurable" : {
                "ts" : Timestamp(1637525443, 1),
                "t" : NumberLong(87)
        },
        "optimeDate" : ISODate("2021-11-21T20:13:01Z"),
        "optimeDurableDate" : ISODate("2021-11-21T20:10:43Z"),
        "lastHeartbeat" : ISODate("2021-11-24T07:08:32.108Z"),
        "lastHeartbeatRecv" : ISODate("2021-11-24T07:08:34.867Z"),
        "pingMs" : NumberLong(2355),
        "lastHeartbeatMessage" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "infoMessage" : "",
        "electionTime" : Timestamp(1637524307, 1),
        "electionDate" : ISODate("2021-11-21T19:51:47Z"),
        "configVersion" : 23,
        "configTerm" : 87
},
{
        "_id" : 6,
        "name" : "mongo-b:27017",
        "health" : 1,
        "state" : 1,
        "stateStr" : "PRIMARY",
        "uptime" : 7995003,
        "optime" : {
                "ts" : Timestamp(1637737714, 24),
                "t" : NumberLong(88)
        },
        "optimeDate" : ISODate("2021-11-24T07:08:34Z"),
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "infoMessage" : "",
        "electionTime" : Timestamp(1637525581, 1),
        "electionDate" : ISODate("2021-11-21T20:13:01Z"),
        "configVersion" : 23,
        "configTerm" : 88,
        "self" : true,
        "lastHeartbeatMessage" : ""
}

原因分析

从返回的状态信息可以看出,虚假主节点mongo-c的configTerm为87,真实主节点mongo-b的configTerm为88,同时mongo-c的心跳延迟高达2355ms,说明该节点存在严重的性能阻塞,无法及时接收处理更高任期主节点的心跳报文,所以迟迟没有自动降级为从节点。该问题是MongoDB 4.4.0~4.4.8版本的已知缺陷,当节点出现IO阻塞、高CPU占用导致心跳处理延迟超过选举超时阈值时,就会出现无法识别更高任期主节点的情况。

解决方案

  • 临时修复:无需清理数据目录,直接登录虚假主节点执行rs.stepDown(120)强制降级即可,降级后节点会自动从真实主节点同步数据。
  • 永久修复:将MongoDB集群升级到4.4.9及以上稳定版本,该版本已修复对应选举逻辑缺陷。
  • 优化建议:可将副本集electionTimeoutMillis配置从默认的10000ms适当上调到15000ms,避免偶发延迟触发不必要的选举;同时完善节点CPU、内存、IO资源监控,及时处理节点性能阻塞问题。

内容的提问来源于stack exchange,提问作者sadegh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:09