由於client.transport.sniff設置爲true造成的NoNodeAvailableException

        我們在本機通過公網ip訪問遠程的elasticsearch時,在連接時一直報NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{Hxzs7TJsQYSGg_3KJ7xDxA}{xxxx}{xxxxx:13931}, {#transport#-2}{AiGx9rCmSFqhyZ24patEsg}{xxxx}{xxxxxx:13930}, {#transport#-3}{skHp6G68TK6Gdh5cOUN1sg}{xxxxxx}{xxxx:13935}];但在服務器本地通過curl http://127.0.0.1:39200或在瀏覽器裏錄入http://公網ip:39200時,一切訪問正常;

         通過對java連接代碼進行排查,原來是由於參數client.transport.sniff設置爲true造成的;client.transport.sniff爲elasticsearch的集羣自動嗅探功能,通過該參數可以自動找到所有的集羣服務器ip,並將該ip返回給客戶端,但由於我們在服務器上配置的集羣Ip均爲內網ip,因此客戶端是無法直接訪問到的;所以造成了NoNodeAvailableException異常,把該參數配置爲false後,本機連遠程es的ip正常了,但需要注意時,需要將所有的ip配置在yml或properties參數中;
      


 
//配置信息
log.info("port: " + port);
Settings esSetting = Settings.builder()
        .put("client.transport.sniff", true)//增加嗅探機制,找到ES集羣,通過遠程ip連接es時該參數須爲false
        .put("thread_pool.search.size", Integer.parseInt(StringUtils.isEmpty(poolSize) ? "5" : poolSize))//增加線程池個數,暫時設爲5
        .put("cluster.name", clusterName)
        .put("client.transport.ignore_cluster_name", true)
        .build();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章