如何解决如何使用Azure上安装的多个节点连接到Elasticsearch群集?如何获得Elasticsearch端点?
我已经从Azure市场安装了3个弹性搜索节点,任何节点都可以充当主节点。现在如何连接到群集?如果我有一个节点,我可以简单地将其IP与Port(9200)一起使用,但是在这里我有3个节点,那么如何获得群集端点?谢谢
解决方法
这是我的工作方式,对我来说很有效:
public class ElasticsearchConfig {
private Vector<String> hosts;
public void setHosts(String hostString) {
if(hostString == null || hostString.trim().isEmpty()) {
return;
}
String[] hostParts = hostString.split(",");
this.hosts = new Vector<>();
Collections.addAll(this.hosts,hostParts);
}
}
public class ElasticClient {
private final ElasticsearchConfig config;
private RestHighLevelClient client;
public ElasticClient(ElasticsearchConfig config) {
this.config = config;
}
public void start() throws Exception {
HttpHost[] httpHosts = new HttpHost[config.getHosts().size()];
config.getHosts()
.stream()
.map(host -> new HttpHost(host.split(":")[0],Integer.valueOf(host.split(":")[1])))
.collect(Collectors.toList())
.toArray(httpHosts);
client = new RestHighLevelClient(RestClient.builder(httpHosts));
System.out.println("Started ElasticSearch Client");
}
public void stop() throws Exception {
if (client != null) {
client.close();
}
client = null;
}
}
按如下所示设置ElasticsearchConfig:
ElasticsearchConfig config = new ElasticsearchConfig();
config.setHosts("ip1:port,ip2:port,ip3:port");
,
如果所有三个节点都属于同一群集,则无需指定所有节点,甚至一个节点ip也足以连接到群集。
但是上述方法有一些缺点,并且在工作量较少的小型集群中很好,因为在这种情况下,您在Elasticsearch客户端中配置的只有一个节点将充当co-ordinating node并可能成为集群中的热点,最好在客户端中配置所有节点,这样对于每个请求,任何一个节点都可以充当协调节点,并且如果您的工作量很大,您还可以考虑使用专用的协调节点来获得更好的性能。
希望这个回答您的问题,但我不提供代码段,因为您不知道您使用的是哪种语言和客户端,并且在您的问题中,我认为代码没有问题,但您想详细了解这个概念。 / p>
,感谢每个人的时间和所有答复的人;事实证明,默认情况下,自托管ES的Azure市场副本仅设置“内部负载均衡器”。配置“外部负载均衡器”后,便能够获得集群端点。现在都设置好了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。