在 MongoDB 中添加副本会引发错误

Adding a replica in MongoDB throws an error

我正在尝试使用 rs.add("developer-ViratualBox:30103") 将节点添加到副本集,但收到以下错误消息:

{
"ok" : 0,
"errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: developer-VirtualBox:30101; the following nodes did not respond affirmatively: developer-ViratualBox:30103 failed with Failed attempt to connect to developer-ViratualBox:30103; couldn't initialize connection to host developer-ViratualBox, address is invalid",
"code" : 74
}

该节点已经 运行,我使用 mongo shell 连接到它。可能是什么问题?

您只能在连接到 主要 时添加成员。要知道哪个成员是主成员,请登录副本集的任何成员并发出 db.isMaster() 命令。

然后,使用rs.add() 将新成员添加到副本集。例如,要在主机 mongodb3.example.net 上添加一个成员,请发出以下命令:

rs.add("developer-ViratualBox:30103")

实际错误是couldn't initialize connection to host developer-ViratualBox, address is invalid,只是主节点无法连接从节点。检查连接、防火墙,并检查与 mongo shell 的连接是否可以访问该端口。

缺少的一点是我试图添加的实例没有在定义的端口启动 mongod 实例。因此给定的连接参数不正确,导致通信问题。

在启动辅助 mongod 进程时使用 --replSet 选项尝试从主 mongod shell.

运行 rs.add("localhost:27002")

另一个可能的问题是您尝试添加到副本集的机器未配置为 运行 复制。 将此条目添加到您尝试添加的机器上的 mongod.conf 并重新启动服务对我有用:

replication:
  replSetName: evoReplicaSet

创建 rsconf 文件时,请输入 <localhost:port> 而不是 <hostname:port>。 然后 reconfig(rsconf).

示例:

rs0:PRIMARY>     
rsconf = {
             _id: "rs0",
             members: [
                 {
                     _id: 0,
                     host: "**localhost**:port for primary rs"
                 }]
         }

rs0:PRIMARY> rs.initiate(rsconf)
    {
        "info" : "try querying local.system.replset to see current configuration",
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23
    }

如果出现上述错误,请使用以下命令:

rs0:PRIMARY> rs.reconfig(rsconf)

添加辅助节点:rs.add("localhost:port for secondary rs")

希望它能奏效。

你应该使用docker网络来解决这个问题。