Узел поиска не входит в кластер: имя кластера не совпадает
Узлы находят друг друга по списку адресов и проверяют имя кластера. Несовпадение имени означает, что узел образует собственный кластер из одного себя — при этом он исправно работает и отвечает, что усложняет обнаружение проблемы.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Имя кластера отличается от остальных узлов
Узел с другим именем не присоединяется. Он поднимает свой кластер и принимает данные отдельно.
-
Список узлов для обнаружения неполный
Узел не знает, к кому обращаться. Без начального списка обнаружение не работает вовсе.
-
Узел слушает только петлевой адрес
С петлевым адресом узел недоступен остальным. Обнаружение не проходит в обе стороны.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Имя кластера, число узлов и состояние.
curl -s localhost:9200/_cluster/health 2>/dev/nullКакие узлы видит этот узел.
curl -s localhost:9200/_cat/nodes?v 2>/dev/nullСообщения об обнаружении узлов.
journalctl -u elasticsearch -n 30 --no-pager | grep -iE "cluster|discovery|master"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Узел с другим именем не присоединяется. Он поднимает свой кластер и принимает данные отдельно.
- Как проверить
-
Посмотрите имя кластера и состав.
curl -s localhost:9200/_cluster/health 2>/dev/null | head -c 300; echo sudo grep -iE "^cluster.name" /etc/elasticsearch/elasticsearch.yml 2>/dev/null
- Как исправить
- Приведите имя кластера к одному значению на всех узлах. Данные, попавшие в отдельный кластер, придётся переносить отдельно.
- Почему происходит
- Узел не знает, к кому обращаться. Без начального списка обнаружение не работает вовсе.
- Как проверить
-
Посмотрите настройки обнаружения.
sudo grep -iE "^(discovery.seed_hosts|cluster.initial_master_nodes)" /etc/elasticsearch/elasticsearch.yml 2>/dev/null
- Как исправить
- Задайте адреса остальных узлов в списке обнаружения. Начальный список главных узлов нужен только при первом запуске кластера.
- Почему происходит
- С петлевым адресом узел недоступен остальным. Обнаружение не проходит в обе стороны.
- Как проверить
-
Посмотрите адрес прослушивания.
sudo ss -tlnp | grep -E ":9200|:9300" sudo grep -iE "^network.host" /etc/elasticsearch/elasticsearch.yml 2>/dev/null
- Как исправить
- Привяжите узел к адресу, доступному остальным, и ограничьте доступ брандмауэром. Открывать порты кластера во внешнюю сеть нельзя.
Пример вывода
Узел образовал собственный кластер из одного себя. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ curl -s localhost:9200/_cluster/health
{"cluster_name":"logs-prod-2","status":"green","number_of_nodes":1,...}
elasticsearch[12000]: master node changed {previous [], current [{node-3}]}
elasticsearch[12000]: elected-as-master ([1] nodes joined)
Связанные ошибки
- Elasticsearch: индексы переведены в режим только для чтения Elasticsearch блокирует запись при нехватке места: пороги watermark. Как снять блокировку правильно.
- etcd: узел не входит в кластер после переустановки Узел отказывается присоединяться: идентификатор кластера не совпадает с остальными. Разбор и безопасный порядок действий.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- Смена имени машины ломает работу служб После переименования часть служб отказывает: имя запомнено в настройках, сертификатах и кластерах.
- Узел кластера не поднимается: включён раздел подкачки Служба узла кластера отказывается стартовать при включённой подкачке. Как отключить правильно.
- Узлы очередей не соединяются: не совпадает файл общего секрета Узлы не видят друг друга, а команды управления отказывают: файл общего секрета различается или недоступен.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: could not bind to address Apache не занимает порт: конфликт с nginx, порт занят, нет прав на привилегированный порт.
Где встречается чаще всего
Источники
- Документация Elasticsearch: обнаружение узлов
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено узлом с другим именем кластера.