Mongodb副本集

副本集MongoDB中是一组mongod其保持相同的数据集的过程。副本集提供冗余和 高可用性,是所有生产部署的基础。
MongoDB 中的复制
副本集是一组mongod维护相同数据集的实例。一个副本集包含多个数据承载节点和可选的一个仲裁节点。承载数据的节点中,只有一个成员为主节点,其他节点为辅节点。

所述主节点接收所有的写操作。一个副本集只能有一个主节点能够确认写入{ w: “majority” } 。主将对其数据集的所有更改记录在其操作日志中,即oplog。
副本集成员
副本集MongoDB中是一组mongod提供冗余和高可用性的方法。副本集的成员是:

主节点
主节点接收所有写操作。
从节点
辅助节点从主节点复制操作以维护相同的数据集。辅助节点可能具有用于特殊使用配置文件的其他配置。例如,次要节点可能 没有投票权或 优先级为 0。
副本集的最低推荐配置是具有三个数据承载成员的三成员副本集:一个主要成员和两个次要成员。在某些情况下(例如您有一个主要和一个次要但成本限制禁止添加另一个次要),您可以选择包含一个arbiter。仲裁者参与选举但不持有数据(即不提供数据冗余)。

一个副本集最多可以有50 个成员,但只有 7 个投票成员。
主要
主节点是副本集中唯一接收写操作的成员。MongoDB 在主节点上应用写操作,然后在主节点的oplog上记录操作。次要成员复制此日志并将操作应用于其数据集。
副本集的所有成员都可以接受读操作。但是,默认情况下,应用程序会将其读取操作定向到主要成员。有关更改默认读取行为的详细信息,请参阅读取首选项。
副本集最多可以有一个主节点。 [ 2 ]如果当前主节点不可用,则选举确定新的主节点。有关更多详细信息,请参阅 副本集选举。

次要
辅助节点维护主节点数据集的副本。为了复制数据,辅助节点在异步过程中将主节点 oplog 中的操作应用到它自己的数据集。[ 1 ]一个副本集可以有一个或多个辅助节点。
尽管客户端无法将数据写入次要成员,但客户端可以从次要成员读取数据。有关客户端如何将读取操作定向到副本集的更多信息,请参阅读取首选项。

次要可以成为主要。如果当前主节点不可用,副本集将举行选举以选择哪个辅助节点成为新的主节点。

有关更多详细信息,请参阅 副本集选举。

您可以为特定目的配置次要成员。您可以将辅助配置为:

防止它在选举中成为主,这允许它驻留在辅助数据中心或作为冷备用。请参阅 优先级 0 副本集成员。
阻止应用程序读取它,这允许它运行需要与正常流量分离的应用程序。请参阅 隐藏副本集成员。
保留正在运行的“历史”快照以用于从某些错误(例如无意删除的数据库)中恢复。请参阅 延迟副本集成员。
仲裁者
在某些情况下(例如您有一个主要和一个次要但成本限制禁止添加另一个次要),您可以选择向您的副本集添加一个仲裁器。一个仲裁器不具备的数据集的副本,并不能成为主要的。但是,仲裁者参与了 primary 的选举。仲裁者完全具有1选举投票权。

在3.6版更改:从 MongoDB 3.6 开始,仲裁者具有优先权0。将副本集升级到 MongoDB 3.6 时,如果现有配置具有优先级的仲裁器1,MongoDB 3.6 会重新配置仲裁器以具有优先级0。

重要的
不要在还托管副本集的主要或次要成员的系统上运行仲裁器。

要添加仲裁器,请参阅将仲裁器添加到副本集。

有关使用仲裁器时的注意事项,请参阅副本集仲裁器。
优先级 0 副本集成员
一个priority 0成员是一个成员 不能成为主要的和不能触发 选举。
除了上述限制之外, priority 0的辅助节点具有正常辅助节点的功能:它们维护数据集的副本,接受读取操作,并在选举中投票。
隐藏副本集成员
隐藏成员维护主 数据集的副本,但对客户端应用程序不可见。隐藏成员适用于使用模式与副本集中其他成员不同的工作负载。隐藏成员必须始终是 优先级 0 成员,因此不能成为主要成员。该db.hello()方法不显示隐藏成员。然而,隐藏成员可以在 选举中投票。
延迟副本集成员
延迟成员包含副本集数据集的副本。但是,延迟成员的数据集反映了该集合的较早或延迟状态。例如,如果当前时间是 09:52 并且成员有一个小时的延迟,则延迟的成员在 08:52 之后没有操作。

由于延迟成员是数据集的“滚动备份”或正在运行的“历史”快照,因此它们可以帮助您从各种人为错误中恢复。例如,延迟成员可以从不成功的应用程序升级和操作员错误(包括删除的数据库和集合)中恢复。

注意事项
要求
迟到的成员:

必须是 优先级为 0 的 成员。将优先级设置为 0 以防止延迟成员成为主要成员。
应该是 隐藏 成员。始终防止应用程序查看和查询延迟的成员。
如果成员[n]票数设置为1,则在可在选举中进行投票。
副本集仲裁器
在某些情况下(例如您有一个主要和一个次要但成本限制禁止添加另一个次要),您可以选择向您的副本集添加一个仲裁器。一个仲裁器不具备的数据集的副本,并不能成为主要的。但是,仲裁者参与了 primary 的选举。仲裁者完全具有1选举投票权。
通讯
仲裁者和其他集合成员之间的唯一通信是:选举期间的投票、心跳和配置数据。这些交换未加密。
副本集 Oplog
该OPLOG(操作日志)是一个特殊的上限集合,它可将修改存储在数据库中的数据的所有操作的滚动记录。
MongoDB 在主数据库上应用数据库操作,然后在主数据库的 oplog 上记录操作。的次级部件然后复制并在异步处理应用这些操作。所有副本集成员在local.oplog.rs集合中都包含 oplog 的副本 ,这允许它们维护数据库的当前状态。

为了便于复制,所有副本集成员都会向所有其他成员发送心跳(ping)。任何次要成员都可以从任何其他成员导入 oplog 条目。

oplog 中的每个操作都是幂等的。也就是说,无论是对目标数据集应用一次还是多次,oplog 操作都会产生相同的结果。

Oplog 大小
当您第一次启动副本集成员时,如果您不指定 oplog 大小,MongoDB 会创建一个默认大小的 oplog。
最大投票人数
一个副本集最多可以有50 个成员,但只有7 个投票成员。如果副本集已经有 7 个投票成员,则额外的成员必须是非投票成员。

部署奇数个成员
确保副本集具有奇数个投票成员。一个副本集最多可以有 7 个投票成员。如果您有偶数 个投票成员,则部署另一个数据承载投票成员,或者,如果限制禁止另一个数据承载投票成员,则部署一个 仲裁器。
副本集部署架构
副本集的架构会影响副本集的容量和能力。本文档提供了副本集部署的策略并描述了常见的架构。

生产系统的标准副本集部署是一个三成员副本集。这些集合提供冗余和容错。尽可能避免复杂性,但让您的应用程序需求决定架构。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值