当主节点发生故障时,通过 Java API 连接 Elasticsearch 集群

Elasticsearch cluster connection via Java API when master node fails

我有一个包含 10 个节点的 Elasticsearch 集群。通过 Java API 连接到集群时,我只连接到主节点。

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));

如果主节点出现故障,我的程序会自动连接到下一个主节点吗?如果我在初始主节点失败后必须重新启动 Java 程序怎么办?

对于 TransportClient 客户端,有一个 sniff 客户端设置:

  1. client.transport.sniff模式为falseclient 只会尝试连接已配置的 IPs,如:

    addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));

  2. client.transport.sniff模式为trueclient 将首先连接到配置的 IPs,并通过 stats API 来发现集群可用数据节点以动态添加新主机和删除旧的。(注意:如果你的 cluster 和你的 client app 有不同的网络,连接到集群数据节点时会出现问题,如:

    Settings settings = Settings.settingsBuilder() .put("client.transport.sniff", true).build(); TransportClient client = new PreBuiltTransportClient(settings);

所以如你的问题,当sniff设置为true并且它们在同一网络下时,你连接的节点失败了,它仍然可以连接到 集群.

参考:https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.0/transport-client.html