Elasticsearchのclusterステータスをgreenにするまでにやったこと
Elastic stack (Elasticsearch) Advent Calendar 2017 - Qiita 16日目の記事です
サービスで利用しているElasticsearchのclusterのステータスがずっとyellow
だったので、それをgreen
になるまでにやったことを記載してます。
対応した内容
- 明らかに大きいindexのShard数を減らした
- nodeを追加した
- 冗長化構成にした
5系でShardsを変更(縮小)する
- Shrink Indexを利用する
- Shrink Indexを利用するため、settingを変更
$ curl -XPUT "localhost:9200/target_1_0/_settings" -d ' { "settings": { "index.routing.allocation.require._name": "shrink_node_name", "index.blocks.write": true } } '
- シャード数を変更したindex作成する
新たにtarget_1_1
というindexが作成される
$ curl -XPOST localhost:9200/target_1_0/_shrink/target_1_1 -d ' { "settings": { "index.number_of_replicas": 1, "index.number_of_shards": 1 }, "aliases": { "target": {} } } '
- 確認
$ curl localhost:9200/_cat/indices?v $ curl localhost:9200/_aliases?pretty
- aliasesをつけているので、後処理で古い(shard数のでかい)indexを削除する
$ curl -XDELETE localhost:9200/target_1_0 $ curl localhost:9200/_aliases?pretty
nodeを新規に追加する
- 参考
EC2上でESを利用しており、Amazon Elastic Serviceは利用していない状態です。
ESをインストールした新規インスタンスを用意
1 IAMポリシー作成
{ "Statement": [ { "Action": [ "ec2:DescribeInstances" ], "Effect": "Allow", "Resource": [ "*" ] } ], "Version": "2012-10-17" }
作成したポリシーをEC2のIAMロールにアタッチ
- 2 EC2 Discovery pluginをインストール
EC2 Discovery Plugin | Elasticsearch Plugins and Integrations [5.6] | Elastic
$ sudo $ES_HOME/bin/elasticsearch-plugin install discovery-ec2
- 3 設定ファイル変更
discovery.zen.hosts_provider: ec2 discovery.ec2.groups: "SECURITY_GROUP_NAME or SECURITY_GROUP_ID" discovery.ec2.availability_zones: [ "ap-northeast-1" ] # region cloud.aws.region: ap-northeast-1 cloud.node.auto_attributes: true
既存のnodeに追加する場合のみ
$ rm -rf /var/lib/elasticsearch/nodes/0/
5 2と3の設定を既存のESの方にもする
6 新規インスタンスのESを再起動
7 問題なく起動できたら既存も続けて再起動
8 ログに
added ["es private ip1", "new private ip2"]
のように吐かれていれば成功
クラスタ構成確認(nodesのtotalが2に増えていることが確認出来ればOK)
$ curl localhost:9200/_cluster/stats?pretty