隐藏副本集成员

在本页面

隐藏的成员维护primary's数据集的副本,但对 Client 端应用程序不可见。隐藏的成员非常适合与replica set中的其他成员具有不同使用模式的工作负载。隐藏的成员必须始终为优先级 0 成员,因此 不能成为主要成员db.isMaster()方法不显示隐藏的成员。不过,隐藏成员可以elections投票**。

在下面的五成员副本集中,所有四个辅助成员都具有主节点数据集的副本,但是其中一个辅助成员被隐藏了。

具有优先级为 0 的隐藏成员的 5 个成员副本集的图。

Behavior

Read Operations

Client 不会将具有适当的read preference的读取分发给隐藏的成员。结果,这些成员除了基本复制外没有收到其他流量。使用隐藏的成员执行诸如报告和备份之类的专用任务。 Delayed members应该被隐藏。

在分片群集中,mongos不会与隐藏成员进行交互。

Voting

隐藏成员可以*在副本集选举中投票。如果停止投票的隐藏成员,请确保该集合具有有效多数,否则primary将退出。

为了备份的目的,

  • 如果使用 MMAPv1 存储引擎,则可以避免使用db.fsyncLock()db.fsyncUnlock()操作停止隐藏成员,以刷新所有写入并在备份操作期间锁定mongod实例。

  • db.fsyncLock()确保可以使用cpscptar等低级备份 Util 安全地复制数据文件。开始使用复制的文件的mongod包含与锁定的mongod上的用户写入数据没有区别的用户写入数据。

由于诸如journaling syncsWiredTiger snapshots之类的操作,被锁定的mongod的数据文件可能会更改。尽管这对逻辑数据(例如,Client 端访问的数据)没有影响,但某些备份 Util 可能会检测到这些更改并发出警告或失败并出现错误。有关 MongoDB 建议的备份 Util 和过程的更多信息,请参见MongoDB 备份方法

Write Concern

隐藏的副本集成员可以确认由w: <number>发出的写操作。但是,对于使用w:“多数”进行写操作的写操作,隐藏成员还必须是有表决权的成员(即members[n].votes大于0)以确认"majority"的写操作。无表决权的副本集成员(即members[n].votes0)不能有助于确认具有majority写关注的写操作。

Further Reading

有关备份 MongoDB 数据库的更多信息,请参阅MongoDB 备份方法。要配置隐藏成员,请参见配置隐藏副本集成员