地理的に冗長な MongoDB レプリカ セットを構築していますが、問題があります。クエリがデータベースに送信されるたびに、明らかにランダムなレプリカが選択されます。
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
ご覧のとおり、3 番目のレプリカが最も近いため、別のレプリカから読み取るのは時間の無駄ですが、次のようになります。
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
1 つのオプションは、マスターと最も近いレプリカのみを手動で設定することです。
hosts:
- x.x.x.0:p
- x.x.x.2:p
options:
read: :secondary
しかし、障害が発生した場合に可用性が低下するため、良い解決策ではないと思います。