【问题标题】:Mongo java driver : Prefer secondary mongo instance replicaMongo java 驱动程序:首选辅助 mongo 实例副本
【发布时间】:2013-09-30 09:14:00
【问题描述】:

我有 3 个成员 mongo 副本集,分布在 2 个不同的位置(通过 VPN 连接)。 这是配置:

  • 主数据中心 A
  • slave1,优先级 1,数据中心 A
  • slave2,优先级 0,数据中心 B

使用此配置,主 mongo 实例将始终位于数据中心 A(因为 mongo 从属 2 的优先级为 0)。

我有一个在数据中心 B 上运行的 java Web 应用程序。当我连接时,我将 3 个 mongo 实例的 IP 提供给 mongo 驱动程序(如果有任何实例失败,请确保连接到一个实例)。

我想确保在 dataceneter B 中运行的 java 应用程序优先使用 slave2 实例(因为它们位于同一个数据中心)而不是其他 2 个实例(只要slave2 已启动并运行)。

如果应用程序(在数据中心 B 中)在 slave2 启动并运行时使用 master 或 slave1 进行不一致的读取操作,这会浪费资源、带宽,顺便说一下,还会浪费金钱。

如何确保数据中心 B java 应用程序更喜欢 slave2 ?

【问题讨论】:

    标签: mongodb mongodb-java


    【解决方案1】:

    您有两个使用阅读偏好的选项:

    使用 nearest 。这将使您的应用服务器到达最近组中的机器(壁橱成员的 15 毫秒 ping 距离)。但是,如果数据中心 A 上的机器在最近的组内,则这些机器也可以用于读取。司机不时重新计算最近的组。

    添加tag set 以及最近/次要/次要首选首选项。为了更好地理解read this short tutorial。您可以为您的数据中心 B 成员设置一个“dc”标签,并调整您的应用程序 (java) 驱动程序以使用此标签进行相应的读取。

    评论:如果应用服务器/应用程序是你的副本集的主要客户端,当然最好在数据中心B上有两个成员。

    【讨论】:

    • 如果我定义了一个标签集,如果 slave2 失败了怎么办?读取会失败还是会使用 D.C. A 实例,忽略标签?
    • 如果您定义了两个标签集 {dc:A} 和 {dc:B} 并且您的驱动程序配置了第二个标签集,您将无法在 B (从属 2) 节点已关闭。 nearest 没有标签集在这种情况下对你来说更有意义(集只包括一个成员)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多