どのような脳披裂?飼育係は、どのように解決するのですか?

スプリットブレインとは何ですか

脳分割(スプリットブレイン)は、もともと「頭脳」である「スプリットブレイン」が、二つ以上の「頭脳」に分割され、我々はすべての人がより多くの頭脳を持っている場合ことを知っており、互いに独立し、その後、それは、「コントロールを失う。」、「踊り」に体を起こします

クラスタ内で、このようなマスターノードとして、スプリットブレインは、一般的なElasticSearch、飼育係のクラスタとして、クラスタ環境で発生し、これらのクラスタは、統合環境機能を持って、彼らは脳を持っているということですElasticSearchで、飼育係のクラスタノードは、リーダーを持っています。

この記事では、スプリットブレインが問題を解決した場合、スプリットブレイン問題飼育係をご紹介だけでなく、することに焦点を当てています。

飼育係クラスタスプリットブレインのシナリオ

クラスタのために、我々は2つの部屋で展開構成​​zkServer 6のクラスタは、存在するようになりました、クラスタ、通常、マルチルーム展開の可用性を向上させたいです。

image.png

休憩後のエンジンルームとの間のネットワークので、もし通常の状況下では、このクラスタは、一つだけのリーダーになります2つの部屋でzkServerまたは相互に通信する場合は、することができますより多くのメカニズムの半分以上を考慮せずにされ、その後、各部屋のインテリアがあるだろう私たちは、リーダーを選出します。

image.png

これは、元の1つのクラスタに相当し、2つのクラスタに分割され、スプリットブレインである二つの「頭脳」、ありました。

そして、この場合には、我々はまた、参照、今のサービスを提供し、同時に2つのクラスタになっ統一外部のサービスプロバイダのクラスタ、になるはずだったが、しばらくした後、突然Unicom社のネットワークが壊れている場合この時点で、両方のちょうど2つのクラスタは、サービスを提供し、どのようにデータをマージするために、そしてので、どのようにデータ衝突の問題を解決するために、問題があるでしょう。

実際に飼育係がクラスタスプリットブレインの問題が発生しないで、その理由はただそれ以上のメカニズムの半分以上はありませんので、ジャストスプリットブレインシナリオの説明では、より多くのメカニズムの半分以上のための前提条件が考慮されていません。

半分以上のメカニズム

リーダーの選挙の過程で。zkServerは票の半分以上を獲得した場合は、このzkServerはリーダーになることができます。

ソースは、メカニズムの半分は実際には非常に簡単であるより多くを達成するために:

public class QuorumMaj implements QuorumVerifier {
    private static final Logger LOG = LoggerFactory.getLogger(QuorumMaj.class);
    
    int half;
    
    // n表示集群中zkServer的个数(准确的说是参与者的个数,参与者不包括观察者节点)
    public QuorumMaj(int n){
        this.half = n/2;
    }

    // 验证是否符合过半机制
    public boolean containsQuorum(Set<Long> set){
        // half是在构造方法里赋值的
        // set.size()表示某台zkServer获得的票数
        return (set.size() > half);
    }
    
}
复制代码

我々は慎重に、上記の方法では、コメントを見て、コアコードは、次の2行です。

this.half = n/2;
return (set.size() > half);
复制代码

ここでは簡単な例です:あなたは今、クラスタ、半分= = 2 5/2を5 zkServerを持っている場合、それは指導者の選挙のプロセスは、少なくとも3 zkServerが同じzkServerに投票している必要があり、半分以上が、メカニズムに沿ったものになる、と言うことですリーダーを選出します。

その後、我々が考える問題がある。なぜそれが半分以上の検証メカニズムを持っている必要が選挙のですか?それはすべてのzkServerを待つ必要がないので、同じzkServerに投票したリーダーはとても迅速な聖歌リーダー選挙アルゴリズムと呼ばれる、そう速く、選出されます。

だから、質問を考えて、なぜそれに等しい、より大きい、より大きくない多くのメカニズムの半分以上?

これは、バックのシーンに、このような分割脳の問題として、関係分割脳の問題よりは上に表示されます。

image.png

ネットワークは、部屋の中央を切断すると、部屋1内の3台のサーバが選挙のリーダーになりますが、機構条件のこの時期半分以上がset.sizeある()> 3、それは、少なくとも4つのzkServerがに選出されたと言うことですそれはリーダーの選択の余地がないので、リーダー、同じ部屋2リーダー、クラスタ全体のネットワークが、この場合には、クラスタ全体がリーダーではないでしょう壊れている機械室を選択することはできません。

そして、機構条件の半分以上がset.sizeの場合は()> = 3、その後、エンジンルーム1と部屋2は、リーダーを選出しますので、スプリットブレインがありました。メカニズムの半分以上である理由だから我々は知っているより大きくはなく、以上これは、スプリットブレインを防ぐためです。

我々は唯一の5台のマシンがあると仮定した場合、また、二つの部屋で展開:

image.png

半分のメカニズムはset.size()> 2、つまり、リーダーを選択するには、少なくとも3台のサーバに、部屋1のネットワークの部屋片オフこの時はまだ、リーダーに影響されない場合よりも、この条件ではより多くのまたはリーダー、2部屋は、クラスタ全体が一つだけのリーダーであり、その場合にはリーダー、選出されていません。

そこで、我々はこのように、スプリットブレインの問題を回避リーダー、あることをするだけでなく、クラスタまたはないリーダーのために、より多くのメカニズムの半分以上で、飼育係のドローを締結することができます。

痛みのポイントは技術革新を持っているがありますが、間違いなく痛みのポイント現象を解決するための技術です。あなたが最初の時間は、よりエキサイティングなコンテンツを学びたい場合は、マイクロチャネル公衆番号に注意してください、見て前方に助けてください:1:25

reny125.jpeg

おすすめ

転載: juejin.im/post/5d36c2f25188257f6a209d37