ES 集群优化,求大佬指点一下
0. 背景
a. 刚入职几天,主要负责维护公司的 ES 集群,头大。。。
b. 简单整理了集群的相关情况,见下文,烦请有相关经验的大佬,帮忙看看优化方法合理吗,有没有更好的建议,非常感谢。
c. 自己感觉集群资源已经非常充足了,但不合理的节点配置和不完善的索引管理策略 [严重] 影响了整体的性能
d. 自己对 ES 维护优化经验不多,欢迎大佬指点一二。
1. 集群概况
a. 版本信息:CentOS7, ES 7.3.0, 单机多实例配置
b. 数据方面:20+ indices,650+ shards,80 亿+ doc
c. 节点方面:1 master,36 data + ingest + coordinating , 1 ingest + coordinating
e. 资源方面:具体如下图,每个数据节点挂载了两块 1.5T 的机械磁盘,并都配在了 path.data 下。
2. 索引情况
a. 每个索引 32 个分片,1 个副本分片
b. 每月生成一个新索引,按月滚动
c. 单个索引有 500G ~ 800G 数据量
d. 索引中使用了 [父子文档]
e. 单个分片中有些超过了 26G
f. 从 2019.11 ~ 2020.5 数据增长来看,每天大概增长 20G 左右
3.索引管理
a. 没有划分节点属性,也就没有做冷热数据分离
b. 索引生命周期管理不完善,仅仅对超过 30 天的索引 forcemerge 和超过 90 天的副本分片置为 0,freeze 索引
4.当前问题
a. 数据节点有时会离线 (猜测是不合理的查询耗尽了堆空间)
b. 写入数据慢,rabbitmq 队列数据堆积 (还没整明白具体的情况)
c. 集群恢复耗时长 (应该是索引没有划分优先级)
d. 下图是 kibana 24h 的数据,索引包含了 kibana 的一些索引和分片,上述叙述中去掉了该部分。
5.优化思路
a. 根据主机资源情况划分合理的节点角色,节点属性,提高集群的资源利用性,可用性,健壮性。
b. 冷热数据分离,hot 节点高配置低存储,warm 节点低配置大存储。
c. 热数据节点单主机单实例,冷数据节点单主机多实例。
d. 索引生命周期的管理,包括减少主分片数,合适的模板,索引 Rollover,索引 Allocation 等。
e. 健全 ES 主机资源监控告警,JVM 重点指标监控告警。