2017-10-20 268 views
1

這可能是一個愚蠢的問題,但我無法找到答案。 如果我的集羣中有3個節點,那麼在創建傳輸客戶端時需要提供每個節點的IP和端口,以便我可以與每個節點通信?Elasticsearch集羣連接

new PreBuiltTransportClient(settings, AuthenticationPlugin.class).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 
         Integer.parseInt("9300"))) 
         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 
         Integer.parseInt("9301"))) 
InetSocketTransportAddress(InetAddress.getByName("localhost"), 
         Integer.parseInt("9302")));; 

有什麼辦法,我不需要提供每個節點的IP和端口? 請幫忙

回答

0

如果所有三個節點都在一個集羣中,您只能與其中的一個進行通信。他們將在現場進行所有必要的溝通。

您還可以設置羣集以使負載均衡器節點沒有數據並始終連接到此節點。更多詳情here

更新:

讓說你要在同一臺服務器上運行同一個集羣的三個節點: node1.local node2.local node3.local

配置文件看起來像這樣

node1.local

cluster.name: BillyMiligan 
node.name: "node1.local" 
network.host: "localhost" 
transport.tcp.port: 9301 
http.port: 9201 
discovery.zen.ping.unicast.hosts: ["node1.local:9301", "node2.local:9302", "node3.local:9303"] 
discovery.zen.minimum_master_nodes: 2 

node2.local

cluster.name: BillyMiligan 
node.name: "node2.local" 
network.host: "localhost" 
transport.tcp.port: 9302 
http.port: 9202 
discovery.zen.ping.unicast.hosts: ["node1.local:9301", "node2.local:9302", "node3.local:9303"] 
discovery.zen.minimum_master_nodes: 2 

node3.local

cluster.name: BillyMiligan 
node.name: "node3.local" 
network.host: "localhost" 
transport.tcp.port: 9303 
http.port: 9203 
discovery.zen.ping.unicast.hosts: ["node1.local:9301", "node2.local:9302", "node3.local:9303"] 
discovery.zen.minimum_master_nodes: 2 
+0

如果我連接到節點1(本地主機,9300),但一些如何ES節點出現故障,有2個節點端口仍然運行[(本地主機,9301)和(localhost,9302)。所有節點都在單個集羣中,那麼我的傳輸客戶端將自動連接到正在運行的節點之一(9301或9302)? – Wolverine

+0

每個elasticsearch節點至少使用2個端口(transport.tcp.port:9300 默認爲http.port:9200) 如果您在同一臺服務器上啓動多個節點,請確保您覆蓋這兩個端口 – pkhlop

+0

約定elasticsearch對每個端口使用2個端口1爲tcp和1爲http,但我仍然不清楚我的問題 \t **如果我連接到節點1(本地主機,9300),但一些ES節點如何關閉,並有2個節點仍在運行端口[(localhost,9301)和(localhost,9302)。所有節點都在單個集羣中,那麼我的傳輸客戶端將自動連接到正在運行的節點之一(9301或9302)?? ** – Wolverine