2015-02-05 95 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

回答