Shard,replica shardの数の指定について

データノード5台のクラスタを構築し、シャードを5レプリカシャードを4に設定したいのですがやり方がわかりません。

curl -X PUT xx.xx.xx.xx:9200/_all/_settings -H "Content-Type: application/json" -d '
{
"index":{
"number_of_shards":5
"number_of_replicas":4
}
}'

出力結果

{"error":{"root_cause":[{"type":"json_parse_exception","reason":"Unexpected character ('"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@2b5c30aa; line: 5, column: 10]"}],"type":"json_parse_exception","reason":"Unexpected character ('"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@2b5c30aa; line: 5, column: 10]"},"status":500}

インデックスするデータ全てにこの設定が適用されるようにしたいです。

どなたかわかる方よろしくお願いします。

こんにちわ。

作られるIndexすべてに指定したシャード、レプリカの数としたいということでしたら、Templateをお使いになるのはどうでしょうか?

PUT _template/template_1
{
    "index_patterns" : ["*"],
    "settings" : {
        "number_of_shards" : 5,
        "number_of_replicas": 4
    }
}

テストとして、index-patternsに*を指定することで、すべてのIndexがテンプレート使用対象となるようにし、
shard/replicaの数を指定してあります。
このようにテンプレートを作っておくと、次にIndexを作成したときに、指定した値が使用されます。

PUT hoge-index

として作ったら、shard、replicaの数も指定した値になっています。

GET hoge-index/_settings
得られる結果
{
  "hoge-index" : {
    "settings" : {
      "index" : {
        "creation_date" : "1563518649333",
        "number_of_shards" : "5",
        "number_of_replicas" : "4",
        "uuid" : "cN0DC7YaSnyyGE9CIWPAvw",
        "version" : {
          "created" : "7020099"
        },
        "provided_name" : "hoge-index"
      }
    }
  }
}

Unexpected character ('"' (code 34)): was expecting comma to separate Object entries
このエラーが出るのは、 "number_of_shards": 5のあとに , がなく、jsonとして不正だからです。

参考
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

1 Like

ありがとうございます!解決しました!:rofl: