Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB副本集成员国为;其他";_Mongodb_Replicaset - Fatal编程技术网

MongoDB副本集成员国为;其他";

MongoDB副本集成员国为;其他";,mongodb,replicaset,Mongodb,Replicaset,三个成员,主要和次要-第三个是“其他”-我找不到关于该状态的任何信息,不确定该怎么办,我已经重新启动了实例,但它总是出现相同的结果。找不到有关该状态的文档 我不熟悉副本集,希望您能提供帮助。对于后代来说,问题在于实例无法与主副本集或次副本集同步,因为它关闭时间太长。它进入了一种尝试主要和次要的状态,一次又一次地尝试,永远不允许同步。这最终创建了一个8GB的日志文件,我无法打开它,所以当时我看不到问题所在。显然,解决方案是停止出错的mongo实例—转储其数据—并再次启动它,就像它是副本集的新成员一

三个成员,主要和次要-第三个是“其他”-我找不到关于该状态的任何信息,不确定该怎么办,我已经重新启动了实例,但它总是出现相同的结果。找不到有关该状态的文档


我不熟悉副本集,希望您能提供帮助。

对于后代来说,问题在于实例无法与主副本集或次副本集同步,因为它关闭时间太长。它进入了一种尝试主要和次要的状态,一次又一次地尝试,永远不允许同步。这最终创建了一个8GB的日志文件,我无法打开它,所以当时我看不到问题所在。显然,解决方案是停止出错的mongo实例—转储其数据—并再次启动它,就像它是副本集的新成员一样。

我能够复制场景,这就是我在mongod中执行时得到的结果。
rs.status()
,命令提示符显示
OTHER

{
    "state" : 10,
    "stateStr" : "REMOVED",
    "uptime" : 41,
    "optime" : {
        "ts" : Timestamp(1518192445, 1),
        "t" : NumberLong(26)
    },
    "optimeDate" : ISODate("2018-02-09T16:07:25Z"),
    "ok" : 0,
    "errmsg" : "Our replica set config is invalid or we are not a member of it",
    "code" : 93,
    "codeName" : "InvalidReplicaSetConfig",
    "operationTime" : Timestamp(1518192445, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1518193246, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
假设错误的mongod是执行
rs.conf()
操作时得到的JSON的
members
数组中的第三个成员(索引2)。转到主服务器并从副本集中删除故障mongod:

rsconf = rs.conf()
rsconf.members = [rsconf.members[0], rsconf.members[1]] //index 0 and 1 are your working members, we're omitting the 3rd member which is faulty.
rs.reconfig(rsconf);
现在重新启动显示为
OTHER
的mongod。然后再次转到主节点并再次添加成员。假设IP为
10.00.00.00
,端口为
27019

rs.add("10.00.00.00:27019")
这解决了问题,状态从“其他”更改为“辅助”


请注意,reconf将重置所有客户端连接。您可能需要大约一分钟的维护时间来进行重新配置。

配置设置不正确

可以使用以下命令初始化:

rs.initiate({
      _id: "rs0",
      version: 1,
      members: [
         { _id: 0, host : "localhost:27017" }
      ]
   }
)
如果您已经启动,您可能会像我一样收到错误消息:

singleNodeRepl:OTHER> rs.initiate({ _id: "rs0", members: [ { _id: 0, host : "localhost:27017" } ] } )
{
    "info" : "try querying local.system.replset to see current configuration",
    "ok" : 0,
    "errmsg" : "already initialized",
    "code" : 23,
    "codeName" : "AlreadyInitialized"
}
解决方案是
reconf
mongo:

singleNodeRepl:OTHER> rsconf = rs.conf()
singleNodeRepl:OTHER> rsconf.members = [{_id: 0, host: "localhost:27017"}]
[ { "_id" : 0, "host" : "localhost:27017" } ]
singleNodeRepl:OTHER> rs.reconfig(rsconf, {force: true})
{ "ok" : 1 }
singleNodeRepl:OTHER>
singleNodeRepl:SECONDARY>
singleNodeRepl:PRIMARY>
更改优先级

假设你有三个成员

rs0:OTHER> cfg = rs.conf()

rs0:OTHER> cfg.members[0].priority = 1

rs0:OTHER> cfg.members[1].priority = 0.5

rs0:OTHER> cfg.members[2].priority = 0.5

rs0:OTHER> rs.reconfig(cfg, {force: true})

rs0:OTHER> rs.config()

rs0:PRIMARY>

我的解决方案是:断开与robot3t和我电脑上使用的所有mongodb Gui(compass..)的连接。然后,当我重新打开mongo外壳时,它将作为主外壳连接。

对不起-Ubuntu 1604上运行的版本是3.4.3。这个问题涉及3个节点。但您的答案只针对1个节点。谢谢!更新后,我可以让我的MongoDB docker恢复运行!最后,我还需要对正在添加的成员执行相同的
rs.add
命令,因为在重新启动后,该成员在没有将其作为成员的情况下获取配置。提供一些关于您答案的解释将使其更有帮助。还建议提供您的想法。