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
但我不感覺是一個很好的解決方案,因爲在出現故障的情況下可用性會受損。
嘗試設置讀取偏好,而不是最近的次要的。次要的會隨機挑選(很好,很多),而最近會根據測試的ping時間選擇。 – wdberkeley 2015-02-09 22:42:46