隐藏成员维护主节点数据集的副本,但对客户端应用程序不可见。隐藏成员适用于与副本集中的其他成员具有不同使用模式的工作负载。隐藏成员必须始终是优先级为 0 的成员,因此不能成为主节点。db.hello() 方法不会显示隐藏成员。不过,隐藏成员在选举中可以投票。
在以下五个成员的副本集中,所有四个辅助成员都有主成员数据集的副本,但其中一个辅助成员是隐藏的。
行为
读取操作
如果直接连接到节点,则只能从隐藏节点中读取。 如果连接到集群而不直接连接到隐藏节点,则无法在隐藏节点上运行查询。 因此,这些成员除了基本复制之外不会接收任何流量。 将隐藏成员用于专门任务,例如报告和备份。
重要
如果您的副本集包含延迟成员,请确保延迟成员处于隐藏状态并且无投票权。
隐藏延迟的副本集节点可以防止应用程序在没有直接连接到该节点的情况下查看和查询延迟数据。使延迟的副本集节点不投票意味着它们不会计入确认具有写关注 "majority" 的写入操作。
如果不隐藏延迟节点,并且一个或多个节点变得不可用,则副本集必须等待延迟节点并且提交点会延迟。延迟提交点可能会导致性能问题。
例如,考虑主节点-从节点-延迟的副本集配置,其中延迟的从节点延迟 10 分钟进行投票。
在一个非延迟从节点(secondary node from replica set)不可用的情况下,延迟主节点的降级配置必须等待至少 10 分钟才能使用 "majority" 确认写入操作。多数提交点需要更长的时间才能推进,从而导致缓存压力,类似于具有从节点和仲裁节点 (PSA)副本集的主节点的性能问题。
有关多数提交点的更多信息,请参阅因果一致性和读写关注。有关解决性能问题的其他详细信息,请参阅副本集维护教程。
在分片的集群中,您无法通过mongos访问权限隐藏节点。直接连接到这些节点读取数据可能会导致数据不一致或丢失。相反,要实现工作负载隔离性,请使用基于标签的读取偏好。
投票
隐藏节点可能 会在副本集选举中投票。如果您停止了一名有投票权的隐藏节点的投票,请确保该集合拥有活跃多数成员,否则主节点将下台。
出于备份目的,
db.fsyncLock()ensures that the data files are safe to copy using low-level backup utilities such ascp,scp, ortar. Amongodstarted using the copied files contains user-written data that is indistinguishable from the user-written data on the lockedmongod. The data files of a lockedmongodmay change due to operations such as journaling syncs or WiredTiger snapshots. While this has no effect on the logical data (e.g. data accessed by clients), some backup utilities may detect these changes and emit warnings or fail with errors. For more information on MongoDB- recommended backup utilities and procedures, see Backup Methods for a Self-Managed Deployment.
写关注
隐藏副本集成员可以确认 w: <number> 发出的写操作。但是,对于 w : "majority" 发出的写操作,隐藏成员还必须是投票成员(即 members[n].votes 大于 0),才能确认 "majority" 写操作。无投票权的副本集成员(即 members[n].votes 是 0)无法参与确认具有 majority 写关注的写操作。
深入阅读
有关备份MongoDB数据库的更多信息,请参阅自管理部署的备份方法。 要配置隐藏节点,请参阅配置隐藏的自管理副本集节点。