Mongodb

我們的副本集配置無效或我們不是其中的成員 - MongoDB

  • October 18, 2021

我已經啟動了 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實例。

  1. 開始複製。

啟動所有 mongod 節點實例後,連接到任何一個節點並啟動 mongo shell,然後輸入命令提示符

rs.initiate()

例如

現在 mongo shell 提示符將更改為 yournodeinstancename:PRIMARY>

您還可以使用 rs.status() 方法檢查狀態。

rs.status()

有關 rs.status() 的更多資訊,請參閱此處此處的 MongoDB 文件

  1. 將一個 MongoDB 實例添加到 Replica Set。

rs.add();

  1. 檢查狀態。

您可以通過執行以下命令檢查副本集的狀態

rs.status();

6)獲取副本集的概述以及目前節點是否為主節點

rs.isMaster()

為了進一步參考這裡這裡這裡

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