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

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

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

1:数据同步的原理:

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

  

2:查看副本集的信息

  1. gechongrepl:PRIMARY> rs.status()
  2. {
  3. "set" : "gechongrepl",
  4. "date" : ISODate("2015-07-02T02:38:15Z"),
  5. "myState" : 1,
  6. "members" : [
  7. {
  8. "_id" : 6,
  9. "name" : "192.168.91.144:27017",
  10. "health" : 1,
  11. "state" : 7,
  12. "stateStr" : "ARBITER",
  13. "uptime" : 1678,
  14. "lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
  15. "lastHeartbeatRecv" : ISODate("2015-07-02T02:38:14Z"),
  16. "pingMs" : 1
  17. },
  18. {
  19. "_id" : 10,
  20. "name" : "192.168.91.135:27017",
  21. "health" : 1,
  22. "state" : 2,
  23. "stateStr" : "SECONDARY",
  24. "uptime" : 1678,
  25. "optime" : Timestamp(1435803750, 1),
  26. "optimeDate" : ISODate("2015-07-02T02:22:30Z"),
  27. "lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
  28. "lastHeartbeatRecv" : ISODate("2015-07-02T02:38:13Z"),
  29. "pingMs" : 1,
  30. "syncingTo" : "192.168.91.148:27017"
  31. },
  32. {
  33. "_id" : 11,
  34. "name" : "192.168.91.148:27017",
  35. "health" : 1,
  36. "state" : 1,
  37. "stateStr" : "PRIMARY",
  38. "uptime" : 1698,
  39. "optime" : Timestamp(1435803750, 1),
  40. "optimeDate" : ISODate("2015-07-02T02:22:30Z"),
  41. "electionTime" : Timestamp(1435803023, 1),
  42. "electionDate" : ISODate("2015-07-02T02:10:23Z"),
  43. "self" : true
  44. },
  45. {
  46. "_id" : 12,
  47. "name" : "192.168.91.134:27017",
  48. "health" : 1,
  49. "state" : 2,
  50. "stateStr" : "SECONDARY",
  51. "uptime" : 1655,
  52. "optime" : Timestamp(1435803750, 1),
  53. "optimeDate" : ISODate("2015-07-02T02:22:30Z"),
  54. "lastHeartbeat" : ISODate("2015-07-02T02:38:14Z"),
  55. "lastHeartbeatRecv" : ISODate("2015-07-02T02:38:14Z"),
  56. "pingMs" : 1,
  57. "syncingTo" : "192.168.91.135:27017"
  58. }
  59. ],
  60. "ok" : 1
  61. }
  1. myState:1表示primary
  2. state:1表示primary;7表示arbiter
  3. uptime:成员的在线时间
  4. lastHeartbeat:当前实例到远端最近一次成功接收到心跳包的时间
  5. pingMs:本实例到远端路由包的来回时间
  6. optime:读取oplog.rs集合。本实例最近一次的更改时间。

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

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

 

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

标签:

人气教程排行