如何强制mongodb成为副本集中的主要?

时间:2014-08-30 17:51:04

标签: mongodb

1)我有3个mongodbs在副本集中运行

mongod --fork --logpath a.log --smallfiles --oplogSize 50 --port 27001 --dbpath data/z1 --replSet z
mongod --fork --logpath b.log --smallfiles --oplogSize 50 --port 27002 --dbpath data/z2 --replSet z
mongod --fork --logpath c.log --smallfiles --oplogSize 50 --port 27003 --dbpath data/z3 --replSet z

2)现在27001和27002已经失效。

如果不重新启动27001和27002,我需要做些什么来制作27003主要版本?

2 个答案:

答案 0 :(得分:2)

以下是如何做到这一点。

非常简单的方法

删除dbpath的内容后重新启动其他两个实例。

简单但不安全的方式

假设你无法让其他节点恢复在线状态(这让我想起了M102的一些功课)

replset:SECONDARY> oldConf = rs.conf()
[...]
replset:SECONDARY> conf = {
... 
... _id:oldConf._id,
... version: oldConf.version + 1,
... members: [ oldConf.members[2] ]}
[...]
replset:SECONDARY> rs.reconfig(conf,{force:true})

注意:您不需要在oldConf.members[2]放置2,而是需要在oldConfig.members中的端口27013上运行实例的位置,从0开始。发送rs.reconfig之后命令,最后一个节点可能需要几秒钟才能成为主节点。

明智的方式

使用相应的--replSet参数获取另外两个节点,并使用上述过程通过将它们添加到conf的成员数组中来添加它们。

答案 1 :(得分:1)

您必须重新配置副本集:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

即你必须实际访问该成员并运行rs.reconfig以从集合中删除这两个死亡成员,因为你有大多数成员离线。

相关问题