Mongodb
我們的副本集配置無效或我們不是其中的成員 - MongoDB
我已經啟動了 mongodb 伺服器,並在埠 27001 上啟用了副本集名稱“rs01”。
然後啟動另一個命令視窗以在同一埠上啟動 mongo db。
狀態表明“rs0”不是副本集的成員。
rs0:OTHER> rs.status() { "operationTime" : Timestamp(1552575009, 1), "ok" : 0, "errmsg" : "Our replica set config is invalid or we are not a member of it", "code" : 93, "codeName" : "InvalidReplicaSetConfig", "$clusterTime" : { "clusterTime" : Timestamp(1552575009, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
但是,如果我嘗試註冊會員,則會出現以下錯誤消息。任何幫助,將不勝感激。
rs0:OTHER> rs.initiate({_id:"rs0",members[{_id:0,host:"localhost:27001"}]}) 2019-03-14T22:14:39.840+0530 E QUERY [js] SyntaxError: missing : after property id @(shell):1:30 rs0:OTHER> rsconf={ _id:"rs0", members: [ { _id: 0,host:"localhost:27001"}]} { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "localhost:27001" } ] } rs0:OTHER> rs.initiate(rsconf) { "operationTime" : Timestamp(1552575009, 1), "ok" : 0, "errmsg" : "already initialized", "code" : 23, "codeName" : "AlreadyInitialized", "$clusterTime" : { "clusterTime" : Timestamp(1552575009, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
mongodb
在我的情況下(副本集中具有單個節點的本地實例)。我跑過去
rs.config()
看到成員$$ 0 $$.host不正確。我將配置複製/粘貼到
rs.reconfig
命令中,編輯了主機 ID,並且必須{"force":true}
用作第二個參數。我不知道這種“蠻橫”的方法是否適用於不同的設置。
rs.reconfig({ "_id" : "rs0", "version" : 1.0, "protocolVersion" : NumberLong(1), "writeConcernMajorityJournalDefault" : true, "members" : [ { "_id" : 0.0, "host" : "2f0bd979cc69:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1.0, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1.0 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000.0, "heartbeatTimeoutSecs" : 10.0, "electionTimeoutMillis" : 10000.0, "catchUpTimeoutMillis" : -1.0, "catchUpTakeoverDelayMillis" : 30000.0, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1.0, "wtimeout" : 0.0 }, "replicaSetId" : ObjectId("6033b612985ce53324d7446c") } }, {"force":true})
根據錯誤,您似乎沒有正確配置副本集。如何設置 MongoDB 副本集,您可以在此處找到。
例如,我在此處編寫設置 MongoDB 副本集的步驟
1)啟動一個mongod實例。
2)啟動另一個mongod實例。
- 開始複製。
啟動所有 mongod 節點實例後,連接到任何一個節點並啟動 mongo shell,然後輸入命令提示符
rs.initiate()
例如
現在 mongo shell 提示符將更改為 yournodeinstancename:PRIMARY>
您還可以使用 rs.status() 方法檢查狀態。
rs.status()
有關 rs.status() 的更多資訊,請參閱此處和此處的 MongoDB 文件
- 將一個 MongoDB 實例添加到 Replica Set。
rs.add();
- 檢查狀態。
您可以通過執行以下命令檢查副本集的狀態
rs.status();
6)獲取副本集的概述以及目前節點是否為主節點
rs.isMaster()