1. ホーム
  2. mongodb

[解決済み] mongodの書き込みに関するデフォルトの懸念はどのバージョンにありますか?

2022-02-14 20:17:09

質問内容

で見つけられませんでした。 mongodb のドキュメント デフォルトの書き込みに関する懸念と、"Acknowledgeed Write" がどのように定義されるかについてです。 これは異なるmongodbのバージョンを通して変更されているようで、以下のように表示されます。 v3.2ドキュメント 例えば

3.2.6 より前のバージョンでは、ジャーナリングが有効な場合、w: "majority" は j: true を意味します。それ以前のバージョンの MongoDB では、w: majority" はジャーナリングを意味しません。

または

バージョン3.0で変更されました。MongoDB 3.0 より前のバージョンでは、w: "majority" はレプリカセットのメンバーの過半数を指します。

または

バージョン 2.6 で変更: マスター/スレーブ展開の場合、MongoDB は w: "majority" を w: 1 と同じものとして扱います。

また、"majority" がすべての投票ノードを指しているのも気になるところです。 v3.2ドキュメント :

書き込み操作がプライマリを含む大多数の投票ノード[1]に伝搬されたことの確認を要求する。

アービターも投票ノードなので、カウントされるということでしょうか。つまり、例えば2つのデータ保持ノードと1つのアービターからなるreplSetがある場合、書き込み懸念 "majority"を持つ書き込み操作は、残りのデータ保持ノードとアービター、つまり過半数に認められたので、1つのデータ保持ノードがダウンしても成功するのですか?

解決方法は?

MongoDBのデフォルトの書き込みに関する懸念は、これまで w:1 2012年のMongoDB 2.2までさかのぼります。

現在の MongoDB のバージョン (バージョン 3.2.6 以降) では、書き込みの懸念を設定するために 3 つの異なる設定があります。

  • w 設定 : 書き込みが成功したと宣言する前に、何台のノードが書き込みを確認する必要があるか。デフォルトは1、つまりプライマリノードからの承認で十分である。
  • j 設定 : 書き込みが認識される前にジャーナルされなければなりませんか?デフォルトは writeConcernMajorityJournalDefault .
  • writeConcernMajorityJournalDefault(ライトコンサーマリティジャーナルデフォルト を指定した場合。 w:majority を設定せずに、書き込みに対する懸念の設定を書き込みます。 j は何ですか? j の値は?デフォルトは true (書き込みは、承認される前に、大多数の投票ノードでジャーナルされるべきです)。

もあります。 wtimeout 設定 で、書き込みが承認されなかったことをクライアントに通知するまでに MongoDB が書き込みの懸念を満たすのをどれだけ待つかを設定します。そうしないと、書き込みが完了するのをずっと待っていることになり、 書き込みが失敗してしまいます。

ここで特別に設定するのは w:majority . これは、書き込みが 投票ノードの大多数 (そして、そのジャーナルにも)レプリカセットで承認されるようにします。これは間違いなく、良いパフォーマンスを提供しつつ、最も安全な設定です。

  • 確認済み書き込みが、障害発生時にロールバックされるのを防ぐことができる。
  • アプリケーションのスループットを調整し、レプリカセットが処理できる速度よりも速い書き込みを送信しないようにします(ハードウェアの制約、ネットワークの状況などによる)。

ご想像の通りです。 投票ノードには、アービターが含まれます。 . したがって、一次・二次・アービターの設定があるレプリカセットでは w:majority というシナリオでは失敗する可能性があります。

  • データを持つノードの1つが何らかの理由でオフラインになる。
  • トポロジーがプライマリ-アービタ-オフラインになったので、レプリカセットは書き込み可能なプライマリでまだオンラインです。
  • で書き込みます。 w:1 は通常通り成功しますが、これらの書き込みはロールバックされる可能性があります(投票データを持つノードの大多数に書き込まれていないため)。
  • アービターがデータを運ばないため w:majority の書き込みは、アービターが投票ノードとしてカウントされるため、失敗します(または、無期限に待機します)。

このような理由から、アービターを使用することは w:majority を使用します。

シャードクラスタのシャードを形成する3ノードのレプリカセットでアービターを使用することも推奨されないことに注意してください。 w:majority . 1つのシャードでデータを持つノードに障害が発生すると、チャンクの移行操作に不利になります。