2016-04-01 35 views
2

我在基于rails的应用程序上有一个ruby。目标是从蒙戈副本集成员即读:如何强制脚踏车从延迟运行的Mongo辅助副本集成员读取

  1. secondary
  2. delayed by x seconds
  3. priority: 0
  4. 放置在一个单独的数据中心。

DETAILS:我有一个使用mongo副本集的正在运行的生产群集。

以前,人们注意到,有时候轻便摩托车会以高延迟读取其他数据中心(远程存在于其他数据中心)的辅助数据,而不是从辅助期望读取。为了解决同样的问题,我们在远程辅助服务器上添加了一个延迟。

现在我有一个新的分析应用程序,它使用了mongoid。有没有一种方法可以强制使用mongoid或任何其他宝石从特定的辅助读取? 即有没有办法来覆盖Mongoid/Moped/MongoDB中的自动发现功能? 请建议

+1

我也遇到过类似的问题。我们在mongo replicaset中有一个生产集群。我们还有一个DR群集链接到同一个复制数据集。 DR的成员之一是延迟成员,但其他成员是同步的。在生产群集中,我们使用Ruby/Mongo id config。这里我们特别提到了mongoid.yml中的主机名。但过了一段时间,我们注意到Moped正在向mongoid.yml中没有提到的辅助发送查询。我们介绍了中学的延迟情况以阐明问题。 Mongoid版本4.x –

回答

1

您可以使用tag_sets。

# Change the default read preference. Valid options for mode are: :secondary, 
# :secondary_preferred, :primary, :primary_preferred, :nearest 
# (default: primary) 
    read: 
     mode: :secondary_preferred 
     tag_sets: 
      - use: web 

配置的方式在副本tag_sets设置is documented here: 在Mongoid config documentation你可以看到,根据“读”的设置,您可以指定分配给要辅助节点tag_set明确读取

我希望这可以帮助你。这是一个非常先进和强大的功能,不是每个人都知道如何使用。