일래스틱서치 5.0부터 elasticsearch.yml에 index.routing.allocation.total_shards_per_nod 속성을 저장할 수 없다. 


elasticsearch.yml에 index.routing.allocation.total_shards_per_node 속성을 설정하려 한다면 일래스틱서치 노드의 로그 파일에서 다음과 같은 에러가 나타날 것이다.



[2017-05-25T20:32:09,248][WARN ][o.e.c.s.SettingsModule   ] [5OEGj_a]

*************************************************************************************

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.routing.allocation.total_shards_per_node" : "4"

}'

*************************************************************************************



[2017-05-25T20:32:09,252][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: node settings must not contain any index level settings
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:58) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.3.1.jar:5.3.1]
Caused by: java.lang.IllegalArgumentException: node settings must not contain any index level settings
at org.elasticsearch.common.settings.SettingsModule.<init>(SettingsModule.java:132) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.node.Node.<init>(Node.java:342) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.node.Node.<init>(Node.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap$6.<init>(Bootstrap.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.3.1.jar:5.3.1]





인덱스이름/_settings api를 동적으로 호출해 노드 당 전체 샤드 개수를 설정할 수 있다.


$ curl -XPUT 'localhost:9200/person/_settings' -d '{

 "index.routing.allocation.total_shards_per_node": "4"

}'




잉ㄹ래스틱서치의 예외에서 나온 내용처럼 모든 인덱스에 대한 설정을 수정하려면 다음처럼 호출할 수 있다. 


curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{

  "index.routing.allocation.total_shards_per_node" : "4"

}'



Posted by '김용환'
,