目前我有三个节点的mongodb,A:主节点,B:此节点,C:投票节点,目前版本号为5.0.16,后续需要把C节点改为单节点mongodb,保留原来集群的数据,并升级到5.0.31版本。
升级版本
这部分较为顺利,直接通过这篇文章就升级完成了
投票节点改为副本节点
由于之前C节点设置了arbiterOnly参数,使得该节点仅能投票,而没有保存数据,所以需要先将该节点升级为副本节点
在主节点执行:
rs0:PRIMARY> rs.remove("10.6.212.87:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1746699523, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1746699523, 1)
}
rs0:PRIMARY> rs.add({
... host: "10.6.212.87:27017",
... priority: 0, // 表示不会成为 primary
... votes: 1 // 正常参与投票
... })
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1746699594, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1746699594, 1)
}
rs0:PRIMARY> rs.status()
......
{
"_id" : 2,
"name" : "10.6.212.87:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 3,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
"lastAppliedWallTime" : ISODate("1970-01-01T00:00:00Z"),
"lastDurableWallTime" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2025-05-08T10:20:00.987Z"),
"lastHeartbeatRecv" : ISODate("2025-05-08T10:20:00.043Z"),
"pingMs" : NumberLong(17),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "10.11.206.4:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 4,
"configTerm" : 201
}
......
显示该节点"stateStr" : “STARTUP2”,表示该节点正在同步数据,过一会就会变为"stateStr" : “SECONDARY”,此时就完成升级为副本节点的工作。