Replication

Secondary 和 Arbiter 卡在 Startup 中

  • September 16, 2021

我正在使用 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 地址,而是使用主機名。

引用自:https://dba.stackexchange.com/questions/108625