【发布时间】:2020-08-13 00:45:05
【问题描述】:
我从 Azure 市场安装了 3 个弹性搜索节点,任何节点都可以充当主节点。现在如何连接到集群?如果我有一个节点,我可以简单地将其 IP 与 Port(9200) 一起使用,但这里我有 3 个节点,那么如何获取集群端点?谢谢
【问题讨论】:
标签: azure elasticsearch
我从 Azure 市场安装了 3 个弹性搜索节点,任何节点都可以充当主节点。现在如何连接到集群?如果我有一个节点,我可以简单地将其 IP 与 Port(9200) 一起使用,但这里我有 3 个节点,那么如何获取集群端点?谢谢
【问题讨论】:
标签: azure elasticsearch
我就是这样做的,对我来说效果很好:
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 并且可以成为集群中的热点,它最好在客户端中配置所有节点,这样对于每个请求,任何一个节点都可以充当协调节点,如果您的工作量很大,您还可以考虑使用专用的协调节点以获得更好的性能。
希望这能回答您的问题,我没有提供代码 sn-p 因为不知道您使用的是哪种语言和客户端,在您的问题中,我认为代码不是问题,但您想详细了解这个概念.
【讨论】:
感谢大家的时间和所有回复的人;事实证明,默认情况下,自我管理 ES 的 Azure 市场副本仅设置“内部负载均衡器”。配置“外部负载均衡器”后,我就能够获得集群端点。现在一切就绪。
【讨论】: