ES集群优化建议

早先做的ES优化record下

我看了下诊断内容,主要有以下几个问题:

1. 节点的分片数太多

单节点的分片数尽量控制在 300 个以内,官方推荐单节点分片数不要超过 1000,主要目的是减轻集群状态数据管理的压力,即可以更快地更新集群状态数据。 可以通过合理设置各个索引的分片数来实现,比如将按天建索引改为按周、月等。

2. JVM 堆内存设置不合理

  • JVM Heap 大小建议控制在 30GB 以内,且不超过系统总内存的 1/2,以预留足够内存为文件缓存使用。

  • https://www.elastic.co/guide/en/elasticsearch/reference/6.7/heap-size.html

3. 目前总共 9 个节点,3 个混合节点,6 个数据节点。 建议使用独立的主节点,避免因主节点压力大造成集群不稳定。

4. Mapping 设置是否合理存疑

建议将使用动态索引模板设定所有字符串默认为 keyword 类型,必要的再设定为 text 或者 text + keyword 类型,以此节省存储资源,提升写入性能

可以按如下方式设置模板:

PUT my_index

{

 "mappings": {

   "dynamic_templates": [

     {

       "strings_as_keywords": {

         "match_mapping_type": "string",

         "mapping": {

           "type": "keyword"

         }

       }

     }

   ]

 }

}

5. 写优化基础配置

如果对查询实时性要求不高,例如允许 30 秒内可以查询到,可以按如下方式设置模板

PUT my_index

{

 "settings": {

     "index": {

       "refresh_interval": "30s",

       "translog": {

         "sync_interval": "10s",

         "durability": "async"

       }

     }

   }

}

另外目前每个节点上数据量大概有多少?一般建议热数据节点存放 2T 左右。

给出的建议:

  • 1.内存分配 为总内存的50% 总内存超过64G时 ,一般设置为2-32G以内;
  • 2.单节点分片数,一般按照1G的jvm内存 分配20-25个 例如:分配32G内存,分片数可以在640-800之间,如果进一步低于这个标准,集群状态肯定也越健康;
  • 3.单个分片的大小最好不超过50G 最好在20-40G以内;
  • 4.冷热节点设置 经常操作的索引写入热节点;