我試圖實現MongoDB的複製,在虛擬機的形式,由4個節點,MongoDB的replicaSet配置 - 奇怪的行爲
信息:我使用VirtualBox的,並且v.machines相互throught的comunicate 主機專用適配器。通信已經過測試,並且ervery節點可以ping其他節點。
這是rs.conf()命令的輸出:
rs0:PRIMARY> rs.conf()
{
"_id" : "rs0",
"version" : 4,
"members" : [
{
"_id" : 0,
"host" : "192.168.56.1:27017"
},
{
"_id" : 1,
"host" : "192.168.56.101:27018"
},
{
"_id" : 2,
"host" : "192.168.56.102:27019"
},
{
"_id" : 3,
"host" : "192.168.56.103:27020"
}
]
}
這是命令rs.status()的輸出
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2013-12-14T16:09:36Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3207,
"optime" : Timestamp(1387034904, 1),
"optimeDate" : ISODate("2013-12-14T15:28:24Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.101:27018",
"health" : 1,
"state" : 6,
"stateStr" : "UNKNOWN",
"uptime" : 2542,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 1,
"lastHeartbeatMessage" : "still initializing"
},
{
"_id" : 2,
"name" : "192.168.56.102:27019",
"health" : 1,
"state" : 6,
"stateStr" : "UNKNOWN",
"uptime" : 2497,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "still initializing"
},
{
"_id" : 3,
"name" : "192.168.56.103:27020",
"health" : 1,
"state" : 6,
"stateStr" : "UNKNOWN",
"uptime" : 2472,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2013-12-14T16:09:36Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 1,
"lastHeartbeatMessage" : "still initializing"
}
],
"ok" : 1
}
從最後的命令似乎replicaSet仍然初始化,但看着mongod的4個實例,我不知道,這似乎是這樣的東西不能正常工作..
我想知道爲什麼所有的節點都試圖聯繫只有主實例忽略其他?以及爲什麼當連接被接受時,它再次嘗試聯繫同一個節點,因爲它沒有這樣做,因爲它說「無法加載配置」..我真的需要一個推動力來理解問題,如果有必要的話命令輸出,或一般信息只是讓我知道我會發布它們。
在此先感謝您的幫助
雖然您使用ping檢查了網絡連接,但您是否試圖在兩個方向連接服務器?我的意思是,你應該能夠從一臺服務器連接到所有其他服務器的外殼。也許你的防火牆阻止了連接。 – rubenfa
如果一個節點看不到一個主節點,那就像是經常觸發一個選舉。沒有主副本集不被認爲是一致的。每個節點都需要註冊到當前的主節點,並且需要能夠從該主節點獲取信息,即使它仍然繼續從輔助節點進行同步。 – Sammaye
@rubenfa:你的意思是連接到「mongo --port 27019」的方式,不,我沒有嘗試過,我認爲pinging被佔用,我會盡快檢查這種方式 – lese