一次etchosts权限错误导致的es集群错误

一次etchosts权限错误导致的es集群错误,第1张

先说一下环境:系统使用的CentOS75,elasticsearch版本是540。一套产品集群包括三个elasticsearch节点构成的集群。

部署了两套测试集群,配置基本类似,elasticsearch配置文件中使用主机名。在某一次测试后,一套集群里的elasticsearch就开始报错,无法提供服务。查看日志发现,elasticsearch一直抛出UnknownHostException异常,所以无法和另外两个节点通信连成集群。根据堆栈信息,这个异常是在解析其它elasticsearch节点域名的时候调用InetAddressgetAllByName()抛出的。

而另外一套集群里类似的配置,它的elasticsearch服务却是很正常的。唯一的不同是,出问题的集群临时配置了DNS服务。

按正常的情况来说,elasticsearch解析域名的方式应该是先从/etc/hosts中获取,获取不到了再查询DNS。elasticsearch服务节点的主机名、IP都有在配置在/etc/hosts中。所以,即使一套集群配置了DNS,另外一套没有,也不应该出现elasticsearch无法解析域名的问题。

为了找到域名解析错误的原因,我决定跟踪一下elasticsearch解析域名的过程,使用的工具是strace。strace命令可以追踪进程的系统调用。

安装过程很简单。

接着是修改elasticsearch的执行脚本,一般路径是/usr/share/elasticsearch/bin/elasticsearch。在这个脚本的最后几行,在exec 后添加strace命令 strace -o /tmp/esstracelog -f ,如下所示。

-o参数将strace的输出保存到文件/tmp/esstracelog,-f参数表明追踪进程的所有子进程的系统调用。

两个集群的elasticsearch节点都修改了这个脚本,重启服务后对比查看。对比这个输出文件,终于发现一些端倪。首先,elasticsearch调用的getAllByName()确实首先查看了/etc/hosts文件,但是权限不足无法访问这个文件。

这是有问题的,首先是这个文件应该是可读的,不应该出现权限不足的问题,第二是两个集群都无法访问这个文件,但是为什么一个能解析域名而另外一个不能。

接着往下对比,出问题的elasticsearch进程这时候检查到/etc/resovlconf文件已经配置,于是向DNS服务器发出了查询。DNS无法解析,于是抛出了UnknownHostException异常。另外一边,没有问题的elasticsearch进程检查到/etc/resovlconf未配置,这时候做了一个特别的操作,它创建了一个地址族是AF_NETLINK的原始套接字,通过这个套接字查询得到了域名对应的IP地址。我猜测,这可能是访问系统的ARP信息。

既然是DNS的问题,那么把出问题的/etc/resolvconf中的DNS配置删除呢?重启服务之后,elasticsearch服务依然抛出异常,查看日志发现进程虽然跳过了/etc/resolvconf,但是它却开始访问了本地的DNS端口53(UDP),可能这是java最后的解析尝试了。恰好,这个节点上部署了rpcbind服务,这个服务恰好就监听了53端口,结果就是依然无法通过DNS解析,java华丽丽的抛出了异常。

问题的根本原因还是/etc/hosts文件不可读,查看这个文件的权限,结果是600,意思就是只能root用户读写了,其它用户没有任何权限,包括读。elasticsearch服务使用的elasticsearch用户,所以当然就会被禁止读取。

经过其它的查找,发现是有一个服务进程会一直更新这个hosts文件,更新的方式是先创建一个临时文件,然后rename成hosts文件,由于临时文件的默认权限是600,所以导致hosts文件的权限最后也是600了。

至此,整个的问题的原因已经清楚。hosts权限的错误,导致elasticsearch通过DNS解析域名,又刚好DNS解析报错,没有通过ARP解析域名。

另外从这个事情中也可以看到java解析域名的套路,先/etc/hosts文件,接着是DNS,先远程的DNS后本地的DNS,最后尝试从本地ARP缓存解析,中间有一个过程抛出异常的时候,解析就会失败。

服务器出现错误。根据查询博客园得知,es文件浏览器添加ftp显示路径为空是服务器出现错误,es文件浏览器是一个能管理安卓设备本地、局域网共享、远程FTP、蓝牙设备和云存储的系统工具类移动软件。

起因:订单日志没有保存到es

解决流程:

查看book3-message的报错日志

发现如下两种异常

第一种异常:

线程池的问题,EsThreadPoolExecutor[bulk, queue capacity = 50, orgelasticsearchcommonutilconcurrentEsThreadPoolExecutor@5e6ba269[Running, pool size = 16, active threads = 16, queued tasks = 56, completed tasks = 41706906]]];];req:orgelasticsearchactionbulkBulkRequestBuilder@27779be

修改了es的线程池配置,线程池的最大数要小于等于es所在服务器的cpu数量;

参考文档: https://wwwcnblogscom/kangoroo/p/7615833html

第二种异常:

数据更新时版本不一致导致;解决方式:将更新es数据的方式从UpdateRequestBuilder改成UpdateByQueryRequestBuilder这种方式,主要是设置abortOnVersionConflict(false)这个参数;

参考文档:

https://blogcsdnnet/zhou_shaowei/article/details/80079162 为了防止版本冲突导致updateByQuery中止,设置终止冲突(false)

https://blogcsdnnet/qq_37502106/article/details/80604538

好的。

检查手机上面的网络连接状况,查看其它软件是否可以正常联网,检查一下手里面的安全管家软件是否已经限制了它的网络访问功能,如果存在限制,那么就取消限制,检查登陆帐号密码是否正确,同时区分一下大小写,如果已经忘记密码,那么可以通过密码找回功能重新设置密码,手机系统或者软件没有响应,重启一下手机再进行登陆,ES软件版本较低,将软件升级到最新版本后登陆。

WIFI未打开:检查手机的wifi是否是打开状态。SMB服务器不在同一网络内:检查路由的连接状态,不对的话,改正即可。IP地址失效:确保连接正常的情况下重新搜索SMB服务已关闭:点击“开始”菜单,在搜索框中输入“服务”单击进入。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 一次etchosts权限错误导致的es集群错误

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情