开发者社区> 问答> 正文

一文了解MongoDB复制集

一文了解MongoDB复制集

展开
收起
社区秘书 2019-12-10 16:19:59 760 0
1 条回答
写回答
取消 提交回答
  • 1、MongoDB复制是MongoDB自动将数据同步到多个服务器的过程,设置好策略之后免去了人工操作。

    2、MongoDB提供了两种复制部署方案:主从复制(Master-Slave)和副本集(ReplicaSets,在1.6版本及以上版本,推荐使用),两种方式的共同特点在于都是只在一个主节点上进行写操作,然后写入的数据会异步地同步到所有的从节点上。

    副本集工作原理 1、副本集中主要有三个角色:主节点、从节点、仲裁者。要组建副本集集群至少需要两个节点,主节点和从节点,主节点负责接受客户端的请求写入数据等操作,从节点负责复制主节点上的数据,也可以提供给客户端读取数据的服务。仲裁者则是辅助投票修改集群。

    2、副本集要完成数据复制及修复集群依赖于两个基本的机制:oplog(操作日志)和心跳(heartbeat).

    oplog(操作日志) oplog是一个固定集合,位于每个复制节点的local数据库里,记录了所有对数据的变更操作。oplog只记录改变了数据的操作(更新数据或插入数据),读取查询数据这些操作不记录。

    数据同步 在副本集中,每次客户端向主节点写入数据,就会自动向主节点的oplog里添加一个文档,其中包含了足够的信息来重现这次操作。当某个从节点注备更新自己时,首先:查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的文档;最后,把那些文档应用到自己库里,并添加写操作文档到自己的oplog里。

    复制状态和本地数据库

    除了oplog操作之外,主从节点还会存放复制状态。记录下主从节点交互连接的状态,记录同步参数时间戳和选举情况。主从节点都会检查这些复制状态,以确保从节点能跟上主节点的数据更新。复制状态的文档记录在本地数据库local中。

    阻塞复制 当主节点oplog操作日志更新太快,就会阻塞主节点更新,让从节点先更新,以确保从节点能够跟上主节点的数据更新。

    心跳机制 副本集的心跳检测有助于发现故障进行自动选举和故障转移。默认情况下,每个副本集成员每两秒ping一次其他所有成员,这样,系统可以弄清楚自己的健康情况。

    如果哪个节点失去了响应,副本集就会去判断失去响应的是主节点还是从节点,如果是多个从节点中的某一个从节点,则副本集不做任何处理,只是等待从节点重新连接;如果是主节点挂掉,则副本集就会开始进行选举了,选出新的主节点。还有一种场景是副本集中主节点突然失去了其他大多数节点的心跳(多余一半时),主节点会把自己降级为从节点,从新选取。

    选举机制 第一阶段

    满足三个条件:

    1)、副本集中是否有其他节点已经是主节点了?

    2)、自己的数据是否比请求成为主节点的从节点上的数据更新?

    3)、副本集中其他节点的数据是否比请求成为主节点的从节点的数据更新?

    如果上面三个条件都是否定的,就会把票投给这个请求节点。

    第二阶段

    获得认可的请求节点会向其他节点发送一个确认的请求包,在30秒内所有都没有反对,就升级为主节点,若反对,从新选举,如果选举结果相同,可通过仲裁者决定选举谁。

    数据回滚

    2021-02-09 10:52:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载