【问题标题】:How to connect to elasticsearch cluster with multiple nodes installed on Azure ? How do I get elasticsearch endpoint?如何连接到安装在 Azure 上的多个节点的 elasticsearch 集群?如何获得弹性搜索端点?
【发布时间】:2020-08-13 00:45:05
【问题描述】:

我从 Azure 市场安装了 3 个弹性搜索节点,任何节点都可以充当主节点。现在如何连接到集群?如果我有一个节点,我可以简单地将其 IP 与 Port(9200) 一起使用,但这里我有 3 个节点,那么如何获取集群端点?谢谢

【问题讨论】:

    标签: azure elasticsearch


    【解决方案1】:

    我就是这样做的,对我来说效果很好:

    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");
    

    【讨论】:

      【解决方案2】:

      如果所有三个节点都属于同一个集群,则无需指定所有节点,即使一个节点 ip 也足以连接到集群。

      但上述方法有一些缺点,在工作负载较少的小型集群中,它很好,因为在这种情况下,您在 elasticsearch 客户端中配置的只有一个节点将充当 co-ordinating node 并且可以成为集群中的热点,它最好在客户端中配置所有节点,这样对于每个请求,任何一个节点都可以充当协调节点,如果您的工作量很大,您还可以考虑使用专用的协调节点以获得更好的性能。

      希望这能回答您的问题,我没有提供代码 sn-p 因为不知道您使用的是哪种语言和客户端,在您的问题中,我认为代码不是问题,但您想详细了解这个概念.

      【讨论】:

        【解决方案3】:

        感谢大家的时间和所有回复的人;事实证明,默认情况下,自我管理 ES 的 Azure 市场副本仅设置“内部负载均衡器”。配置“外部负载均衡器”后,我就能够获得集群端点。现在一切就绪。

        【讨论】:

        • 很高兴知道您能够解决问题社区。​​span>
        猜你喜欢
        • 1970-01-01
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多