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 にしておいても大丈夫でしょう。