有没有办法在一台主机上部署不同的Elasticsearch集群来演示Cross Cluster Search?

Is there a way to deploy different Elasticsearch clusters in one host to demonstrate Cross Cluster Search?

我有 3 个不同的 Elasticsearch 容器(我通过下一个命令 run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.9.2 部署)

我想将它们用作 3 个集群,每个集群中有 1 个节点。之后我将其中的 2 个定义为一个集群的远程集群(端口 9200 是“主”,9201 9202 是远程)。定义它我使用:

cluster:
    remote:
        cluster_one: 
            seeds: 127.0.0.1:9201
        cluster_two: 
            seeds: 127.0.0.1:9202

我尝试 运行 搜索

GET /cluster_one:twitter/_search
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}

但它没有用,我认为它与我定义集群的方式有关,但我没有发现我做错了什么。

documentation 告诉我们:

Cross-cluster search and cross-cluster replication require the remote_cluster_client role.

此外,remote cluster 页面告诉我们

role: By default, any non-master-eligible node can act as a gateway node. Dedicated master nodes are never selected as gateway nodes.

由于默认情况下所有节点都具有masterdata角色,因此没有节点可以充当网关节点并且cross-cluster操作无法进行。

我有一个工作 there

需要使用 env 变量(正如我在提供的示例中所做的那样)或 elasticsearch.yml.

在以下集群中的每个节点上完成静态远程集群定义

您需要匹配的 url 是托管网关节点的 docker 服务的 url。

端口需要与远程节点的transport port相匹配。