elasticsearch集群生产问题处理总结

本文总结了作者处理过的500+ Elasticsearch(ES)生产问题,涉及集群稳定性、节点脱离、CPU高消耗、超时、分片未分配等。问题一中,GC停顿导致节点离开集群,通过优化分词器解决;问题二中,通过调整索引分片平衡解决CPU高消耗;问题三中,建议上游改为批量写入以避免超时。通过对ES的深入理解和“望闻问切”方法论,作者提供了解决ES问题的思路。
摘要由CSDN通过智能技术生成

对于elasticsearch这款中间件,笔者是很感兴趣的,在工作中处理的es生产问题大大小小有500+了,涉及es集群升级、扩容、数据迁移、双活、异地多活、灾备、冷热架构、角色分离等,逐渐形成一些问题处理经验,本篇文章会结合一些案例,提供下常见es生产问题处理思路供大家参考(不包含问题详情和报错日志等生产敏感信息,请大家理解)

问题一:

同网段集群9台节点,经常随机出现某台节点离开集群的现象,节点重启后恢复正常。

处理过程:

查看日志,发现该节点在夯住前经常有长时间gc停顿,刚开始可能几秒,十几秒,后面达到一百多秒,超过es节点健康检测时长(93秒),主节点将该节点踢出集群,

节点为什么会夯住那么长的时间?堆内存不够了?需要扩容吗?查看监控排除了这些可能性,后面对健康检测时长进行了调整(305秒),仍然有这种情况发生,并且看到发生节点脱离的情况时,gc停顿已经有上千秒了,所以延长健康检测时长并不是解决办法,必须要找到gc停顿如此之长的原因。经过hot_threads查询,发现9个节点中同一时刻总有一个节点上显示pinyin tokenizer的线程占用cpu很高,并且发现一个规律,这个pinyin tokenizer在哪个节点上,下一次发生节点脱离的情况时就必然是这个节点。那说明就跟这个pinyin分词器有关了,经了解,该pinyin分词器是业务侧从github下载的后,经过改造之后安装的。而改造的内容就是更改了拼音多音字的功能(pinyin分词器默认值匹配多音字中的一个音,业务侧改成了匹配多个音,会导致大量循环,耗费cpu),最后改成原版的pinyin分词器后,集群恢复正常。

 

问题二:

集群各节点配置相同、部署服务相同,但出现某台节点cpu消耗高的情况。

处理过程:

首先通过top等查询排除了该节点其他进程导致CPU占用高的情况,继续检查发现该节点write线程池有任务拒绝的情况,同配置下的集群各节点只有这台出现写数据异常,

那是不是该节点的磁盘写入有问题呢?通过iostat –x –d –k 1发现瓶颈不在磁盘上。使用top –Hp pid,用jstack打一下es的线程dump,发现也没什么问题。

接着查看es索引,发现集群中有一个索引数据量较大,在es集群中索引是均衡分配的,但每个分片的数据不会完全相等的,只是大致相同。用_cat/shards查看该索引的分片分配详情,然后计算索引分片在各个节点的总容量,此时发现一个特点,各节点cpu占用和这个总容量强相关,也就是总容量大一点的cpu占用也会相应高一些,而出问题的那个节点,该索引的分片总容量最高。手动分配该索引分片,将一部分分片迁移到容量最少的那个节点上,集群节点恢复正常,没有写任务异常了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值