从mongodb副本集中的读取中排除节点

时间:2013-06-30 17:36:49

标签: mongodb replication

我正在寻找mongodb replicaset的自定义配置。

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

我想要的是让导入过程只在本地节点和N个生产节点上读写,以避免查询该单个节点

有关于此的任何建议吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

doc建议使用hiddendelayed辅助功能来执行专用功能。