🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 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、内存、磁盘、网络,服务进程端口,数据库集群状态,再出现异常时我们可以及时发现。