記錄一次Elasticsearch線上部署后出現:org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []的問題解決


說明:ES部署了3個節點,而一般情況只要這三個節點的IP其中一個都可以連接,Web端口使用的是9500,Client連接使用的是9600,調用程序使用了ES原生Client進行連接。

解決方法:

1、出現這樣的問題,一般檢查集群名稱和IP是否填寫正確。

2、注意,比如提供的IP能Telnet成功,但不一定代表能正常使用Client進行連接。

3、我猜測Client的原理:如果在構造Client對象時,傳入了一個IP之后且連接成功后,ES會返回整個集群的IP給Client,此時的Client會逐個進行連接。

4、如果定位到IP問題之后,建議直接使用內網IP,也就是ES使用的IP進行連接來排查是不是IP問題。

問題解決過程分析:

1、由於生成環境的部署結構復雜且要考慮安全性,所以一般會做很多措施,而提供連接的IP並非是真實ES的內網IP,而其余集群的內網IP不一定能開放訪問。

2、使用netstat -tnp | grep SYN分析出有多少IP在等待連接的,從而分析出到底是不是一直在連接集群中的內網IP。

3、分析出Client在通過提供的不是ES的內網IP連接之后還會連接ES真實的內網IP時,就應該是第一次Client連接ES成功后返回的IP列表,ES通知Client通過這些IP連接ES;解決方法可以這樣:在Linux下使用iptables進行IP轉發,比如提供的IP為192.168.1.2:9600,而ES集群的IP為(192.168.3.2/192.168.3.3/192.168.3.4),那么執行將192.168.3.2~的全部IP轉發到192.168.1.2中。iptables轉發參考:http://www.cnblogs.com/EasonJim/p/7589394.html

后話:

沒錯,我已經入坑了,現在持續填坑中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM