web-dev-qa-db-ja.com

MongoDBレプリケーションでの自動クライアントフェイルオーバー中に読み取り/書き込み操作はどうなりますか

MongoDBの3ノードレプリケーションセット構成をセットアップしました。プライマリスイッチオーバー中に読み取り/書き込み操作がどうなるか知りたいです。より明確にするために、クライアントからプライマリノードに発行された読み取り/書き込み操作はほとんどありませんでした。プライマリの切り替えも開始されました。

  1. これらの読み取り/書き込み操作はどうなりますか?
  2. MongoDBは、プライマリがステップダウンして選挙プロセスが開始される前に、これらのリクエストが確実に処理されるようにしますか?
  3. 選出プロセス中に、クライアントからの新しい読み取り/書き込み要求はどうなりますか?
  4. MongoDBのネイティブnodejsドライバーは自動クライアントフェイルオーバーを処理しますか?また、切り替えプロセス中に新しい読み取り/書き込み要求をどのように処理しますか?
1
Manish Prasad

a)明示的に失敗します。それに対処するのはあなたの責任です。私がしがちなのは、例外/エラーが通信障害のために操作が失敗したことを示している場合、短い猶予期間後に操作を再試行することです。

b)暗黙的に。ステップダウンするコマンドが発行された後、書き込み操作が受け入れられない10秒の猶予期間があります。その間、プライマリは基本的にセカンダリが追いつくのを待ちます(必要かどうかは関係ありません)。読み取り操作の場合:猶予期間内に終了した場合は、すべて問題ありません。そうしないと、サーバーによって接続が閉じられ、空きクライアント側でエラーが発生します。

c)ドライバーは、レプリカセットに接続されていることを認識しています。プライマリがステップダウンすると、ドライバーは気づきます。プライマリなし=書き込み操作なし。プライマリがないときに発行された書き込み操作は、対応するメッセージで失敗します。読み取りごとに、それはあなたの 読み取り設定 に依存します。優先度がprimaryの読み取りは、プライマリがない場合は明らかに失敗し、他のすべての読み取り設定は成功します。私は通常、デフォルトの読み取り設定primaryでリクエストを発行し、プライマリがないためにリクエストが失敗した場合、読み取り設定secondaryPreferredでクエリを再発行します(まれに、プライマリが元のエラーの処理中に最初のセカンダリが失敗しました)。

d)私はノードの専門家ではありませんが、ノードドライバーはIncによって保守されているため、レプリカセットを認識し、上記の標準に準拠していると見なすのが安全です。

2