LoginSignup
1
1

More than 5 years have passed since last update.

ElasticSearchやらかし記録

Last updated at Posted at 2016-07-26

トラブルの原因

AWSで開発機1のAMI作成する。
AMIから別インスタンス(開発機2)を作る。
\(^o^)/クラスタに自動追加されてシャーディングされる。
※Elasticsearchのバージョンは1.7.5。2.x系では自動でノード追加されないためこの現象は発生しない。
教訓:AMIからインスタンスを作る時はセキュリティグループを分けて別ネットワーク扱いにして作った後、設定変更してから同一セキュリティグループに入れる。

開発機2のクラスタ名を変えてElasticSearch再起動
開発機1のElasticSearchのステータスがRedに!\(^o^)/
開発機2はNoIndexに。
 *クラスタとIndexがひも付けされてるのね。

とりあえず、Redステータスから回復させる(注意:間違ってます)

*localhostではなく、プライベートIP(esmaster)でサービス稼働している。
curl -XGET http://esmaster:9200/_cat/shards

UNASSIGNED
になっているShardに対して


curl -XPOST 'esmaster:9200/_cluster/reroute' -d '{
    "commands": [{
        "allocate": {
            "index": "インデックス名",
            "shard": 1,
            "node": "gCPHfxxpTeim4DA8AFhESg", *Nodes Statでnodesで表示されるやつor「node.name」
            "allow_primary": 1
        }
    }]
}'

を実行していく。
これをやるとStatusはGreenになるが、データは無い状態になる。
結果、今まで5/5持ってたデータが2~3/5になる。
・・・あっかーん\(^o^)/
Shardはデータの分割単位。コピーはReplica!

正しくは開発機2を同一クラスタに戻した状態からmoveコマンドでShardのノードを移動させないといけなかった。
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html


curl -XPUT 'esmaster:9200/_cluster/settings' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}'

curl -XPUT 'esmaster:9200/_cluster/settings' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}'

移動前にルーティングを止めて、移動作業が終わってノードを切り離したら再開させる操作も必要。

結局

Zookeeperのデータも壊れてテーブルが無い(hbase shellのlistコマンドで見えない)のに
org.apache.hadoop.hbase.TableExistsExceptionが発生するようになり、
ググッた情報を実行しても直らないので
hbase.zookeeper.property.dataDir
のパスを変更して対応。

こういう面倒くさいことになるので、AMIからのインスタンス作成時は気をつけましょう。

1
1
0

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
1
1