Вопрос или проблема
Вздох…. Занимаюсь этим уже некоторое время и теперь обращаюсь к сообществу….
У меня новый кластер из 3 узлов для Elasticsearch. Ubuntu 18.04 TLS
Я получаю это, когда выполняю curl -XGET 'http://localhost:9200/_cluster/health'
{"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":null}],"type":"master_not_discovered_exception","reason":null},"status":503}
Вот мой elasticsearch.yml (очищенный)
# ---------------------------------- Кластер -----------------------------------
cluster.name: clustername
# ------------------------------------ Узел ------------------------------------
node.name: thisnode1
network.publish_host: thisnode1
# ----------------------------------- Пути ------------------------------------
#
# Путь к каталогу, где будут храниться данные (разделяйте несколько мест запятой):
#
path.data: /var/lib/elasticsearch/data
#
# Путь к файлам журналов:
#
path.logs: /var/log/elasticsearch
#
# ---------------------------------- Сеть -----------------------------------
#
network.host: 0.0.0.0
#
http.port: 9200
#
# --------------------------------- Обнаружение ----------------------------------
#
discovery.zen.ping.unicast.hosts: ["10.0.0.2", "10.0.0.3", "10.0.0.4"]
discovery.zen.minimum_master_nodes: 2
node.master: true
node.data: true
И ошибка в журнале:
[2019-07-26T14:47:09,740][WARN ][o.e.c.c.ClusterFormationFailureHelper] [thisnode1] мастер не обнаружен или еще не избран, для выборов требуется узел с id [VEAPSAP3SMqYW-OR-J_24A], обнаружены [{thisnode2}{scPfMQZcS4uigjLCUtafFQ}{IBMAZFVNRQ6zOJ2w3_RP8A}{thisnode2}{10.0.0.3:9300}{ml.machine_memory=16794214400, ml.max_open_jobs=20, xpack.installed=true}, {thisnode3}{t3lePkSJRlyRVCVHvN_WQA}{oUBItui6TaC1cIkc14YiJw}{thisnode3}{10.0.0.4:9300}{ml.machine_memory=16794214400, ml.max_open_jobs=20, xpack.installed=true}] что не является кворумом; обнаружение продолжится, используя [10.0.0.3:9300, 10.0.0.4:9300] от провайдеров хостов и [{thisnode1}{TNTCGgbJSPe6iDogwAajQg}{F3yaKygbT4O6PSG8kFPbIQ}{thisnode1}{10.0.0.2:9300}{ml.machine_memory=16794214400, xpack.installed=true, ml.max_open_jobs=20}] из последнего известного состояния кластера; срок узла 12, последняя принятая версия 49 в сроке 12
Очевидно, я пропустил какую-то настройку. Я просто не уверен, в чем именно.
Заранее спасибо за любую помощь!
На благо других… Я установил Elasticsearch на всех трех машинах и запустил сервис, чтобы убедиться, что он работает. Видимо, это была моя ошибка. Рассматривая журналы, я нашел запись, которая говорила, что он присоединяется к неправильному кластеру. Я удалил содержимое каталога данных и перезапустил сервисы. Это и все. Все три узла с радостью увидели друг друга.
Ответ или решение
Решение проблемы master_not_discovered_exception в кластере Elasticsearch на трех узлах
Проблема, с которой вы столкнулись, известна как master_not_discovered_exception
, и возникает она из-за того, что узлы кластера не могут обнаружить друг друга и, следовательно, не могут выбрать главного узла (master node). Основные причины такой проблемы могут заключаться в неправильной настройке конфигурации, проблемах с сетевым подключением или массивах данных, оставшихся от предыдущих установок. В этом ответе мы рассмотрим основные шаги для диагностики и устранения вашей проблемы.
Шаг 1: Проверка конфигурации
На основе приведенной вами конфигурации elasticsearch.yml
, важно удостовериться, что:
-
Имя кластера и узлов: Убедитесь, что имя кластера (
cluster.name
) одинаково на всех узлах, чтобы они могли видеть друг друга. Это уже сделано в вашем случае, посколькуclustername
присутствует в каждом файле. -
Настройка discovery: Ваша директива
discovery.zen.ping.unicast.hosts
должна содержать IP-адреса всех узлов кластера. Важно убедиться, что эти адреса правильные (10.0.0.2, 10.0.0.3, 10.0.0.4) и что узлы могут соединяться между собой по этим адресам. -
Определение минимального числа узлов: Параметр
discovery.zen.minimum_master_nodes
определяет минимальное количество узлов, необходимых для выбора главного узла. Для кластера из трех узлов этот параметр должен быть установлен на 2. У вас это настроено верно. -
Настройки сети: Убедитесь, что настройки
network.host
иnetwork.publish_host
корректно определяют, как узлы общаются друг с другом. Обычно рекомендуется использовать внутренние IP-адреса.
Шаг 2: Проверка сетевых конфигураций
Поскольку вы работаете с кластером из трех узлов, важно удостовериться в том, что:
- Порты: Убедитесь, что порты 9200 и 9300 открыты на всех узлах и доступны для соединений. Подразумевается, что вы используете стандартные порты для Elasticsearch.
- Firewall/iptables: Проверьте настройки брандмауэра, которые могут блокировать порты. Убедитесь, что правила соответствуют необходимым условиям для работы Elasticsearch.
Шаг 3: Очистка данных и переинициализация
В вашем случае, как вы указали в дополнительных комментариях, было обнаружено, что установка на всех трех машинах перед началом работы привела к соперничеству за главный узел. Это распространенная проблема.
Рекомендации для решения:
-
Очистите папку данных: Убедитесь, что на всех узлах очищен каталог данных. Это можно сделать, удалив содержимое
/var/lib/elasticsearch/data
и перезапустив службу Elasticsearch.sudo rm -rf /var/lib/elasticsearch/data/* sudo systemctl restart elasticsearch
-
Проверка системных логов: После перезапуска узлов проверьте логи (обычно находятся в
/var/log/elasticsearch/
) для получения более подробной информации о процессе объединения узлов.
Шаг 4: Перезапуск и проверка статуса кластера
После выполнения всех вышеперечисленных шагов переведите службы Elasticsearch в состояние active
и убедитесь, что каждый узел функционирует правильно:
curl -XGET 'http://10.0.0.2:9200/_cluster/health?pretty'
curl -XGET 'http://10.0.0.3:9200/_cluster/health?pretty'
curl -XGET 'http://10.0.0.4:9200/_cluster/health?pretty'
Эти команды предоставят информацию о статусе кластера, и если все настройки были выполнены правильно, вы должны увидеть хорошее состояние кластера.
Заключение
Когда вы наладите конфигурацию, сетевые настройки и корректно очистите данные, ваш кластер Elasticsearch должен начать функционировать без ошибок. Если же проблема продолжает возникать, рекомендуется просмотреть документацию Elasticsearch и удостовериться, что версия Elasticsearch на всех узлах совпадает. Если появятся новые ошибки, не стесняйтесь возвращаться за помощью к сообществу или consult Elasticsearch поддержкой.