mongodb升级、改单节点模式
目前我有三个节点的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”,此时就完成升级为副本节点的工作。