2

我正在尝试配置具有 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 实例,即使日志说它已启动并正在运行。关于在这里做什么的任何想法?

4

2 回答 2

3

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

我认为您强制重新配置的问题在于,在此重新配置之后,您仍然需要为正常运行的副本集拥有最少的节点数,即 3。但是由于您最初有 3 个成员并丢失了 2 个,所以您无法将那个幸存的节点变成一个正常运行的副本集。

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

于 2013-08-02T21:19:30.540 回答
0

是的,如果辅助服务器运行良好,您可以将单个辅助副本设置为主副本。请按照以下简单步骤操作:

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

rs.conf()

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

x = rs.conf()

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

x.members = [{"_id":1,"host" : "localhost.localdomain:27017"}]

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

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

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

于 2016-05-02T07:13:01.583 回答