当主节点发生故障时,通过 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 客户端设置:
client.transport.sniff模式为false,client 只会尝试连接已配置的 IPs,如:
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));
client.transport.sniff模式为true,client 将首先连接到配置的 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
我有一个包含 10 个节点的 Elasticsearch 集群。通过 Java API 连接到集群时,我只连接到主节点。
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));
如果主节点出现故障,我的程序会自动连接到下一个主节点吗?如果我在初始主节点失败后必须重新启动 Java 程序怎么办?
对于 TransportClient 客户端,有一个 sniff 客户端设置:
client.transport.sniff模式为false,client 只会尝试连接已配置的 IPs,如:
addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("masterNode"), 9300));
client.transport.sniff模式为true,client 将首先连接到配置的 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