Replication
Secondary 和 Arbiter 卡在 Startup 中
我正在使用 MongoDB 版本 3.0.0。我正在嘗試在我們的機器上設置 mongodb 複製。最初設置了複製,但由於 VM 上的一些更改,整個事情都崩潰了。當我再次嘗試設置它時,輔助和仲裁器陷入了啟動模式。
在我設置的 mongoDB conf 文件中
replSet=ReplicaSet1
我使用命令添加了 2 台機器
rs.add("10.235.96.12:27017") rs.add("10.235.96.12:27017")
但是在這之後,當我做
rs.status()
次要和仲裁時,它仍然顯示在 StartUp 中ReplicaSet1:PRIMARY> rs.status() { "set" : "ReplicaSet1", "date" : ISODate("2015-07-31T04:45:57.260Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "BOSPROD9:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 63104, "optime" : Timestamp(1438257913, 1), "optimeDate" : ISODate("2015-07-30T12:05:13Z"), "electionTime" : Timestamp(1438254975, 2), "electionDate" : ISODate("2015-07-30T11:16:15Z"), "configVersion" : 7, "self" : true }, { "_id" : 1, "name" : "10.235.96.12:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 62663, "optime" : Timestamp(0, 0), "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2015-07-31T04:45:56.520Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 }, { "_id" : 2, "name" : "10.235.96.13:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 60043, "lastHeartbeat" : ISODate("2015-07-31T04:45:55.786Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 } ], "ok" : 1 }
當我嘗試
rs.conf
在輔助節點或仲裁器上執行時,我收到消息2015-07-31T05:23:07.927+0000 E QUERY Error: Could not retrieve replica set config: { "info" : "run rs.initiate(...) if not yet done for the set", "ok" : 0, "errmsg" : "no replset config has been received", "code" : 94 }
我確實多次嘗試清理所有機器中的所有 local.0、local.1 文件,並且還從日誌文件夾中刪除了所有日誌文件。我仍然遇到同樣的問題。有人可以告訴我我在這裡做錯了什麼嗎?
我已經對所有成員設置了replset。嘗試以獨立模式啟動,它可以工作。
從“BOSPROD9”,嘗試用 mongoshell 連接到其他服務:
$ mongo --host 10.235.96.12 --port 27017 $ mongo --host 10.235.96.13 --port 27017
(Telnet 不一樣。)如果這不起作用,可能是防火牆或 BindIP。
檢查 bind_ip(應該是 0.0.0.0,在 mongodb.conf 中更改是 127.0.0.1):
$ netstat -nap | grep :27017 | grep LISTEN tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN -
嘗試查看 10.235.96.12 和 10.235.96.13 上的日誌文件,了解它們為何卡住。他們收到配置了嗎?
嘗試以這種方式重新配置:
mongo> var cfg = {_id:"ReplicaSet1",members:[{_id:0, host:"BOSPROD9:27017"},{_id:1, host:"10.235.96.12:27017"},{_id:2, host:"10.235.96.13:27017",arbiterOnly:true}]}; mongo> rs.reconfig(cfg);
解決方案:
使用主機名而不是 ip:給所有伺服器一個主機名,更新主機文件並在 rs 配置中使用主機名。似乎 mongodb 建議不要使用 IP 地址,而是使用主機名。