在開始前先來介紹下背景:我的日志采集系統采用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部署在最后一台服務器上,部署過程遇到許多問題,特意記錄下來,以后有新的問題出現也會持續更新。
一、問題1
今天在啟動集群的時候108節點上出現ES【elasticsearch 集群健康值未連接】問題,而97上的ES能正常啟動情況下我們用head插件查看elasticsearch集群狀態如下圖:

(圖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。
二、解決問題后的思考
(1)有時候看到的錯誤提示,可能不是我們想要的東西,只是表象,解決問題的時候不要鑽牛角尖
(2)在生產系統的話,任何可能的操作都可能影響其他系統,還好我這里是測試環境,以后一定要注意
(3)解決問題的時候要多嘗試,不要怕麻煩,像我這里重裝ES也是實在沒辦法才選擇的,如果早一點這么選擇,我也不會耽擱一天時候就找原因
三、問題待續
有時間再寫..........
