【ES三周年】2h10min就进行一次莫名选主异常
最近刚做系统迁移,其中涉及到一套es环境,因为业务场景并不复杂,也不是主流程,所以之前一直用的是单点,但这次迁移计划直接用集群环境,在迁移后遇到了集群节点莫名连接超时导致重新选主的问题。
其中elasticsearch的版本为7.6.2
问题描述:
最开始是出现在链路监控上,连接es有超时情况发生
查看es日志发现elasticsearch集群每隔一段时间就会发生一次重新选主,在选主之前,会发现集群中节点通过9300连接有超时情况。
部分报错如下:
起初怀疑是配置哪里有问题,尝试修改了一些配置后,问题依旧。
但是发现有个共同点,就是出现问题,每次的时间是大致相同的,基本是2小时,后面去整理了下,基本是2h10m。
于是怀疑是哪里有什么参数把连接断掉了,网上查了好久,都没有类似的报错,其它环境因为是不同版本或者安装方式不同,也没有复现类似错误。
直到看到下面这篇文章:
在 Elasticsearch 中处理 NodeNotAvailableExceptions
在发现之前我们还进行了抓包,看到在异常的情况下,会有几次TCP重传的现象,后面才知道这是正常的重试流程。
如何解决:
修改内核参数,主要是下面这条,这个参数默认是7200,单位是秒,也就是2小时,代表2小时去检测一次tcp连接状态。
net.ipv4.tcp_keepalive_time=600
还有两个参数,默认是75和9,代表重试9次,每次间隔73,也就是11min,是不是发现和前面问题出现的时间能够对上了。
net.ipv4.tcp_keepalive_intvl=60
net.ipv4.tcp_keepalive_probes=3
所以问题就是,在2小时一次的检测时发现,之前用于集群间通信的tcp连接已经断开了,所以节点间连接超时,从而发生了重新选主。
解决办法就是将上述检测间隔时间调整为600,这个时间间隔取决于底层设备的配置。也就是说是什么断开了这个连接,这个时间是多久,我们将这个设备暂且定义为是一个防火墙,这个防火墙会跟踪你的tcp连接,由于所有这些连接跟踪都会占用内存,因此将丢弃不再使用的连接。防火墙不会通知另一端它已经这样做了!防火墙对此有一个超时,通常设置为 1 到 6 小时之间的任何时间。如果此连接的任何数据包在超时后仍然到达,防火墙将说“对不起,您说您属于连接 X,但我对连接 X 一无所知”并静默丢弃数据包,再次不让发送方知道。至少我们的防火墙是这样做的。
所以将配置调整为600秒,可以更早的知道tcp连接已经断开,尽快去替换为新的连接。
其实关于这个长连接的提醒,在es的官方文档中其实是有介绍的。
更多具体的介绍可以参考上述文章,有更详细的介绍,但是这个问题,在8.0版本中并没有出现,不知道是不是做了什么优化。
原文首发于本人公众号:【大侠之运维】
相关文章
- 群创南科T6厂发生事故,一名员工意外身亡
- 传印度将提供2000亿卢比补贴,以鼓励苹果MacBook和iPad等硬件制造
- NVIDIA发布RTX 40移动版显卡:笔记本性能、能效史上最大飞跃
- 英特尔13代酷睿移动版发布:24核心,5.6GHz!多线程性能提升49%
- HPE出售新华三49%股权,紫光股份将100%控股!
- 三星展示Flex Hybrid面板:可折叠+可拉伸二合一
- 台积电3nm晶圆单价超20000美元,苹果A17将首发
- AMD发布三款锐龙7000系列新处理器:一键能效暴涨47%!
- 法拉第未来:FF 91准量产车已送回中国本地测试
- 又一定点官宣!RoboSense获得赛力斯量产定点,合作车型年内上市
- 三星Exynos 2400移动处理器曝光:将采用Cortex-X4超大核
- Arm生态系统伙伴已累计出货超2500亿颗芯片
- 印度高额奖励计划太诱人?三星高端智能手机也开始在印度生产
- 西部数据宣布减产30%,2023年资本支出缩减14.8%
- 中国大陆仍是2022年全球最大半导体市场,占比达32.5%
- 判决结果出炉:龙芯LoongArch指令集系统未侵犯MIPS知识产权!
- 高通Snapdragon Ride Flex发布:业界首款同时支持数字座舱和ADAS的可扩展系列SoC
- 传戴尔计划将50%产能转移出中国大陆!
- HTC推出全新XR一体机VIVE XR Elite,配备全彩透视镜头
- 鸿海2022年营收达14829.7亿元创历史新高,郑州厂区生产已恢复正常