隐藏副本集成员
在本页面
隐藏的成员维护primary's数据集的副本,但对 Client 端应用程序不可见。隐藏的成员非常适合与replica set中的其他成员具有不同使用模式的工作负载。隐藏的成员必须始终为优先级 0 成员,因此 不能成为主要成员 。 db.isMaster()方法不显示隐藏的成员。不过,隐藏成员可以elections投票**。
在下面的五成员副本集中,所有四个辅助成员都具有主节点数据集的副本,但是其中一个辅助成员被隐藏了。
Behavior
Read Operations
Client 不会将具有适当的read preference的读取分发给隐藏的成员。结果,这些成员除了基本复制外没有收到其他流量。使用隐藏的成员执行诸如报告和备份之类的专用任务。 Delayed members应该被隐藏。
在分片群集中,mongos不会与隐藏成员进行交互。
Voting
隐藏成员可以*在副本集选举中投票。如果停止投票的隐藏成员,请确保该集合具有有效多数,否则primary将退出。
为了备份的目的,
-
如果使用 MMAPv1 存储引擎,则可以避免使用db.fsyncLock()和db.fsyncUnlock()操作停止隐藏成员,以刷新所有写入并在备份操作期间锁定mongod实例。
-
db.fsyncLock()确保可以使用
cp
,scp
或tar
等低级备份 Util 安全地复制数据文件。开始使用复制的文件的mongod包含与锁定的mongod上的用户写入数据没有区别的用户写入数据。
由于诸如journaling syncs或WiredTiger snapshots之类的操作,被锁定的mongod的数据文件可能会更改。尽管这对逻辑数据(例如,Client 端访问的数据)没有影响,但某些备份 Util 可能会检测到这些更改并发出警告或失败并出现错误。有关 MongoDB 建议的备份 Util 和过程的更多信息,请参见MongoDB 备份方法。
Write Concern
隐藏的副本集成员可以确认由w: <number>发出的写操作。但是,对于使用w:“多数”进行写操作的写操作,隐藏成员还必须是有表决权的成员(即members[n].votes大于0
)以确认"majority"
的写操作。无表决权的副本集成员(即members[n].votes是0
)不能有助于确认具有majority
写关注的写操作。
Further Reading
有关备份 MongoDB 数据库的更多信息,请参阅MongoDB 备份方法。要配置隐藏成员,请参见配置隐藏副本集成员。