Mongo 辅助节点停留在启动状态

Mongo 辅助节点停留在启动状态

我有一个 MongoDB 副本集,其中的辅助节点无法通过 STARTUP 状态。数据库很大,但现在它们应该已经移至 STARTUP2。正确的端口已打开,因为我可以从主节点连接到辅助节点,反之亦然。

答案1

以下步骤解决了同样的问题:

  1. 在主要成员上:

    rs.status()
    {
    "set" : "ShardD",
    "date" : ISODate("2015-08-28T17:01:40.647Z"),
    "myState" : 1,
    "members" : [
            {
                    "_id" : 0,
                    "name" : "host.example.com:27017",
                    "health" : 1,
                    "state" : 1,
                    "stateStr" : "PRIMARY",
                    "uptime" : 1167,
                    "optime" : Timestamp(1440780623, 1),
                    "optimeDate" : ISODate("2015-08-28T16:50:23Z"),
                    "electionTime" : Timestamp(1440780252, 2),
                    "electionDate" : ISODate("2015-08-28T16:44:12Z"),
                    "configVersion" : 3,
                    "self" : true
            },
            {
                    "_id" : 1,
                    "name" : "192.0.2.222:27017",
                    "health" : 1,
                    "state" : 0,
                    "stateStr" : "STARTUP",
                    "uptime" : 584,
                    "optime" : Timestamp(0, 0),
                    "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                    "lastHeartbeat" : ISODate("2015-08-28T17:01:40.601Z"),
                    "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                    "pingMs" : 0,
                    "configVersion" : -2
            },
            {
                    "_id" : 2,
                    "name" : "192.0.2.223:27017",
                    "health" : 1,
                    "state" : 0,
                    "stateStr" : "STARTUP",
                    "uptime" : 676,
                    "lastHeartbeat" : ISODate("2015-08-28T17:01:40.643Z"),
                    "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                    "pingMs" : 0,
                    "configVersion" : -2
            }
    ],
    "ok" : 1
    

    }

  2. 检查主要成员的名称(通常它等于“_id”:0)

  3. 如果名称具有域名形式,请尝试将名称重写为 IP 地址。更改副本集中的主机名

    cfg = rs.conf()
    cfg.members[0].host = "192.0.2.221"
    rs.reconfig(cfg)
    

此后副本集恢复正常状态。

PS host.example.com 已解析为所有主机上的 IP 地址。

答案2

它要求主服务器将主机名解析为辅助服务器的 IP,并且辅助服务器也将主服务器的主机名解析为 IP。

在我的例子中,我忘记在 hosts 文件中为辅助服务器添加内容,以解析主服务器的主机名。一旦我更新了辅助服务器中的 hosts 文件,辅助服务器的状态就会转换为 STARTUP2,然后转换为 SECONDARY。

答案3

当 mongo 主机之间存在连接问题时,就会发生此问题。

例如,如果主服务器可以连接到辅助服务器,但辅助服务器无法连接到主服务器。

在这种情况下,主服务器将接受副本集配置,因为它可以连接到辅助服务器,但是辅助服务器无法同步到主服务器,因为从辅助服务器到主服务器没有连接。

相关内容