我已经设置了一个分片集群,但我的配置服务器副本出现了一些错误。以下是我的配置服务器副本状态:
cnf-serv:SECONDARY> rs.status()
{
"set" : "cnf-serv",
"date" : ISODate("2017-08-21T01:28:00.926Z"),
"myState" : 2,
"term" : NumberLong(1),
"configsvr" : true,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"appliedOpTime" : {
"ts" : Timestamp(1502320369, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1502320369, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "172.19.0.13:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"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"),
"lastHeartbeat" : ISODate("2017-08-21T01:28:00.831Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Connection refused",
"configVersion" : -1
},
{
"_id" : 1,
"name" : "172.19.0.4:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"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"),
"lastHeartbeat" : ISODate("2017-08-21T01:28:00.831Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "Connection refused",
"configVersion" : -1
},
{
"_id" : 2,
"name" : "172.19.0.7:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 119601,
"optime" : {
"ts" : Timestamp(1502320369, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-08-09T23:12:49Z"),
"configVersion" : 185982,
"self" : true
}
],
"ok" : 1
}
我可以从上面的命令中看到两个副本成员不可访问,唯一可访问的成员是辅助成员。所以我需要让次要成员成为主要成员,以使配置副本正常工作。我在辅助中尝试了以下命令但没有用:
cnf-serv:SECONDARY> rs.slaveOk()
cnf-serv:SECONDARY> var cfg = rs.config();
cnf-serv:SECONDARY> cfg.members[0].priority=0.5
0.5
cnf-serv:SECONDARY> cfg.members[1].priority=0.5
0.5
cnf-serv:SECONDARY> cfg.members[2].priority=1
1
cnf-serv:SECONDARY> rs.reconfig(cfg, {force: true})
{ "ok" : 1 }
进行此更改后,次级仍然是次级。它没有成为主要的。我该如何解决这个副本集问题?
你的问题是三个节点中的一个不能是“多数”。如果您从设置中删除这两个节点,则该节点可以成为主要节点。更好的解决方案是让其他两个节点响应。
该错误消息表明该节点(您提供 rs.status() -命令的位置)无法连接到其他两个节点。我猜想中间有防火墙,端口 27017 没有漏洞。
与往常一样,解决问题的最佳来源是 mongodb.log 文件,其中程序会告诉您设置有什么问题。