はじめにMongoDBの選挙

この記事では、選挙を開始する時期についてはMongoDBを説明しますか?どのように選挙?だけでなく、いくつかのパラメータを紹介します。

レプリケーションセットの初期化(開始)またはプライマリ障害が選挙(総選挙)をトリガーする場合は、このプロセスは手動の介入を必要としません。

    選挙プロセスは、いくつかの時間を消費し、クラスタが書き込み操作を受け取る(旧プライマリがまだ生きているが、「ネットワークパーティション」問題ので、それは他のセカンダリが通信することはできません原因も)(古いプライマリを含む)、すべてのメンバーはありません、その間クラスタがメンバーの「過半数が」アクティブされていない場合、読み取り専用の状態にあり、十分なメンバーが参加するまで、セット全体が読み取り専用で、書き込み要求を受信することはできませんコピーし、主を選出することができません。

     。1 ハートビートすべてのメンバー間のレプリケーションは、返事が10秒以内に受信されない場合、このメンバーはとしてマークされ、2秒ごとにハートビートを送信すると、各ハートビート接続確立を設定されている「利用できません。」

    2 優先順位が比較各メンバーが再値への権利を持っている、デフォルトでは1を持っている、メンバーが最高の重量を投票する傾向があります。上述したように、優先順位は、メンバー0が選出されることができず、予備選挙を開始することはできませんで、セカンダリは限り最高量の一級を保持するか、最新のデータをoplogする現在の権利は、その高い重量よりも重くないよう、クラスタが選挙をトリガしないとき。メンバーは体重高い重みがクラスタに追加した場合は、まず、現在のプライマリをキャッチアップし、その後の選挙の再立ち上げラウンド、そしてこの主の選出メンバーます。

    3 OPTIME oplog部材から印加された電流のタイムスタンプは、(プライマリ、両方の動作oplogの各レコードにこのタイムスタンプを生成した)最後の主要動作を有し、一次部材になる第1の条件は全てであります効果的なメンバーは、それが最高のOPTIMEを保持しています。

    4 接続メンバーは、主がために、それは実際には、それ自体がプライマリとして選出することができない、メンバーの十分な数の接続を確立していない場合は、の「大多数の」他のメンバーとの接続を確立する必要があり、誰になりますため我々は、各部材の異なるセットを与えることができるのでpriamry、大部分は、「投票の合計数」よりもむしろメンバーの数と呼ばれる「票」。例えば、3人のメンバーがあり、各メンバーが一票(投票)を保持する限り、(少なくとも3〜2の大部分が)、選挙に互いに通信することができる少なくとも2人のメンバーが存在するように、2つのメンバがあるがあれば利用可能でありません、メンバーの残りの部分が主要でない場合選挙は、それはまた、ステップダウンと二、セット全体は読み取り専用のコピーになります。

    5 )ネットワークパーティション(ネットワークパーティションクラスタ・メンバの一部が領域に分割し、他のメンバーと通信することができない。選挙は「大多数」に基づいているためには、(メンバーが大多数との接続を確立する必要があり、投票の過半数であります)、これと、ネットワークパーティションではなく、大部分は(形成しない選挙)。この問題を回避するために、我々は、クラスタの複数のメンバーが複数の物理ネットワークセグメント全体に展開されていることをお勧めします。

 

選挙トリガタイミング

1)初期設定で設定複製なしプライマリ

失う2)二次およびプライマリ接続、今回はそれが選挙を開始します。それ以外の場合は選挙がそうでなければ、通常のメンバー(拒否権)となります、セカンダリの大多数は、プライマリとの接続を失った場合、選挙が成功裏に行うことができます。

3)一次オフ(ステップダウン)。

それは注意する必要があります。

「優先順位0」は、それが主との接続が失われた場合でも、選挙を開始しません、それだけで他の誰かの選挙「投票」以上にすることができ、「拒否権。」

我々はrs.stepDown()メソッドまたはreplSetStepDown primaryコマンドで無効にすることができ、あるいはそこに参加する二次的に高い優先順位がある、または現在のプライマリがほとんどのメンバーとの接続を確立できない場合、プライマリが閉鎖されるとき、新しいの引き金となる後選挙ホイール。

また、当社は、複製後に設定の構成を変更したが、また、()をrs.reconfigによって選挙をトリガすることができます。主が閉じているとき、それはすべてのクライアント接続を閉じますが、クライアントは書くことができません。

 

選挙のルール:

    各メンバーは、彼らが、デフォルトでは、プライマリメンバーになるプライマリクラスタ最高優先度の選挙を表現する資格になり、優先性を有し、すべての重い重みのメンバーはつまり、1です、彼らは主になるために同じ機会を持っています。あなたが高い主のメンバーになる傾向がある場合は、その値の優先順位を設定することができます。デフォルトでは、各メンバーは、メンバーの選挙の大半がメンバーであれば、それは主になり、投票(投票)を保持し;「非議決権」メンバーの投票は0で、かつ現在のすべてのメンバー投票より大きくならない1 (すなわち、各あるメンバー一票、または投票しません)

 

選挙の拒否権:

    すべてのメンバーが「非投票」を含め、選挙を拒否することができます。我々は、次の例(拒否提案者)に選挙を拒否します。

1)提案は、構成ファイルで宣言されていない現在のメンバーの選挙複製セット()に属していない場合

2)会員データの提案された選挙が古くなっています  

他の公知の部材よりも会員優先度3)が提案選挙

4)もし高いOPTIMEを保持するよりも、現在の予備選挙の提案 

最高の錘部材が最高OPTIMEを保持していない場合、それは最初に最高の二次OPTIMEに従います、そして、最高の優先権を暗示し、主になるためには、最終的に主になります

 

ロールバック

    既に述べたように「ロールバック」に述べた:priamry障害が発生する前に、新しいプライマリの選挙は、その後、新しいpriamryも書き込み要求の一部を受け入れた後、ほとんどのsecondaires、への書き込み操作をコピーすることができない、次に加え、再びときに、古いpriamryを現在priamryが「揃えない」と、クラスタ、その上にいくつかのデータは古いpriamryあなたが新しいpriamryと、それらのデータ「ずれ」ロールバックし、一貫性のあるデータが必要になります、があります。それはより危険な「矛盾したデータ」の状況であるため、通常の状況下で、当社は、「ロールバック」は避けるべきです。これは、ロールバック・データがディレクトリに格納されている「DBPATH」パスをロールバック。

    発生し、プライマリが失敗し、データがセカンダリに複製されていない場合は、この場合には、すなわち、書き込みの書き込み動作は、クライアントに次戻り結果に成功する:デフォルトで、クライアントは、関心が{1 wは}で書きますロールバック。ロールバックを避けるために、クライアントが使用することができます{W:大半}セカンダリーで最も成功したの書き込みの書き込み動作がクライアントに返される結果になります。

 

おすすめ

転載: www.cnblogs.com/gentlemanhai/p/11672225.html