时间: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 数据同步原理和自动故障转移的原理
标签: