我正在寻找 mongodb 副本集的自定义配置。
我有 N 个生产节点,我应该在其中执行读取。我有一个节点,其中有一个导入过程,该过程会产生大量读取和写入。
我想要的是只在本地节点和 N 个生产节点上读取和写入导入过程,以避免查询该单个节点
对此有何建议?
谢谢
我正在寻找 mongodb 副本集的自定义配置。
我有 N 个生产节点,我应该在其中执行读取。我有一个节点,其中有一个导入过程,该过程会产生大量读取和写入。
我想要的是只在本地节点和 N 个生产节点上读取和写入导入过程,以避免查询该单个节点
对此有何建议?
谢谢
首先,请注意,写入总是转到副本集主副本。您可以分离读取流量,但任何写入都必须转到主服务器。
您可以按照@efan 的建议将该节点标记为隐藏。在这种情况下,任何使用副本集语义连接的应用程序都不会使用该节点。要从隐藏节点读取导入过程,您必须直接连接到该节点。但是那个客户端不能写,因为它没有连接到主节点。因此,您必须创建第二个连接到副本集的客户端对象,并将一个用于读取,另一个用于写入。
我认为更好的解决方案是使用标记的阅读偏好。给导入节点一个标签,如“function”:“import”,其他节点一个标签,如“function”:“normal”。然后让您的生产节点指定“function”:“normal”的标记读取首选项,并且您的导入作业指定“function”:“import”的标记读取首选项。这将分离读取流量。
请注意,标记的读取首选项是一个相当新的功能,因此您可能必须升级您的客户端驱动程序或您的 mongodb 服务器,或者两者都升级,如果它们是旧的。
http://docs.mongodb.org/manual/core/read-preference/#replica-set-read-preference-tag-sets