LoginSignup
4
6

More than 3 years have passed since last update.

俺でもわかるElasticsearch(5.0) sprit brainからのザオラル

Last updated at Posted at 2019-06-17

俺です。
Elasticsearch(ES5.0)でsprit brainな状況に遭遇したので遺書を残します。
ES古いとか言わず。

人生もsprit brainです。

ESクラスタが突然の死

  • node1が高負荷になり9200portへの接続ができなくなってしまったのでEC2をstop/startした
  • node2がmasterになるも高負荷のため9200portへ接続受け付けない状態になった
  • node1復帰後にnode2へ接続しようとするが接続できない
  • node2のElasticSearchをkill -9して停止した

ESクラスタのノードが全て停止してしまった

[YYYY-MM-DDTHH24:MI:SS][INFO ][o.e.n.Node               ] [node1] started
[YYYY-MM-DDTHH24:MI:SS][DEBUG][o.e.a.a.c.s.TransportClusterStateAction] [node1] no known master node, scheduling a retry
[YYYY-MM-DDTHH24:MI:SS][INFO ][o.e.d.z.ZenDiscovery     ] [node1] failed to send join request to master [{node2}{XXXXXXXXXXXXXX}{YYYYYYYYYYYY}{XX.XX.XX.XX}{XX.XX.XX.XX:9300}]
  • node1復帰後に接続エラーを繰り返している状態のときのクラスタ(master_not_discoverd_exception)
$ curl localhost:9200/_cat/nodes
{"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":null}],"type":"master_not_discovered_exception","reason":null},"status":503}

ESクラスタノードの起動と絶望

  • node1を最初に起動する
  • node1がmasterになる
  • node2を起動するとすでにmasterへjoinされているノードとして認識されてしまう絶望
[YYYY-MM-DDTHH24:MI:SS][INFO ][o.e.d.z.ZenDiscovery     ] [node2] failed to send join request to master [{node1}[internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node2}, found existing node {node2} with the same id but is a different node instance]; ]
[YYYY-MM-DDTHH24:MI:SS][WARN ][o.e.g.MetaStateService   ] [node2] [_global]: failed to write global state
  • clusterの状態
  • node1(masterノード)だけ起動している
  • node2は接続されているけども正しい状態を保持していない
$ curl localhost:9200/_cat/nodes
node1  XX YY M XXX XXX XXXX      mdi * node1
node2  **ココにナニも状態が描かれない** mdi - node2

masterへ接続できなくなったノードのnode.lockファイルを消す

  • node.lock が /var/lib/elasticsearch/nodes/<node_number>/node.lock につくられている
  • masterへ接続できないnodeで該当ファイルをrmする
  • データディレクトリやindexディレクトリ・ファイルは削除しなくてOK
$ ps -ef|grep elastic
<ESプロセスが止まっていること. monitなどでディスカバリしてる場合は止める>
$ rm -f /var/lib/elasticsearch/nodes/0/node.lock
$ sudo service elasticsearch start
$ curl localhost:9200/_cat/nodes
以下のようにclusterのmaster/memberが見えていればOK
node1  XX YY M XXX XXX XXXX      mdi * node1
node2  XX YY M XXX XXX XXXX      mdi - node2

おわり

4
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6