我有3个成员mongo副本 - 设置在2个不同的位置(通过VPN连接)。 这是配置:
使用此conf,master mongo实例将始终位于数据中心A上(因为mongo slave 2具有0优先级)。
我有一个在数据中心B上运行的java Web应用程序。当我连接时,我给mongo驱动程序提供3个mongo实例的IP(如果有任何失败,请务必连接到一个实例)。
我想确保在dataceneter B内部运行的java应用程序使用(对于非一致性读取操作)优先级slave2实例(因为它们位于同一数据中心)而不是任何其他2(只要slave2已启动并运行。)
如果应用程序(在数据中心B中)在slave2启动并运行时使用master或slave1进行非一致性读取操作,则会浪费资源,带宽和金钱。
如何确保数据中心B java应用程序更喜欢slave2?
答案 0 :(得分:1)
使用“读取首选项”有两个选项:
使用nearest。这将使您的应用服务器到达最近的组中的计算机(壁橱成员的15毫秒ping距离)。但是,如果数据中心A上的计算机位于最近的组内,则这些计算机也可用于读取。司机不时重新计算最近的组。
将tag set与最近/次要/次要首选项一起添加。为了更好地理解read this short tutorial。您可以为数据中心B成员设置“dc”标记,并调整应用程序(java)驱动程序以使用此标记进行相应的读取。
评论:如果应用服务器/应用是您副本集的主要客户端,那么最好在数据中心B上有两个成员。