“secondaryPreferred”在这种情况下如何工作?

时间:2014-02-20 10:04:33

标签: mongodb replicaset

假设有三个节点的副本集:1个主要P和2个次要S1S2。还假设PS1位于另一个数据中心DC1中的S2DC2

假设客户位于DC1(即与PS1位于同一数据中心内)且S1已关闭。客户端查询将在何处进行? PS2

2 个答案:

答案 0 :(得分:4)

secondaryPreferred会选择辅助,即使距离较远(我假设S2的优先级较低,因为它可能不应该是主要的,因此在您的方案中{{1}是次要的,它在延迟意义上更远了。)

您可以使用tag sets代替data-center awareness / geographically distributed membersnearest read-preference,这将选择更接近的服务器,无论它是主要服务器还是辅助服务器。

答案 1 :(得分:1)

来自MongoDB documentation

secondaryPreferred

  

在大多数情况下,操作从辅助成员读取,但在集合由单个主要(而不是其他成员)组成的情况下,读取操作将使用集合的主要成员。

     

当读取首选项包含标记集时,客户端会尝试查找与指定标记集匹配的辅助成员,并将读取指向最近的组中的随机辅助。如果没有辅助节点具有匹配的标签,则客户端会忽略标签并从主节点读取。

     

使用secondaryPreferred模式的读取操作可能会返回过时数据。


我的猜测是,您将从S2获取数据,因为这是您要求的首选后缀。 secondary选项完全排除了主要内容,但secondaryPreferred允许在没有附加内容的情况下使用主数据库。

虽然通过在同一数据中心使用服务器的标签,但您可以从主服务器读取驱动程序,即使辅助服务器存在于副本集的其余部分中也是如此。