我有一個 MongoDB 副本集,其輔助副本集無法通過 STARTUP 狀態。資料庫很大,但他們現在應該已經轉移到 STARTUP2 了。正確的端口已打開,因為我可以從主端口連接到輔助端口,反之亦然。
答案1
接下來的步驟解決了類似的問題:
關於主要成員:
rs.status() { "set" : "ShardD", "date" : ISODate("2015-08-28T17:01:40.647Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "host.example.com:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1167, "optime" : Timestamp(1440780623, 1), "optimeDate" : ISODate("2015-08-28T16:50:23Z"), "electionTime" : Timestamp(1440780252, 2), "electionDate" : ISODate("2015-08-28T16:44:12Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "192.0.2.222:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 584, "optime" : Timestamp(0, 0), "optimeDate" : ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat" : ISODate("2015-08-28T17:01:40.601Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 }, { "_id" : 2, "name" : "192.0.2.223:27017", "health" : 1, "state" : 0, "stateStr" : "STARTUP", "uptime" : 676, "lastHeartbeat" : ISODate("2015-08-28T17:01:40.643Z"), "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), "pingMs" : 0, "configVersion" : -2 } ], "ok" : 1
}
檢查 PRIMARY 成員的名稱(通常等於「_id」:0)
如果名稱具有網域形式,請嘗試將名稱重寫為IP位址。更改副本集中的主機名:
cfg = rs.conf() cfg.members[0].host = "192.0.2.221" rs.reconfig(cfg)
之後副本集恢復正常狀態。
PS host.example.com 已解析為所有主機上的 IP 位址。
答案2
它要求主主機將主機名稱解析為輔助主機的 IP,而輔助主機也將主主機的主機名稱解析為 IP。
就我而言,我忘記新增輔助主機的主機檔案來解析主主機的主機名稱。一旦我更新了輔助節點中的主機文件,輔助節點的狀態就會轉換為 STARTUP2,然後轉換為 SECONDARY。
答案3
當 mongo 主機之間存在連線問題時,就會出現此問題。
例如,如果主節點可以連接到輔助節點,但輔助節點無法連接到主節點。
在這種情況下,主節點將接受副本集配置,因為它可以連接到輔助節點,但輔助節點無法同步到主節點,因為從輔助節點到主節點沒有連接。