当前位置:Gxlcms > 数据库问题 > MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

时间:2021-07-01 10:21:17 帮助过:4人阅读

1:数据同步的原理:

当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步:
1:检查自己local库的oplog.rs集合找出最近的时间戳。
2:检查Primary节点local库oplog.rs集合,找出大于此时间戳的记录。
3:将找到的记录插入到自己的oplog.rs集合中,并执行这些操作。

  

2:查看副本集的信息

gechongrepl:PRIMARY> rs.status()
{
	"set" : "gechongrepl",
	"date" : ISODate("2015-07-02T02:38:15Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 6,
			"name" : "192.168.91.144:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 1678,
			"lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
			"lastHeartbeatRecv" : ISODate("2015-07-02T02:38:14Z"),
			"pingMs" : 1
		},
		{
			"_id" : 10,
			"name" : "192.168.91.135:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1678,
			"optime" : Timestamp(1435803750, 1),
			"optimeDate" : ISODate("2015-07-02T02:22:30Z"),
			"lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
			"lastHeartbeatRecv" : ISODate("2015-07-02T02:38:13Z"),
			"pingMs" : 1,
			"syncingTo" : "192.168.91.148:27017"
		},
		{
			"_id" : 11,
			"name" : "192.168.91.148:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 1698,
			"optime" : Timestamp(1435803750, 1),
			"optimeDate" : ISODate("2015-07-02T02:22:30Z"),
			"electionTime" : Timestamp(1435803023, 1),
			"electionDate" : ISODate("2015-07-02T02:10:23Z"),
			"self" : true
		},
		{
			"_id" : 12,
			"name" : "192.168.91.134:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1655,
			"optime" : Timestamp(1435803750, 1),
			"optimeDate" : ISODate("2015-07-02T02:22:30Z"),
			"lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
			"lastHeartbeatRecv" : ISODate("2015-07-02T02:38:14Z"),
			"pingMs" : 1,
			"syncingTo" : "192.168.91.135:27017"
		}
	],
	"ok" : 1
}
myState:1表示primary
state:1表示primary;7表示arbiter
uptime:成员的在线时间
lastHeartbeat:当前实例到远端最近一次成功接收到心跳包的时间
pingMs:本实例到远端路由包的来回时间
optime:读取oplog.rs集合。本实例最近一次的更改时间。

MongoDB通过lastHeartbeat来实现自动转移。

mongod实例每隔两秒就会向其他成员发送一个心跳包,并且通过rs.status()中返回的成员的health来判断成员的状态。如果primary节点不可用了,那么复制集中的所有secondary节点都会触发一次选举操作。选出新的primary节点。如果secondary节点有多个,则会选举拥有最新oplog时间戳记录的或者有较高权限的节点成为primary(注意:如果secondary停止时间过长,导致primary节点的oplog内容被循环写覆盖掉,则需要手动同步secondary节点)

 

MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

标签:

人气教程排行