02-副本集介绍

副本集介绍

A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments.

  • 一个副本集是一组mongo实例, 它们维护着相同的数据集。
  • 副本集提供数据冗余和高可用, 是生产环境部署的基本环境。
  • 只能解决数据安全和高可用, 不能解决高负载

image

副本集中的成员

  • primary 主节点, 接受所有的写操作
  • secondary 从结点,维护与主节点一致的数据副本, 可以承载读操作。

  • arbiter 仲裁者, 在选举primary时参与投票, 自己不承载数据,也不会成为primary

Mongo中的副本集是一组mongo实例,它们维护着相同的数据集。一个副本集包含多个数据承载结点和一个可选的仲裁结点。在多个数据承载结点中,只有一个结点是primary结点, 其余都是secondary结点。 primary结点接受所有 write 操作。

在副本集中使用{w:'majority'}写注意策略时,只有一个primary有能力去确认写操作,虽然某些情况下其他mongod实例会短暂地任务自己也是primary。primary会记录所有对数据集的变更操作, 例如 oplog。 secondary 会复制primary的oplog并应用其中的操作到自己的数据集上。当primary不可用时,有资格成为primary的secondary结点会选举新的primary。

image

副本集的同步

  • secondary异步地复制primary的oplog并将其操作应用到当前数据集

自动故障转移

  • 当primary与副本集中共其他成员失去通信(默认10s)一段时间后, 一个有资格的secondary发起选举并提名自己作为primary。 集群会尝试完成新primary的选举并恢正常
  • 在副本集没有完成选举时,无法执行写操作。在primary离线期间,如果配置为在secondary中读则副本集仍然可以提供读操作
  • 在默认配置下,集群完成选举前的中间时间不会超过12s。 这其中包括标记primary不可用的时间以及发起选举并完成选举。
  • 将 electionTimeoutMillis 修改地更小会导致更频繁的故障转移和选举,即使只是网络延迟。

读操作

read perference

  • 副本集默认在primary上执行读操作。 但是可以手动指定 readPerference 为 secondary 将读操作发送到secondary结点
  • 由于secondary是异步复制,这意味着读操作可能读取的数据不是primary中的最新数据
  • Multi-documnet transactions 控制读操作必须使用 readPerference 为 primary. 给定事务中的所有操作必须路由到相同的结点。

Oplog

oplog 是一种特殊的固定集合, 它滚动存储着所有对数据库中的修改操作记录。和普通的固定集合不同,它可扩大容量超过配置的最大数量,以避免删除未同步的数据。

在4.4版本后,支持配置一个保留oplog的最小小时数, mongoDB在oplog超过最大配置数量且oplog超出最大保留小时数后会被删除。

MongoDB先在primary中的执行对数据库的操作, 然后将对数据库的操作记录写入 primary 的oplog中, secondary成员会从primary中异步地复制oplog到secondary并执行其中的操作。

所有副本集的成员都包含oplog的一个副本(local.oplog.rs), 它维护了当前数据库的状态。

为了实现复制, 副本集中所有成员都会向副本集中其他成员发送心跳, 任何secondary都可以重其他成员导入oplog数据。

每一个oplog中的操作都是幂等的,也就是说,每一个操作都会产生相同的结果,无论是执行一次还是多次。

oplog size

image

image

副本集数据同步

为了维持分片数据集中的数据副本是最新的, 副本集中的secondary成员会从其他成员同步或复制数据。 MongoDB使用两种方式同步数据:

  • 复制全量数据到新增的成员的初始化同步
  • 复制正在进行的变更应用到全部数据集

Logical Initial Sync Process

当执行 logical initial sync 时, MongoBD:

  1. 克隆除local外的所有数据库。 为了克隆,Mongod从源数据库扫描每一个collection, 并将数据insert到自己的复制的collection中
  2. 为每个复制的集合中的文档创建索引
  3. 拉去在复制数据期间新增的 oplog 记录。 确保目标成员的local有充足的磁盘空间,用于临时存储持续复制的数据
  4. 应用所有的变更到数据集中,使用来自源的oplog, mongod更新其数据集以反映副本集的当前状态

File Copy Based Initial Sync

企业级版本有效。

基于文件复制的数据同步, 速度比Logical方式更快。

posted @ 2024-04-20 09:10  Dreamsrj  阅读(9)  评论(0)    收藏  举报