Elasticsearch集群连接

时间:2017-10-20 07:10:03

标签: java elasticsearch client elasticsearch-java-api

这可能是一个愚蠢的问题,但我无法找到答案。 如果我的群集中有3个节点,那么在创建传输客户端时是否需要提供每个节点的IP和端口,以便我可以与每个节点进行通信?

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和端口? 请帮忙

1 个答案:

答案 0 :(得分:0)

如果所有三个节点都在一个群集中,则只能与其中一个节点通信。他们将在幕后进行所有必要的沟通。

您还可以设置群集以使loadbalancer节点没有数据,并始终连接到此节点。更多详情here

更新

假设您要在同一服务器上运行同一群集的3个节点: 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