Amazon Elasticsearch Service でインデックスのレプリカ数を変更する

Posted on

仕事で Amazon Elasticsearch Service (Amazon ES) をガッツリ触っています。前職で Elasticsearch を触っていたときはまだバージョン 0.9 だったので、過去の知識がまったく役に立ちません (笑)

ところで、Amazon ES をノード数 1 で起動すると Cluster Health が Yellow になります。これはノード数 1 だと Elasticsearch のデフォルト値であるレプリカ数 1 を満たせないためです。ノード数を増やせば Green に戻るのですが、耐障害性が求められないデータだったのでインデックスのレプリカ数を 0 にすることにしました。

インデックスのレプリカ数を変更する方法はいくつかあるので、忘れないようにメモしておきます。

インデックスのレプリカ数を確認する

インデックスのレプリカ数は /_cat/indices?v で確認できます。 s パラメータでソートするカラムを指定できます。

$ endpoint=https://xxxxx.ap-northeast-1.es.amazonaws.com
$ curl -X GET ${endpoint}'/_cat/indices?v&s=index'
health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   log-2018.04.25      DkoPbZ8YR62SQzesyov1PQ   5   0      12904            0       16mb           16mb
green  open   log-2018.04.26      V6d-ZFhOTrW7_AGKGzWj9Q   5   0       1436            0      3.7mb          3.7mb

すでにあるインデックスのレプリカ数を変更する

すでにあるインデックスのレプリカ数を動的に変更するには /(index_name)/_settings で設定できます。

$ endpoint=https://xxxxx.ap-northeast-1.es.amazonaws.com
$ curl -X PUT ${endpoint}'/log-2018.04.26/_settings' -H 'Content-Type: application/json' -d '
{
    "index": {
        "number_of_replicas": 0
    }
}
'

すべてのインデックスを対象にしたい場合はワイルドカードで指定できます。

$ endpoint=https://xxxxx.ap-northeast-1.es.amazonaws.com
$ curl -X PUT ${endpoint}'/*/_settings' -H 'Content-Type: application/json' -d '
{
    "index": {
        "number_of_replicas": 0
    }
}
'

新規に作られるインデックスのレプリカ数を変更する

Fluentd からログデータを送るときは日次でインデックスを作ることが多いと思います。これから新規に作られるインデックスのレプリカ数を変更するには /_template/replica でデフォルト値を設定できます。

$ endpoint=https://xxxxx.ap-northeast-1.es.amazonaws.com
$ curl -X PUT ${endpoint}'/_template/replica' -H 'Content-Type: application/json' -d '
{
    "template" : "*",
    "settings" : {
        "number_of_replicas" : 0
    }
}
'

まとめ

Amazon Elasticsearch Service でインデックスのレプリカ数を変更する方法をまとめました。耐障害性が求められないデータであればレプリカ数を 0 にしておいても大丈夫でしょう。