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.冷热节点设置 经常操作的索引写入热节点;
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!