のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

Elasticsearchのclusterステータスをgreenにするまでにやったこと

Elastic stack (Elasticsearch) Advent Calendar 2017 - Qiita 16日目の記事です

サービスで利用しているElasticsearchのclusterのステータスがずっとyellowだったので、それをgreenになるまでにやったことを記載してます。

対応した内容

  • 明らかに大きいindexのShard数を減らした
  • nodeを追加した
  • 冗長化構成にした

5系でShardsを変更(縮小)する

  • Shrink Indexを利用する

www.elastic.co

  • 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を新規に追加する

  • 参考

qiita.com

EC2上でESを利用しており、Amazon Elastic Serviceは利用していない状態です。

{
  "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

冗長化設定

f:id:tatsu_tora:20171203174459p:plain
ELB Console confirm