Elasticsearchシリーズ(九)ElasticSearch脳裂問題
1964 ワード
テキストリンク:https://www.jianshu.com/p/2ed01f0eea9c
原文アドレス:ES脳裂問題
概要:
通常のesクラスタには1つのプライマリノードしかありません.プライマリノードはクラスタ全体を管理し、クラスタのすべてのノードは同じノードをプライマリノードとして選択するので、そのノードにアクセスしてもクラスタのステータス情報を表示できます.脳裂問題の出現は,ノードから選択主ノードに分岐することにより,1つのクラスタに複数の主ノードが出現し,クラスタを分裂させ,クラスタを異常状態にするためである.
理由:
1:ネットワークの理由
2:ノード負荷
3:メモリの回収
したがって,イントラネット負荷の可能性が高く,イントラネットネットワークの可能性が高い.
ES(Elastic Search)の自発的な選挙メカニズムを見てみましょう.
Elasticsearchクラスタが構築されると、masterが選出され、他はslaveノードになります.ただし、具体的な操作では、各ノードに書き込みと読み取りの操作が提供されます.つまり、どのノードに書き込みを行っても、このデータはクラスタ上のすべてのノードに割り当てられます.
ここであるノードが削除された場合、slaveノードが削除された場合、まず関心を持って、データが失われるのではないでしょうか.いいえ.replicateをオンにすると、このデータは他のマシンでバックアップされているに違いありません.他のノードのバックアップスライスは、このスライスデータのプライマリスライスに自動的に昇格します.ここで注意したいのは、ここにしばらくyellow状態の時間があることです.
メインノードが切れたらどうしますか?ノードからプライマリノードと接続できないことに気づいた場合、彼らは自分でノードのプライマリノードを選択することにします.しかし、ここには脳裂の問題があり、5台の機械があると仮定し、3台は1つの機械室にあり、2台は別の機械室にあり、2つの機械室の間の連絡が切れた後、各機械室のノードは自分で集まり、1つのメインノードを推挙する.この時点で2つのプライマリノードが存在し、マシンルーム間の連絡が回復すると、データの競合が発生します.
予防策:
1:ロールの分離
メインノード: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
原文アドレス: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。