2016-04-01 8 views
2

私はレールベースのアプリケーションでルビーを持っています。mopedをMongoの副レプリカセットのメンバから読み込みを強制する方法

別のデータセンターに置かれ
  1. secondary
  2. delayed by x seconds
  3. priority: 0
  4. :目的であるMongoのレプリカセットメンバから読み出すことです。

DETAILS:私はmongoレプリカセットを使用する実動クラスタを実行しています。

以前は、Mopedが時には高いレイテンシ(他のデータセンターにリモートに存在する)で他のセカンダリから読み込み、セカンダリからは読み込めないことに気付きました。同じ問題を解決するために、リモートのセカンダリに遅延を追加しました。

今、私はモンゴイドを使用する新鮮な分析アプリケーションを用意しました。モンゴイドや他の宝石を使って特殊な二次から読むことができる方法はありますか? つまり、Mongoid/Moped/MongoDBの自動検出機能を無効にする方法はありますか? お勧めします

+1

私も同様の問題に直面しました。私たちはmongoレプリカセットに生産クラスタを持っていました。同じレプリカセットにリンクされたDRクラスタもありました。 DRのメンバーの1人はメンバーが遅れていたが、他のメンバーは同期していた。本番クラスタでは、Ruby/Mongo id configを使用していました。ここでは、特にmongoid.ymlのホスト名について述べました。しかし、数日後、Mopedはmongoid.ymlで言及されていないセカンダリにクエリを送信していたことに気付きました。問題を再現するために、遅延を二次的に導入しました。 Mongoidバージョン4.x –

答えて

1

tag_setsを使用できます。

# Change the default read preference. Valid options for mode are: :secondary, 
# :secondary_preferred, :primary, :primary_preferred, :nearest 
# (default: primary) 
    read: 
     mode: :secondary_preferred 
     tag_sets: 
      - use: web 

あなたはレプリカでtag_setsがis documented hereを設定する設定方法を:Mongoid config documentationあなたがそれを見ることができ、設定を「読み取り」の下で、あなたが明示的に読んでもらいたい二次ノードに割り当てられたtag_setを指定することができて

こちらがお役に立てば幸いです。これは誰もが使い方を知っているわけではない非常に高度で強力な機能です。

関連する問題