Elasticsearchシリーズ(九)ElasticSearch脳裂問題

1964 ワード

テキストリンク:https://www.jianshu.com/p/2ed01f0eea9c
原文アドレス:ES脳裂問題
概要:
通常のesクラスタには1つのプライマリノードしかありません.プライマリノードはクラスタ全体を管理し、クラスタのすべてのノードは同じノードをプライマリノードとして選択するので、そのノードにアクセスしてもクラスタのステータス情報を表示できます.脳裂問題の出現は,ノードから選択主ノードに分岐することにより,1つのクラスタに複数の主ノードが出現し,クラスタを分裂させ,クラスタを異常状態にするためである.
理由:
1:ネットワークの理由
               ,          。               。

2:ノード負荷
                     ,           es            ,                                  ,         。

3:メモリの回収
                 es      。

したがって,イントラネット負荷の可能性が高く,イントラネットネットワークの可能性が高い.
ES(Elastic Search)の自発的な選挙メカニズムを見てみましょう.
Elasticsearchクラスタが構築されると、masterが選出され、他はslaveノードになります.ただし、具体的な操作では、各ノードに書き込みと読み取りの操作が提供されます.つまり、どのノードに書き込みを行っても、このデータはクラスタ上のすべてのノードに割り当てられます.
ここであるノードが削除された場合、slaveノードが削除された場合、まず関心を持って、データが失われるのではないでしょうか.いいえ.replicateをオンにすると、このデータは他のマシンでバックアップされているに違いありません.他のノードのバックアップスライスは、このスライスデータのプライマリスライスに自動的に昇格します.ここで注意したいのは、ここにしばらくyellow状態の時間があることです.
メインノードが切れたらどうしますか?ノードからプライマリノードと接続できないことに気づいた場合、彼らは自分でノードのプライマリノードを選択することにします.しかし、ここには脳裂の問題があり、5台の機械があると仮定し、3台は1つの機械室にあり、2台は別の機械室にあり、2つの機械室の間の連絡が切れた後、各機械室のノードは自分で集まり、1つのメインノードを推挙する.この時点で2つのプライマリノードが存在し、マシンルーム間の連絡が回復すると、データの競合が発生します.
予防策:
1:ロールの分離
      es     2 3                   ,        。                     , elasticsearch.yml   。

メインノード:node.master =true node.data=false
ノード:node.master =false node.data=ture
discovery.zen.ping.multicast.enabled:false
discovery.zen.ping.unicast.hosts:[“host1”, “host2:port”]
2:パラメータ構成
discovery.zen.ping_timeout:3
                   3               ,           ,             。

   discovery.zen.minimum_master_nodes:1

          ,                                           。

     :es                ,                     ,           4       。

                ,         ,        (n/2)+1,n             node.master=true。