隐藏的副本集成员
隐藏节点维护主节点数据集的副本,但对客户端应用程序不可见。 隐藏节点适用于使用模式与副本集其他节点不同的工作负载。 隐藏节点必须始终是优先级0节点,因此无法成为主节点 (primary node in the replica set)。 db.hello()
方法不显示隐藏成员。 但是,隐藏成员可以在选举中投票。
在以下五个成员的副本集中,所有四个辅助成员都有主成员数据集的副本,但其中一个辅助成员是隐藏的。
行为
读取操作
客户端不会向隐藏成员分发具有相应读取偏好的读取数据。因此,除基本复制外,这些成员不会接收任何流量。将隐藏成员用于专门任务,如报告和备份。
重要
如果您的副本集包含延迟成员,请确保延迟成员处于隐藏状态并且无投票权。
隐藏延迟的副本集节点可以防止应用程序在没有直接连接到该节点的情况下查看和查询延迟数据。使延迟的副本集节点不投票意味着它们不会计入确认具有写关注 "majority"
的写入操作。
如果不隐藏延迟节点,并且一个或多个节点变得不可用,则副本集必须等待延迟节点并且提交点会延迟。延迟提交点可能会导致性能问题。
例如,考虑主节点-从节点-延迟的副本集配置,其中延迟的从节点延迟 10 分钟进行投票。
在一个非延迟从节点不可用的情况下,主节点-延迟节点的降级配置必须等待至少 10 分钟,才能确认使用 "majority"
的写入操作。多数提交点将需要更长的时间才能推进,从而导致具有从节点和仲裁节点的主节点 (PSA) 副本集出现类似缓存压力的性能问题。
有关多数提交点的更多信息,请参阅因果一致性和读写关注。有关解决性能问题的其他详细信息,请参阅副本集维护教程。
在分片集群中,mongos
不会与隐藏节点进行交互。
投票
隐藏节点可能 会在副本集选举中投票。如果您停止了一名有投票权的隐藏节点的投票,请确保该集合拥有活跃多数成员,否则主节点将下台。
出于备份目的,
db.fsyncLock()
确保数据文件可以安全地使用cp
、scp
或tar
等低级备份实用工具进行复制。开始使用复制文件的mongod
包含用户写入的数据,这些数据与锁定的mongod
上的用户写入的数据无法区分。锁定
mongod
的数据文件可能会因日志同步或WiredTiger快照等操作而发生变化。 虽然这对逻辑数据(例如 客户端访问的数据),但某些备份实用程序可能会检测到这些更改并发出警告,或者失败并显示错误。 有关MongoDB的更多信息 - 推荐的备份实用程序和过程,请参阅自管理部署的备份方法。
写关注
隐藏副本集成员可以确认 w: <number>
发出的写操作。但是,对于 w : "majority"
发出的写操作,隐藏成员还必须是投票成员(即 members[n].votes
大于 0
),才能确认 "majority"
写操作。无投票权的副本集成员(即 members[n].votes
是 0
)无法参与确认具有 majority
写关注的写操作。
深入阅读
有关备份MongoDB数据库的更多信息,请参阅自管理部署的备份方法。 要配置隐藏节点,请参阅配置隐藏的自管理副本集节点。