[英]Can't get node to connect to replica set
我正在嘗試設置MongoDB測試副本集。 問題是我找不到任何方法來獲取錯誤消息,其中一個節點永久保持在DOWN
或UNKNOWN
狀態。
這是我的初級rs.status
{
"set" : "rs0",
"date" : ISODate("2014-05-08T00:41:11Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongo1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3319,
"optime" : Timestamp(1399509356, 1),
"optimeDate" : ISODate("2014-05-08T00:35:56Z"),
"electionTime" : Timestamp(1399506359, 1),
"electionDate" : ISODate("2014-05-07T23:45:59Z"),
"self" : true
},
{
"_id" : 2,
"name" : "mongo3:30000",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 319,
"lastHeartbeat" : ISODate("2014-05-08T00:41:11Z"),
"lastHeartbeatRecv" : ISODate("2014-05-08T00:41:11Z"),
"pingMs" : 2,
"syncingTo" : "mongo1:27017"
},
{
"_id" : 3,
"name" : "mongo2:27018",
"health" : 1,
"state" : 6,
"stateStr" : "UNKNOWN",
"uptime" : 315,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2014-05-08T00:41:11Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 2,
"lastHeartbeatMessage" : "still initializing"
}
],
"ok" : 1
}
這是來自primary的rs.conf
{
"_id" : "rs0",
"version" : 12,
"members" : [
{
"_id" : 0,
"host" : "mongo1:27017"
},
{
"_id" : 2,
"host" : "mongo3:30000",
"arbiterOnly" : true
},
{
"_id" : 3,
"host" : "mongo2:27018"
}
]
}
問題是mongo2:27018。 我嘗試過添加和刪除它。 我試過擦拭整個盒子並重新安裝Cent + Mongo。 從3個盒子中的任何一個,我可以mongo
到其他2.所以從mongo1:27017我可以輸入mongo mongo2:27018
並且它沒有問題。 所有3個盒子都具有相同的配置,我在/etc/hosts
檢查了雙重,三重和四重。
我可以在任何地方找到的唯一調試信息是有問題的節點上的以下塊:
2014-05-08T02:45:51.763+0200 [initandlisten] connection accepted from 10.0.2.2:48720 #50 (2 connections now open)
2014-05-08T02:46:00.593+0200 [rsStart] trying to contact mongo1:27017
2014-05-08T02:46:00.602+0200 [rsStart] trying to contact mongo3:30000
2014-05-08T02:46:00.605+0200 [rsStart] replSet info Couldn't load config yet. Sleeping 20sec and will try again.
任何指導都表示贊賞,現在已經在這5個小時內掙扎。
我們發現的最終問題是每個副本節點的主機名不僅需要在節點之間有效,還要從節點到自身有效!
例如,由於某些端口轉發正在進行,mongo1可以通過mongo2:27018與mongo2成功通信,mongo3可以通過mongo2:27018與mongo2成功通信,但mongo2無法在mongo2:27018與自身通信(因為它實際上是在監聽在27017)。 它為其他盒子工作的原因是它們是mongo1而mongo3有mongo2的別名,它的端口轉發27018到27017。
所以基本上除非每個節點都可以ping自己和配置中的主機名中的其他節點,否則它將無效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.