2015-02-05 70 views
0

我正在构建一个geo冗余的MongoDB副本集,但有一个问题。 每次查询发送到数据库时,显然都会选择一个随机副本。Mongoid首选只读副本

MOPED: x.x.x.0:p COMMAND  database=admin command={:ismaster=>1} runtime: 148.4439ms 
MOPED: x.x.x.1:p COMMAND  database=admin command={:ismaster=>1} runtime: 150.5547ms 
MOPED: x.x.x.2:p COMMAND  database=admin command={:ismaster=>1} runtime: 3.8707ms 
MOPED: x.x.x.3:p COMMAND  database=admin command={:ismaster=>1} runtime: 289.3072ms 

正如你所看到的第三个副本是最近的,所以这将是一次从另一个读取浪费,但是这会发生什么:

MOPED: x.x.x.3:p QUERY  database=d collection=c selector={} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil runtime: 393.3878ms 

所以,问题是可以,我指定首选读取的IP地址,或者只是告诉MOPED连接到最快的读取?

的mongoid.yml文件现在指定所有4个副本:

hosts: 
    - x.x.x.0:p 
    - x.x.x.1:p 
    - x.x.x.2:p 
    - x.x.x.3:p 
    options: 
    read: :secondary 

一种选择是只手动设置仅在主,和最近的副本:

hosts: 
    - x.x.x.0:p 
    - x.x.x.2:p 
    options: 
    read: :secondary 

但我不感觉是一个很好的解决方案,因为在出​​现故障的情况下可用性会受损。

+0

尝试设置读取偏好,而不是最近的次要的。次要的会随机挑选(很好,很多),而最近会根据测试的ping时间选择。 – wdberkeley 2015-02-09 22:42:46

回答