アービターなしでMongoDBレプリケーションをセットアップすると仮定します プライマリが使用できない場合、レプリカセットはセカンダリをプライマリに選択します。 だから、暗黙的アービター。レプリカがプライマリーを自動的に選出するため。
では、なぜ専用のアービターノードが必要なのでしょうか。ありがとう!
私は スプレッドシートを作成しました レプリカセット内のアービターノードの効果をよりよく説明するため。
それは基本的にこれらのポイントに帰着します:
選挙は詳細に説明されています ここ 。その文書では、RSは50のメンバー(偶数)と7つの投票メンバーを持つことができると状態と述べています。それがどのように機能するか説明しないので、私は「状態」を強調します。私には、片方が4メンバー(すべて投票)でもう片方が46メンバー(3投票)の分割が発生した場合、46がプライマリーを選出し、4がリードになるようにしたいようです。クラスタのみ。しかし、それこそが「制限付き投票」が防ぐものです。その状況では、実際には、読み取り専用のプライマリと46メンバーのクラスターを持つ4メンバーのクラスターがあります。それが理にかなっていることを説明することは、この質問の範囲外であり、私の知識を超えています。
これは本当にCAPの定理に帰着し、パーティションのどちらかの側に同じ数のサーバーがある場合、データベースはCAP(整合性、可用性、およびパーティションの許容範囲)を維持できないと述べられています。アービターは、一方の側に「不均衡」または過半数を作成するように特別に設計されているため、この場合はプライマリを選択できます。
どちらかの側で偶数のノードを取得した場合、MongoDBはプライマリを選択せず、セットは書き込みを受け入れません。
どちらの側でも、たとえば、片側に2つ、もう一方に2つという意味です。私の英語はそこで簡単に理解できませんでした。
つまり、私が実際に意味するのは両面です。
ウィキペディアはCAPを説明するためのかなり良い例を提示します: http://en.wikipedia.org/wiki/CAP_theorem
以下の理由により、レプリケーションにアービターが必要です。
お役に立てれば !!!
アービターはオプションのメカニズムであり、レプリカセットにデプロイされた偶数のmongodsがある場合に投票を成功させることができます。アービターは軽量であり、専用のmongoレプリカではないサーバーにデプロイすることを意図しています。つまり、サーバーの主な役割は、redisサーバーのような他のタスクです。それらは軽いので、システムのリソースに(著しく)干渉しません。
ドキュメントから:
アービターはデータセットのコピーを持たず、プライマリになることはできません。レプリカセットには、予備選挙の選挙で投票を追加する調停者がいる場合があります。アービターにより、データをレプリケートするメンバーのオーバーヘッドなしで、レプリカセットに不均一な数のメンバーを含めることができます。