Есть ли способ развернуть разные кластеры Elasticsearch на одном хосте для демонстрации межкластерного поиска?

#docker #elasticsearch #cluster-computing #docker-container

#docker #elasticsearch #кластерные вычисления #docker-контейнер

Вопрос:

У меня есть 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"
    }
  }
}
  

но это не сработало, я предполагаю, что это связано с тем, как я определил кластеры, но я не нашел, что я делаю неправильно.

Ответ №1:

В документации говорится, что :

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

Более того, страница удаленного кластера сообщает нам, что

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

Поскольку все узлы имеют роли master amp; data по умолчанию, ни один узел не может выступать в качестве узла шлюза, и межкластерные операции не могут работать.

У меня там работает один.

Определение статического удаленного кластера должно выполняться на каждом узле в следующих кластерах с использованием либо переменных env (как я сделал в приведенном примере), либо elasticsearch.yml .

URL-адрес, с которым вам нужно сопоставить, — это URL-адрес службы docker, на которой размещен узел шлюза.

Порт должен соответствовать транспортному порту удаленного узла.