【问题标题】:How to force moped to read from Mongo secondary replica set member running with a delay如何强制轻便摩托车从延迟运行的 Mongo 辅助副本集成员中读取
【发布时间】:2016-04-01 11:06:26
【问题描述】:

我有一个基于 ruby​​ on rails 的应用程序。目标是从一个 mongo 副本集成员中读取:

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

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

以前,有人注意到,有时 Moped 从具有高延迟的其他辅助节点(远程存在于其他数据中心)而不是从所需的辅助节点读取。为了解决同样的问题,我们在远程辅助节点上添加了延迟。

现在我有一个使用 mongoid 的全新分析应用程序。有没有一种方法可以强制使用 mongoid 或任何其他 gem 从 SPECIFIC 二级读取? 即有没有办法覆盖 Mongoid / Moped / MongoDB 中的自动发现功能? 请推荐

【问题讨论】:

  • 我也遇到了类似的问题。我们在 mongo 副本集中有一个生产集群。我们还有一个连接到同一个副本集的 DR 集群。 DR 的成员之一是延迟成员,但其他成员是同步的。在生产集群中,我们使用 Ruby / Mongo id 配置。这里我们特别提到了 mongoid.yml 中的主机名。但几天后,我们注意到 Moped 正在向辅助节点发送查询,这在 mongoid.yml 中没有提到。我们引入了中学的延迟来解决这个问题。 Mongoid 版本 4.x

标签: ruby-on-rails ruby mongodb mongoid moped


【解决方案1】:

您可以使用 tag_sets。 在Mongoid config documentation 中,您可以看到,在“读取”设置下,您可以指定分配给要显式读取的辅助节点的 tag_set:

# 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多