Elasticsearch 3 узловый кластер (master_not_discovered_exception)

Вопрос или проблема

Вздох…. Занимаюсь этим уже некоторое время и теперь обращаюсь к сообществу….

У меня новый кластер из 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, важно удостовериться, что:

  1. Имя кластера и узлов: Убедитесь, что имя кластера (cluster.name) одинаково на всех узлах, чтобы они могли видеть друг друга. Это уже сделано в вашем случае, поскольку clustername присутствует в каждом файле.

  2. Настройка discovery: Ваша директива discovery.zen.ping.unicast.hosts должна содержать IP-адреса всех узлов кластера. Важно убедиться, что эти адреса правильные (10.0.0.2, 10.0.0.3, 10.0.0.4) и что узлы могут соединяться между собой по этим адресам.

  3. Определение минимального числа узлов: Параметр discovery.zen.minimum_master_nodes определяет минимальное количество узлов, необходимых для выбора главного узла. Для кластера из трех узлов этот параметр должен быть установлен на 2. У вас это настроено верно.

  4. Настройки сети: Убедитесь, что настройки network.host и network.publish_host корректно определяют, как узлы общаются друг с другом. Обычно рекомендуется использовать внутренние IP-адреса.

Шаг 2: Проверка сетевых конфигураций

Поскольку вы работаете с кластером из трех узлов, важно удостовериться в том, что:

  • Порты: Убедитесь, что порты 9200 и 9300 открыты на всех узлах и доступны для соединений. Подразумевается, что вы используете стандартные порты для Elasticsearch.
  • Firewall/iptables: Проверьте настройки брандмауэра, которые могут блокировать порты. Убедитесь, что правила соответствуют необходимым условиям для работы Elasticsearch.

Шаг 3: Очистка данных и переинициализация

В вашем случае, как вы указали в дополнительных комментариях, было обнаружено, что установка на всех трех машинах перед началом работы привела к соперничеству за главный узел. Это распространенная проблема.

Рекомендации для решения:

  1. Очистите папку данных: Убедитесь, что на всех узлах очищен каталог данных. Это можно сделать, удалив содержимое /var/lib/elasticsearch/data и перезапустив службу Elasticsearch.

    sudo rm -rf /var/lib/elasticsearch/data/*
    sudo systemctl restart elasticsearch
  2. Проверка системных логов: После перезапуска узлов проверьте логи (обычно находятся в /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 поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...