How change default number of shards


#1

Hello, I am using ES 6.1. and I am trying to change default number of shards from 5 to , for example, 6. Is it possible in some way? When I add lines bellow to the elasticsearch.yaml file, the ES will not start.

index.number_of_replicas : 1
index.number_of_shards: 6

The error looks like this:

Found index level settings on node level configuration.

Since elasticsearch 5.x index level settings can NOT be set on the nodes
configuration like the elasticsearch.yaml, in system properties or command line
arguments.In order to upgrade all indices the settings must be updated via the
/${index}/_settings API. Unless all settings are dynamic all indices must be closed
in order to apply the upgradeIndices created in the future should use index templates
to set default values.

Please ensure all required values are updated on all indices by executing:

curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
"index.number_of_replicas" : "1",
"index.number_of_shards" : "6"
}'

My understandig:
If I have no indices or when all indices are closed, i can change default value via :
curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
"index.number_of_replicas" : "1",
"index.number_of_shards" : "6"
}'

Otherwise I am not possible to change default number of shards.

I know I can't change number of shard after indices are created. I can create index like this

curl -XPUT  "$(hostname -I):9200/myindex/_settings?pretty" -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_shards" : 2, 
        "number_of_replicas" : 0 
    }
}
'

I am sending data to ES from Logstash, and create indexes automatically with name depends on date and type, so I cannot create every index manually.

My questions are:

  1. is there any way how to change default number of shard ? If yes, how?
  2. May I have different indices with different number of shards?

(Christian Stockhaus) #2

you have to use index templates: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

with this you can set a default for all indices as follows

POST _template/default
{
  "template": ["*"]
  "order": -1
  "settings": {
    "number_of_shards": "6",
    "number_of_replicas": "1"
  }
}

with the same api you can change the values also index specific

POST _template/<templatename>
{
  "template": [<indexpattern>]
  "order": 1
  "settings": {
    "number_of_shards": "6",
    "number_of_replicas": "1"
  }
}

#3

Thank you for fast reply, it really helps. I just change "template" line to "index_patterns" like this:

PUT _template/default
{
  "index_patterns": ["*"],
  "order": -1,
  "settings": {
    "number_of_shards": "6",
    "number_of_replicas": "1"
  }
}

(system) #4

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.