なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

Elasticsearchのshardとreplica

先週、箱根へ小旅行した帰りのロマンスカーでぼんやりと話したElasticsearchのshardとreplicaの話です。

どこかに書いたような気もするけど、メモごとどこかになくしたらしいので、忘れないように書きとめることにしました。

shard

elasticsearchのshardはluceneの1インスタンスで、 elasticsearchに自動管理されているワーカーと考えてよい。

shardを増やせば並列数があがって1ノードのパフォーマンスがあがるかもしれない。

デフォルトでは5つのshardを作ることになっているけど、設定によって変えることもできるし、インデックスごとにshardsの数を設定することもできる。

ただし、shardの数はインデックス生成後に変更できない

replica

一方のreplicaはノードのコピー。マスターノードを除いたクラスタ内でのコピー数。 ノードを増やして負荷を分散したり、ノードがダウンした際に代わりに頑張らせたりする。

デフォルトは1になっているので、何も考えずにelasticsearchを立ち上げると、 cluster health: yellowになる。(1ノードのみだとレプリカが配置されないため)

shardと同じようにreplica数もインデックスごとに設定できる。こちらは後から変更できる。

設定例

これらの設定は/etc/elasticsearch/elasticsearch.ymlに書く。

設定ファイルには書いてあるけど、開発環境での設定例は、shards: 1replicas: 0、worker 1つにコピーは作らない。(開発環境だからね)

  • 開発環境での設定例
index.number_of_shards: 1
index.number_of_replicas: 0
  • デフォルトの設定
index.number_of_shards: 5
index.number_of_replicas: 1

のままでインデックスを作ると、cluster health: yellow (1, 5)になってしまい気持ち悪いので、インデックスのreplicaとshardの数を開発環境に合わせて設定し直すのがオススメ。

replicaとshardの数を変更するには update indices setting APIを使う。

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

上の例はreplica数を0に(コピーを作らなく)する。cluster health: greenになって幸せ。

参考