mongodb副本集无法访问

时间:2013-08-02 20:56:22

标签: mongodb

我正在尝试使用3个实例配置独立的mongodb副本集。我似乎已经进入了一个时髦的状态。我的两个实例失败了,我留下了所有辅助节点。我试着遵循这个:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

我收到了这个错误:

 rs0:SECONDARY> rs.reconfig(cfg, {force : true})
 {
    "errmsg" : "exception: need most members up to reconfigure, not ok : obfuscated_hostname:27019",
    "code" : 13144,
    "ok" : 0
 }

当我查看日志时,我看到了这一点:

 Fri Aug  2 20:45:11.895 [initandlisten] options: { config: "/etc/mongodb1.conf",
 dbpath: "/var/lib/mongodb1", logappend: "true", logpath: "/var/log/mongodb/mongodb1.log",
 port: 27018, replSet: "rs0" }
 Fri Aug  2 20:45:11.897 [initandlisten] journal dir=/var/lib/mongodb1/journal
 Fri Aug  2 20:45:11.897 [initandlisten] recover begin
 Fri Aug  2 20:45:11.897 [initandlisten] recover lsn: 0
 Fri Aug  2 20:45:11.897 [initandlisten] recover /var/lib/mongodb1/journal/j._0
 Fri Aug  2 20:45:11.899 [initandlisten] recover cleaning up
 Fri Aug  2 20:45:11.899 [initandlisten] removeJournalFiles
 Fri Aug  2 20:45:11.899 [initandlisten] recover done
 Fri Aug  2 20:45:11.923 [initandlisten] waiting for connections on port 27018
 Fri Aug  2 20:45:11.925 [websvr] admin web console waiting for connections on port     28018
 Fri Aug  2 20:45:11.927 [rsStart] replSet I am hostname_obfuscated:27018
 Fri Aug  2 20:45:11.927 [rsStart] replSet STARTUP2
 Fri Aug  2 20:45:11.929 [rsHealthPoll] replset info hostname_obf:27017 thinks that we  are down
 Fri Aug  2 20:45:11.929 [rsHealthPoll] replSet member hostname_obf:27017 is up
 Fri Aug  2 20:45:11.929 [rsHealthPoll] replSet member hostname_obf:27017 is now in state SECONDARY
 Fri Aug  2 20:45:12.587 [initandlisten] connection accepted from ip_obf:52446 #1 (1 connection now open)
 Fri Aug  2 20:45:12.587 [initandlisten] connection accepted from ip_obf:52447 #2 (2 connections now open)
 Fri Aug  2 20:45:12.588 [conn1] end connection ip_obf:52446 (1 connection now open)
 Fri Aug  2 20:45:12.928 [rsSync] replSet SECONDARY

我无法连接到mongo实例,即使日志说它已启动并正在运行。关于该怎么做的任何想法?

2 个答案:

答案 0 :(得分:3)

您没有提到您正在使用的mongodb版本,但我认为它是2.0之后的版本。

我认为强制重新配置的问题在于,在重新配置之后,您仍然需要为正常运行的副本集设置最小数量的节点,即3.但由于您最初有3个成员且丢失了2个,因此没有你可以把那个幸存的节点变成一个正常运作的副本集。

恢复的唯一选择是将幸存节点作为独立服务器启动,备份数据库,然后使用该数据创建新的3节点副本集。

答案 1 :(得分:0)

是的,如果辅助服务器运行正常,您可以将单个辅助副本调到主副本。请按照以下简单步骤操作:

第1步:连接到成员并检查当前配置

  

rs.conf()

第2步:将当前配置保存到另一个变量。

  

x = rs.conf()

第3步:选择要作为主要成员的成员的ID,主机和端口。

  

x.members = [{“_ id”:1,“host”:“localhost.localdomain:27017”}]

第4步:强制重新配置新的副本集。

  

rs.reconfig(x,{force:true})

现在所需的成员将被提升为主要成员。