0

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

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

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

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

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

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

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

4

1 回答 1

1

您有两个使用读取首选项的选项:

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

结合最近/次要/次要首选偏好添加标签集。为了更好地理解,请阅读这个简短的教程。您可以为您的数据中心 B 成员设置一个“dc”标签,并调整您的应用程序 (java) 驱动程序以使用此标签进行相应的读取。

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

于 2013-09-30T13:00:18.380 回答