解决Elasticsearch问题的一些心得体会

  在开始前先来介绍下背景:个人日志采集系统采用ELK(logstash(收集)、elasticsearch(存储+搜索)、kibana(展现)三个软件的简称)开源架构,在elasticsearch搭建了三台Linux节点,IP地址分别为:10.0.48.108,10.0.48.97,10.0.48.98,elasticsearch 2.4.6和kibana4.5.4部署在前两个节点服务器上,logstash2.3.1部署在最后一台服务器上,部署过程遇到许多问题,特地记录下来,之后有新的问题出现也会持续更新。html

1、问题1java

  今天在启动集群的时候108节点上出现ES【elasticsearch 集群健康值未链接】问题,而97上的ES能正常启动状况下咱们用head插件查看elasticsearch集群状态以下图:linux

(图1)安全

  出现这个问题,我最早想到的是去重启该节点,经过命令:service elasticsearch restart,而后用命令:service elasticsearch status查看ES的状态,返回的状态结果以下:服务器

[[WARN ][transport.netty          ] [NODENAME] exception caught on transport layer [[id: 0x9634070f]], closing connection
java.net.NoRouteToHostException: No route to host
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:152)
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105)
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79)
    at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
    at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
    at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

  

  从提示来看是由于找不到路由的缘由,首先想到问题可能的缘由是防火墙缘由致使的,然而我在配置的时候已经打开了9200,9300等ES用到的端口,一时也不知道怎么解决,而后就去Google了一下错误提示,找到的答案都是关闭防火墙,竟然都这么说,我就是去关闭了防火墙,不过很显然是毫无做用。后来看到又看到有人说是selinux安全策略致使的,因而也去用命令:setenforce 0关闭了,仍是不起做用。到此一直折腾这个问题好久,都没找到最终解决方法,最后仍是在这里看到有人说多是一个系统bug,可是应该不影响ES启动才对,仔细一些它也对,它仅仅是一个警告(WARN)级别的提示,由此我才从这个坑里面退了出来。架构

  竟然不是这个问题,那么就确定是其余啥缘由了,但是一直找啊找就是不知道啥问题啊,看日志每秒钟写进去的都是刚刚那个警告信息,没有其余错误啊,到这里完全绝望!最后实在没办法只有重装ES咯,不过还要ES中写入的数据不会清空。而后重装,配置,竟然还真就能够了,这真是奇妙,不过问题缘由我仍是不知道,因而我就回想最近对Linux系统的一些操做,后来终于想起我前些天把JDK给卸载了,从新安装了一个新的,我猜想SE安装前就关联了JAVA的,若是后来改变了,那就会影响到SE。socket

2、解决问题后的思考elasticsearch

(1)有时候看到的错误提示,可能不是咱们想要的东西,只是表象,解决问题的时候不要钻牛角尖测试

(2)在生产系统的话,任何可能的操做均可能影响其余系统,还好我这里是测试环境,之后必定要注意spa

(3)解决问题的时候要多尝试,不要怕麻烦,像我这里重装ES也是实在没办法才选择的,若是早一点这么选择,我也不会耽搁一天时候就找缘由

3、问题待续

  有时间再写..........

相关文章
相关标签/搜索