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
冗長化設定
- 1 AWSコンソール > EC2 > ロードバランサー > ロードバランサーの作成
- 2 Application Load Balancerの作成
- 3 ロードバランサーの設定
- 4 ルーティングの設定
- ポート: 9200
- ターゲットの種類: IP
- ヘルスチェックの設定
- 5 ターゲットの登録
- ESのインスタンスのプライベートIDを指定
- 6 作成しヘルスチェックが通れば、ロードバランサーに割り当てられたDNSより、疎通可能になる
- 7 6のDNSにアプリケーション側も変更する
