我们的副本集配置无效或者我们不是它的成员 - MongoDB

Nan*_*ndy 5 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)
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试注册会员,则会出现以下错误消息。任何帮助,将不胜感激。

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)
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

蒙古数据库

小智 5

在我的情况下(副本集中具有单个节点的本地实例)。我跑了rs.config()一下发现members[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})
Run Code Online (Sandbox Code Playgroud)


Md *_*han 0

根据错误,您似乎没有正确配置副本集。如何设置 MongoDB 副本集,您可以在这里找到。

例如,我正在此处编写设置 MongoDB 副本集的步骤

1)启动一个mongod实例。

2)启动另一个mongod实例。

3) 开始复制。

启动所有 mongod 节点实例后,连接到任一节点并启动 mongo shell,然后输入命令提示符

rs.initiate()

例如

现在 mongo shell 提示符将更改为 yournodeinstancename:PRIMARY>

您还可以使用 rs.status() 方法检查状态。

rs.status()

有关 rs.status() 的更多信息,请参阅此处此处的MongoDB 文档

4) 将 MongoDB 实例添加到副本集。

rs.add();

5) 检查状态。

您可以通过运行以下命令来检查副本集的状态

rs.status();

6) 获取副本集的概览以及当前节点是否为主节点

rs.isMaster()

进一步参考这里这里这里