【问题标题】:Excluding a node from reads in mongodb replica set从 mongodb 副本集中的读取中排除节点
【发布时间】:2013-06-30 17:36:49
【问题描述】:

我正在寻找 mongodb 副本集的自定义配置。

我有 N 个生产节点,我应该在其中执行读取操作。 我有一个节点,其中有一个导入过程,该过程会产生大量读取和写入。

我希望导入过程只在本地节点和 N 个生产节点上读写,以避免查询单个节点

对此有何建议?

谢谢

【问题讨论】:

  • 在一个副本集中只能有一个主副本。因此写入只能转到当时恰好是主节点的副本节点。你能澄清一下“只在本地节点上读写”是什么意思吗?
  • 嗨,Asya,我只是错过了拥有一个主节点的意义。是的,这就是解决方案。使用 priority=0 的辅助节点进行生产。无论如何,本地节点是指运行进程和 mongodb 的同一台心理机器

标签: mongodb replication


【解决方案1】:

首先,请注意,写入总是转到副本集主副本。您可以分离读取流量,但任何写入都必须转到主节点。

您可以按照@efan 的建议将该节点标记为隐藏。在这种情况下,任何使用副本集语义连接的应用程序都不会使用该节点。要从隐藏节点读取导入过程,您必须直接连接到该节点。但是那个客户端不能写,因为它没有连接到主节点。因此,您必须创建第二个连接到副本集的客户端对象,并将一个用于读取,另一个用于写入。

我认为更好的解决方案是使用标记的阅读偏好。给导入节点一个标签,如“function”:“import”,其他节点一个标签,如“function”:“normal”。然后让您的生产节点指定“function”:“normal”的标记读取首选项,并且您的导入作业指定“function”:“import”的标记读取首选项。这将分离读取流量。

请注意,标记读取偏好是一项相当新的功能,因此您可能需要升级您的客户端驱动程序或您的 mongodb 服务器,或者两者都升级,如果它们是旧的。

http://docs.mongodb.org/manual/core/read-preference/#replica-set-read-preference-tag-sets

【讨论】:

    【解决方案2】:

    这个doc 建议使用hiddendelayed 辅助函数来实现专用功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多