0

地理的に冗長な 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

しかし、障害が発生した場合に可用性が低下するため、良い解決策ではないと思います。

4

1 に答える 1