我正在尝试使用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实例,即使日志说它已启动并正在运行。关于该怎么做的任何想法?
答案 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})
现在所需的成员将被提升为主要成员。