Mongodb rs.add() 新成員處於 STARTUP 狀態
我一直在執行一個 shell 腳本,在不同的機器上啟動 mongod 實例,初始化它們(第一台機器)並將它們添加到副本集(其他機器)。以下是我執行的摘要:
機器 1 - mongod 並通過執行 rs.initiate() 啟動為主
機器 2 - mongod 並聯繫主要執行 rs.add()
但是,當我添加第二個 mongod 實例時,響應還可以,但是在主伺服器上執行 rs.status() 它顯示機器 2 處於 STARTUP 狀態
{“_id”:1,“名稱”:“機器 2”,“健康”:1,“狀態”:0,“狀態Str”:“STARTUP”,“正常執行時間”:30,“optime”:{“ts” : Timestamp(0, 0), “t” : NumberLong(-1) }, “optimeDurable” : { “ts” : Timestamp(0, 0), “t” : NumberLong(-1) }, “optimeDate” : ISODate(“1970-01-01T00:00:00Z”),“optimeDurableDate”:ISODate(“1970-01-01T00:00:00Z”),“lastHeartbeat”:ISODate(“2018-06-14T07:07:11.336Z”),“lastHeartbeatRecv”:ISODate(“1970-01- 01T00:00:00Z"),“pingMs”:NumberLong(0),“configVersion”:-2
使用 的進一步調查
db.runCommand({getLog:"rs"}
顯示以下內容:“2018-06-14T12:23:54.223+0800 我回复
$$ replexec-5 $$成員機器 2 現在處於狀態 RS_DOWN"
為什麼我的機器在第一次添加時處於啟動狀態?這個 RS_DOWN 是什麼?我在兩台機器上都使用 MONGO 3.64。我總是在嘗試腳本之前刪除本地數據庫
我發現我的副本集集群出了什麼問題。您需要為 提供一個參數
rs.initiate()
,即配置文件。如果您不指定該文件,它將從 /etc/mongod.conf 讀取配置,該配置將沒有任何副本集的配置。rs.initiate() 的配置如下所示:
rs.initiate( { _id: "myReplSet", version: 1, members: [ { _id: 0, host : "mongodb0.example.net:27017" }, { _id: 1, host : "mongodb1.example.net:27017" }, { _id: 2, host : "mongodb2.example.net:27017" } ] } )
但是,如果您事先不知道要添加到集群中的副本集數量也沒關係,只需指定第一個副本集,隨後的副本集將毫無問題地添加:
rs.initiate( { _id: "myReplSet", version: 1, members: [ { _id: 0, host : "mongodb0.example.net:27017" } ] } )