4-5 Mongodb副本集成员状态
最后更新于:2022-04-02 07:39:54
### 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、内存、磁盘、网络,服务进程端口,数据库集群状态,再出现异常时我们可以及时发现。
';