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、内存、磁盘、网络,服务进程端口,数据库集群状态,再出现异常时我们可以及时发现。