有时,我们的ES集群小,或者是测试时,只启动一个es时,我们需要将分片数设小,副本数设为0。要不然集群一直是yellow状态。
elasticsearch.yml 里设置index.number_of_shards参数已经废弃,会报错:
[2018-03-26T13:34:41,435][WARN ][o.e.c.s.SettingsModule ] [node-1] *************************************************************************************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" : "0"}'*************************************************************************************[2018-03-26T13:34:41,438][ERROR][o.e.b.Bootstrap ] Exceptionjava.lang.IllegalArgumentException: node settings must not contain any index level settings at org.elasticsearch.common.settings.SettingsModule.(SettingsModule.java:128) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.node.Node. (Node.java:331) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.node.Node. (Node.java:246) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap$5. (Bootstrap.java:213) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:213) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:323) [elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) [elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) [elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) [elasticsearch-cli-6.2.2.jar:6.2.2] at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) [elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) [elasticsearch-6.2.2.jar:6.2.2][2018-03-26T13:34:41,443][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] 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:125) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.2.2.jar:6.2.2] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.2.2.jar:6.2.2]Caused by: java.lang.IllegalArgumentException: node settings must not contain any index level settings at org.elasticsearch.common.settings.SettingsModule. (SettingsModule.java:128) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.node.Node. (Node.java:331) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.node.Node. (Node.java:246) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap$5. (Bootstrap.java:213) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:213) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:323) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.2.2.jar:6.2.2] ... 6 more
所以我们根据提示,配置文件去掉这个参数,启动起来后,通过API设置:
[elklog@iZ2ze16gjdevwfzy53xejgZ logs]$ curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{> "index.number_of_replicas" : "0"> }'{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}[elklog@iZ2ze16gjdevwfzy53xejgZ logs]$
看来还需要设置http头信息:
[elklog@iZ2ze16gjdevwfzy53xejgZ logs]$ curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{> "index.number_of_replicas" : "0"> }'{"acknowledged":true}
分片设置同理:
curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{ "index.number_of_shards" : "1"}'