Elasticsearch 集群莫名两个小时崩溃一次的问题

一、集群现象

集群大概每隔2小时左右崩溃一次 ,崩溃的持续时间为10分钟左右 ,日志表现形式如下



[2018-09-18T01:37:43,071][WARN ][o.e.d.z.UnicastZenPing ] [node-1] failed to send ping to [{node-3}{3i0mQX2yRqyD5oqMny5srw}{aVphjfqBQ7mHpi5EncF8tg}{xxx.xxx.32}{xxxxxx:9300}{ml.machine_memory=16657965056, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}]

org.elasticsearch.transport.ReceiveTimeoutTransportException: [node-3][10.112.188.32:9300][internal:discovery/zen/unicast] request_id [59813] timed out after [3750ms]

at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:987) [elasticsearch-6.3.2.jar:6.3.2]

at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:626) [elasticsearch-6.3.2.jar:6.3.2]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181]

at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]


二、解决方案

先说方案:修改tcp_keepalive的配置 以下为默认配置

# cat /proc/sys/net/ipv4/tcp_keepalive_time 7200

# cat /proc/sys/net/ipv4/tcp_keepalive_intvl  75 

# cat /proc/sys/net/ipv4/tcp_keepalive_probes  9

深入的原理请参考这篇文章 

https://blog.trifork.com/2015/04/08/dealing-with-nodenotavailableexceptions-in-elasticsearch/

了解到Es集群和系统防火墙的设置有关系。(在排查问题过程中 本地集群没有开启防火墙,导致问题没有复现)如果开启了防火墙,并且没有调整系统关于tcp keepalive的参数时就会出现该问题,调整的配置如下,默认系统的配置为 7200 (2小时) 每次重试间隔75s 重试 9次 后 ,系统才会报告该tcp已经断开连接。 和Es集群崩溃的现象时间间隔吻合。

通过查找官网资料发现也有相关的说明。

Es官网中也有给出相关的警告 不过没有仔细阅读导致花费大量的时间去排查问题。

如下图所示  明确要求 保持空闲的长连接的重要性。

你可能感兴趣的:(Elasticsearch 集群莫名两个小时崩溃一次的问题)