开发那边在搭建集群的时候,无论如何测试,node 节点就是连不上,始终报错误
org.elasticsearch.client.transport.NoNodeAvailableException: No node available
后开看了下,本地环境,原因是回话时间太多,而他的本地环境并没有做内核优化,而线上都做了统一的内核优化,其中一条就是吧,检测tcp 连接探测间隔在5秒,对es 来说,太断了,
google 搜到一片文章,连接如下
https://blog.trifork.com/2015/04/08/dealing-with-nodenotavailableexceptions-in-elasticsearch/
大概内容是,这根本因为系统没有调优内核,导致无法连接,与我们相反,他是保持连接时间探测过长导致的
那么我们可以推测,tcp 内核连接,要保持在一定的数值范围内,而且必须与es 连接的工作原理相符,不然linux 系统的防火机制,和tcp 连接探测机制,会把还需要继续保持的连接给干掉,结果就会变成了,没有节点可用
具体操作如下
centos 系统
修改内核参数
net.ipv4.tcp_keepalive_time=7200(默认值)
改为
net.ipv4.tcp_keepalive_time=600(具体看情况)
本文转自wks9751CTO博客,原文链接: http://blog.51cto.com/wks97/2086023,如需转载请自行联系原作者