背景

经过在生产环境的大规模使用之后发现如果使用Elasticsearch 6.x的一些默认配置的话,尤其是number_of_shards默认为5,如果索引按照天生成,日积月累到几万后,集群就会频繁GC,最终导致ES的某些REST接口不可用。

最新的ES 7.x已经将number_of_shards默认为1了,所以如果你们的生产环境如果全面升级到了7.x的话则可以忽略本篇博客,但是如果因为各种原因你们的es集群还在使用6.x的话,那么就要做一些优化了。

优化

我们打开Kibana的面板后,来到Management-> Dev Tools, 然后执行下面的PUT请求,

PUT /_template/xxlog
{
    "order": 1,
    "version": 1,
    "index_patterns": [
      "xx-*"
    ],
    "settings": {
      "index": {
        "number_of_shards": "1",
        "number_of_replicas": "1"
      }
    },
    "mappings": {},
    "aliases": {}
}

上面的xxlog为该template的名字,你可以根据你们的业务需求自定义一个,“xx-*“这个也很重要,你们索引的前缀prefix,这个也要根据实际情况做一些改动。

上面的关键是"number_of_shards”: “1"这一行,因为对于number_of_replicas来说,不管是6.x还是7.x都已经默认为1了。