甲副本集 MongoDB中是一组mongod
提供冗余和高可用性的方法。副本集的成员是:
- 小学。
- 主服务器接收所有写操作。
- 中学。
- 辅助数据库从主数据库复制操作以维护相同的数据集。辅助服务器可能具有用于特殊用途配置文件的其他配置。例如,次级可以是
无表决权或
优先级0。
副本集的最低建议配置是具有三个数据承载成员的三个成员副本集:一个主要成员和两个次要成员。在某些情况下(例如,您有一个主服务器和一个辅助服务器,但由于成本限制,禁止添加另一个辅助服务器),您可以选择包括一个仲裁器。仲裁人参加选举,但不保存数据(即不提供数据冗余)。
一个副本集最多可以有50个成员,但只有7个投票成员。
主要
主节点是副本集中接收写操作的唯一成员。MongoDB在主数据库上应用写操作,然后在主数据库的oplog上记录操作。次要成员复制此日志,并将操作应用于其数据集。
在下面的三成员副本集中,主数据库接受所有写操作。然后,辅助服务器复制操作日志以应用于其数据集。
副本集的所有成员都可以接受读取操作。但是,默认情况下,应用程序将其读取操作定向到主要成员。有关更改默认读取行为的详细信息,请参见读取首选项。
副本集最多可以有一个主副本。
如果当前的主要数据库不可用,则选举确定新的主要数据库。有关更多详细信息,请参见
副本集选择。
次级
辅助数据库保留主数据库数据集的副本。为了复制数据,辅助服务器在异步过程中将主服务器的操作日志中的操作应用于其自己的数据集。一个副本集可以具有一个或多个辅助副本。
以下三成员副本集具有两个辅助成员。辅助服务器复制主服务器的操作日志,并将操作应用于其数据集。
尽管客户端无法将数据写入辅助数据库,但是客户端可以从辅助成员读取数据。有关客户端如何将读取操作定向到副本集的更多信息,请参见读取首选项。
中学可以成为小学。如果当前的主变得不可用,副本集中持有的选举来选择其中次级的成为新的主。
有关更多详细信息,请参见
副本集选择。
您可以为特定目的配置辅助成员。您可以将辅助配置为:
- 防止它成为选举中的主要对象,从而使其可以驻留在辅助数据中心或充当冷备用数据库。请参阅
优先级为0的副本集成员。
- 阻止应用程序从中读取数据,这使它可以运行需要与正常流量隔离的应用程序。请参见
隐藏副本集成员。
- 保留运行中的“历史”快照,以用于从某些错误(例如意外删除的数据库)中恢复。请参阅
延迟副本集成员。
[1] | 从版本4.2(也从版本4.0.6开始可用)开始,副本集的辅助成员现在
记录的oplog条目所花费的时间比慢操作阈值要长。这些缓慢的oplog消息会在组件下的文本中记录为次要日志。这些慢操作日志条目仅取决于慢操作阈值。它们不依赖于日志级别(在系统级别或组件级别),配置级别或运行缓慢的采样率。探查器不会捕获缓慢的操作日志条目。diagnostic log REPL applied
op: <oplog entry> took <num>ms |
仲裁者
在某些情况下(例如您有一个主服务器和一个辅助服务器,但由于成本限制,禁止添加另一个辅助服务器),您可以选择将仲裁器添加到副本集。一个仲裁器不具有数据集的副本,并不能成为主要的。但是,一名仲裁员参加初选的选举。仲裁员具有确切的1
选举票。
在版本3.6中进行了更改:从MongoDB 3.6开始,仲裁者具有priority 0
。将副本集升级到MongoDB 3.6时,如果现有配置具有优先级1
较高的仲裁程序,则MongoDB 3.6会将仲裁程序重新配置为具有优先级0
。
重要
不要在还承载副本集主要成员或次要成员的系统上运行仲裁程序。
要添加仲裁器,请参见将仲裁器添加到副本集。
有关使用仲裁器的注意事项,请参阅副本集仲裁器。