Mongodb副本集成员正常启动以后,节点成员一般有三个状态

1、PRIMARY

可以称为主节点,唯一一个接受写操作的成员,副本集中有且只有一个。

2、SECONDARY

可以成为从节点,负责数据的存储,可以支持读操作,副本集中可以有多个,比如开启了slave=ok,可以有多个节点提供数据的读操作。

3、ARBITER

仲裁节点,不复制数据,仅存在选举中,有资格投票。如果副本集的表决成员数将是偶数,副本集可能受选举受困,仲裁节点会投票保证全局成功,副本集应具有ARBITER状态的节点成员。任何副本集中最多只能配置一个仲裁节点。

我们可以通过命令查看副本集节点成员状态:

[root@VM_0_17_centos ~]# /home/eqs/mongodb/bin/mongo  192.168.0.17:27010

eqxiurs1:PRIMARY> rs.status()
{
    "set" : "eqxiurs1",
    "date" : ISODate("2020-05-14T09:02:05.573Z"),
    "myState" : 1,
    "term" : NumberLong(74),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1589446923, 2),
            "t" : NumberLong(74)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1589446923, 2),
            "t" : NumberLong(74)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1589446923, 2),
            "t" : NumberLong(74)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1589446923, 2),
            "t" : NumberLong(74)
        }
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "192.168.0.17:27011",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 11775342,
            "lastHeartbeat" : ISODate("2020-05-14T09:02:05.425Z"),
            "lastHeartbeatRecv" : ISODate("2020-05-14T09:02:05.412Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "configVersion" : 17
        },
        {
            "_id" : 2,
            "name" : "192.168.0.17:27010",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 11775348,
            "optime" : {
                "ts" : Timestamp(1589446923, 2),
                "t" : NumberLong(74)
            },
            "optimeDate" : ISODate("2020-05-14T09:02:03Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1585532206, 1),
            "electionDate" : ISODate("2020-03-30T01:36:46Z"),
            "configVersion" : 17,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 3,
            "name" : "192.168.0.14:27010",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 3914094,
            "optime" : {
                "ts" : Timestamp(1589446923, 2),
                "t" : NumberLong(74)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1589446923, 2),
                "t" : NumberLong(74)
            },
            "optimeDate" : ISODate("2020-05-14T09:02:03Z"),
            "optimeDurableDate" : ISODate("2020-05-14T09:02:03Z"),
            "lastHeartbeat" : ISODate("2020-05-14T09:02:04.038Z"),
            "lastHeartbeatRecv" : ISODate("2020-05-14T09:02:03.768Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "192.168.0.17:27010",
            "syncSourceHost" : "192.168.0.17:27010",
            "syncSourceId" : 2,
            "infoMessage" : "",
            "configVersion" : 17
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1589446923, 2),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1589446923, 2),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

如果一直处于下边的几种状态,我们需要查看节点的日志看看是否有异常

1、STARTUP

副本集的每个成员都以STARTUP状态启动。然后mongod加载该成员的副本集配置,并将该成员的状态转换为STARTUP2。 STARTUP中的成员没有资格投票,因为它们尚未成为任何副本集的公认成员节点。

2、RECOVERING

当副本集的成员尚未准备好接受读取时,它将进入RECOVERING状态。 RECOVERING状态可以在正常操作期间发生,并不一定反映错误情况。处于RECOVERING状态的成员有资格在选举中投票,但没有资格成为PRIMARY状态。

在复制了足够的数据以保证用于客户端读取的数据的一致视图之后,成员从RECOVERING过渡到SECONDARY。 RECOVERING和SECONDARY状态之间的唯一区别是RECOVERING禁止客户端读取,而SECONDARY允许它们读取。

3、STARTUP2

mongod一旦完成加载该成员配置的副本,副本集中的每个成员就会进入STARTUP2状态,这时它将成为副本集中的活动成员并可以投票。然后,成员决定是否进行初始同步。如果成员开始初始同步,则该成员将保留在STARTUP2中,直到复制所有数据并构建所有索引为止。之后,成员转换为RECOVERING。
新成员加入副本集时,初始化同步数据状态,该状态有投票资格。待数据同步完成会成为正常状态。

4、UNKNOWN

从未将状态信息传递给副本集的成员处于UNKNOWN状态,一般节点出现网络问题。

5、ROLLBACK

每当副本集替换一次选举中的主数据库时,旧的主数据库可能包含未复制到辅助成员的文档。在这种情况下,旧的主要成员将还原这些写入。在回滚期间,成员将具有ROLLBACK状态。处于ROLLBACK状态的成员有资格在选举中投票。

从4.2版开始,当成员进入ROLLBACK状态时,MongoDB会终止所有正在进行的用户操作。

6、REMOVED

从副本集中删除的成员进入“已删除”状态。当成员进入REMOVED状态时,日志将使用replSet REMOVED消息条目标记该事件。

7、DOWN

副本集的其余成员将失去与副本集的连接的成员视为DOWN。

8、not reachable/healthy

宕机,或者节点服务停止

###数据库在运行起来以后我们要做好监控,服务资源监控CPU、内存、磁盘、网络,服务进程端口,数据库集群状态,再出现异常时我们可以及时发现。