#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, на которой размещен узел шлюза.
Порт должен соответствовать транспортному порту удаленного узла.