副本集部署体系架构
在此页面上
的副本集架构会影响集合的容量和功能。本文档提供副本集部署策略并介绍常用架构。
生产系统的标准副本集部署是三节点副本集。这些副本集提供冗余和容错能力。设计部署时应力求简化,根据应用程序的具体需求来决定架构。
Strategies
确定成员人数
根据这些策略在副本集中添加成员。
投票节点的最大数量
一个副本集最多可以有 50 个节点,但只有 7 个投票节点。如果副本集已有 7 个投票节点,则其他节点必须为非投票节点。
部署奇数个节点
确保副本集的投票节点数量为奇数。一个副本集最多可以有 7 个投票节点。如果投票节点的数量为偶数,则部署另一个数据承载投票节点,或者如果约束禁止另一个数据承载投票节点,则部署一个仲裁节点。
仲裁节点不存储数据副本,所需资源较少。因此,可在应用程序服务器或其他共享资源上运行仲裁节点。如果没有数据副本,则可以将仲裁节点放置到您不会放置副本集其他成员的环境中。请查阅您的安全政策。
警告
请勿在副本集中部署多个仲裁节点。请参阅有关多个仲裁节点的问题。
要将仲裁节点添加到现有副本集:
通常,如果副本集中承载数据的成员少于或等于两个,则可能需要先为副本集设置集群范围的写关注(write concern)。
请参阅集群范围的写关注(write concern),详细了解为什么可能需要设置集群范围的写关注。
在使用具有一个仲裁节点的新副本集之前,您不需要更改集群范围的写关注(write concern)。
另请参阅:
考虑容错能力
副本集的容错能力是指可以变得不可用但仍然在副本集中留下足够节点来选举主节点的节点数量。换言之,它是集合中的节点数量与选举主节点所需投票节点数量 majority
之间的差值。如果没有主节点,副本集将无法接受写入操作。容错能力是副本集大小的影响,但这种关系不是直接的。请参阅下表:
节点数量 | 选举新主节点所需的多数票 | 容错 |
---|---|---|
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
向副本集添加成员并不总是能提高容错能力。 但是,在这些情况下,其他成员可以为专用功能提供支持,例如备份或报告。
rs.status()
会为副本集返回 majorityVoteCount
。
使用隐藏和延时节点实现专用功能
读取密集型应用程序
副本集旨在实现高可用性和冗余。在大多数情况下,从节点在与主节点在相似的载荷下运行。您不应将读取操作定向到从节点。
如果应用程序的读取量很大,可以考虑使用 Cluster-to-Cluster Sync 将数据复制到其他集群进行读取。
有关从节点读取模式的更多信息,请参阅:secondary
和 secondaryPreferred
。
在产生需求之前增加容量
副本集的现有节点必须有空闲容量来支持添加新节点。请务必在当前需求使副本集容量达到饱和之前添加新节点。
按地理位置分布节点
为了在数据中心发生故障时保护您的数据,请在备用数据中心保留至少一个节点。如果可能,使用奇数个数据中心,并选择一种节点分布方式,以最大限度地保证即使丢失一个数据中心,剩余的副本集节点也能形成多数,或至少提供一份您数据的副本。
注意
将副本集成员分布在两个数据中心比分布在一个数据中心更有优势。分布在两个数据中心时,
如果其中一个数据中心发生故障,数据仍可供读取,分布在单个数据中心则无法实现此功能。
如果具有少数成员的数据中心出现故障,副本集仍然可以支持写入操作和读取操作。
但是,如果具有大多数成员的数据中心出现故障,副本集将变为只读。
如有可能,请将成员分布在至少三个数据中心。对于配置服务器副本集 (CSRS),最佳实践是分布在三个数据中心(也可根据成员数量来增加数据中心数量)。如果使用第三个数据中心成本过高,一种可行的分布方法是在两个数据中心均匀分配数据承载成员,并将剩余成员存储在云中(如果公司政策允许)。
为了确保主数据中心中的成员在备用数据中心中的成员之前被选为主节点,请将备用数据中心中成员的members[n].priority
设置为低于主数据中心中成员的相应值。
请参阅分布在两个或多个数据中心的副本集,了解详情
使用标签集定向操作
使用副本集标签集将读取操作定向到特定成员,或自定义写关注以请求特定成员的确认。
另请参阅:
使用日志防范电源故障
MongoDB 默认启用日志功能。日志功能可以防止服务中断(例如电源故障和意外重启)导致数据丢失。
主机名
重要
要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。
在水平分割网络配置下,请使用主机名而非 IP 地址来配置集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证,因而不会启动。
副本集命名
如果您的应用程序连接到多个副本集,则每个副本集的名称必须不同。有些驱动程序会按副本集名称对副本集连接进行分组。
部署模式
以下文档介绍了常见的副本集部署模式。其他模式是否存在且有效取决于应用程序的需求。如有需要,请在您自己的部署中结合使用每种架构的特性:
- 三节点副本集
- 三节点副本集提供了一个副本集的最小推荐架构。
- 跨两个或多个数据中心分布的副本集
- 地理上分布的副本集包括位于多个地理位置的节点,以应对特定设施的故障,例如断电。