Пошаговое руководство по настройке базового кластера из трех узлов

Узнайте, как быстро настроить отказоустойчивый базовый кластер Elasticsearch из трех узлов. Это пошаговое руководство охватывает основные настройки в `elasticsearch.yml`, запуск обнаружения кластера с помощью `cluster.initial_master_nodes`, запуск служб и проверку работоспособности и репликации шардов на всех узлах с использованием практических команд cURL.

43 просмотров

Пошаговое руководство по настройке базового трехузлового кластера

Создание отказоустойчивого кластера Elasticsearch является фундаментальным для достижения высокой доступности и горизонтальной масштабируемости вашей инфраструктуры поиска и аналитики. Трехузловой кластер представляет собой отличную отправную точку, обеспечивая избыточность, необходимую для выдерживания отказа одного узла без прерывания обслуживания. Это подробное руководство проведет вас через процесс установки, настройки и проверки базового трехузлового кластера Elasticsearch, идеально подходящего для сред разработки или небольших производственных развертываний.

К концу этого руководства у вас будет функциональный кластер, где данные могут безопасно распределяться и реплицироваться, используя основные распределенные возможности Elasticsearch.


Предварительные требования

Прежде чем приступить к настройке, убедитесь, что у вас есть следующее:

  1. Три отдельных сервера/виртуальные машины: Каждый будет размещать один узел. В этом руководстве мы предполагаем, что у вас готовы три отдельных машины или контейнера Docker.
  2. Java Development Kit (JDK): Elasticsearch требует установленного совместимого JDK на всех узлах (например, JDK 17, в зависимости от вашей версии Elasticsearch).
  3. Сетевое взаимодействие: Убедитесь, что все три узла могут общаться друг с другом по необходимым портам (порт HTTP по умолчанию: 9200, порт транспорта по умолчанию: 9300).
  4. Идентичная установка Elasticsearch: Загрузите и распакуйте одинаковую версию Elasticsearch на все три узла.

Шаг 1: Настройка elasticsearch.yml каждого узла

Файл конфигурации elasticsearch.yml, расположенный в каталоге config/ вашей установки Elasticsearch, имеет решающее значение для определения поведения каждого узла в кластере. Вы должны настроить параметры, специфичные для каждого узла.

Мы неявно определим три роли: один узел, подходящий для роли мастера, и три узла, подходящие для роли данных. Для трехузлового кластера обычной практикой является предоставление всем узлам ролей мастера, данных и индексирования.

Общие настройки для всех узлов

Убедитесь, что эти настройки идентичны во всех трех файлах конфигурации:

# Имя кластера: должно быть одинаковым на всех узлах
cluster.name: my-three-node-cluster

# Настройки обнаружения (критически важны для первоначального присоединения)
# Используйте список начальных узлов для загрузки обнаружения
discovery.seed_hosts: ["node1_ip:9300", "node2_ip:9300", "node3_ip:9300"]

# Требуется для кворума (N/2 + 1). Для 3 узлов нам нужно 2 голоса.
cluster.initial_master_nodes: ["node1_name", "node2_name", "node3_name"]

# Сетевые настройки (убедитесь, что привязка к правильному IP-адресу)
network.host: 0.0.0.0 # Или конкретный частный IP-адрес хоста

# Порт HTTP (внешний доступ)
http.port: 9200

# Порт транспорта (внутренняя связь кластера)
transport.port: 9300

Уникальные настройки для каждого узла

Каждому узлу требуется уникальное имя node.name и, возможно, уникальный path.data, если он запускается на той же машине или использует общее хранилище.

Конфигурация узла 1 (node1_ip)

# Уникальный идентификатор для Узла 1
node.name: node-1

# Если пути отличаются
# path.data: /var/lib/elasticsearch/data_node1

Конфигурация узла 2 (node2_ip)

# Уникальный идентификатор для Узла 2
node.name: node-2

Конфигурация узла 3 (node3_ip)

# Уникальный идентификатор для Узла 3
node.name: node-3

Важное примечание о cluster.initial_master_nodes: Эта настройка используется только при самом первом запуске кластера. Как только кластер сформируется, Elasticsearch будет управлять выбором мастера internally. Если вам когда-либо потребуется перезапустить полностью неработающий кластер, вы должны убедиться, что эти имена соответствуют первоначальной конфигурации.


Шаг 2: Настройка ролей (необязательно, но рекомендуется)

Хотя конфигурация по умолчанию позволяет узлам выполнять все роли (мастер, данные, индексирование, координирование), в более крупных развертываниях роли разделены. Для надежной трехузловой установки мы гарантируем, что все узлы могут быть выбраны в качестве мастера.

Добавьте следующую конфигурацию ролей во все три файла elasticsearch.yml:

# Включить все стандартные роли на всех узлах для этой начальной настройки
node.roles: [ master, data, ingest, remote_cluster_client ]

Обработка кворума для отказоустойчивости

С тремя узлами кластер может выдержать потерю одного узла, сохраняя кворум (2 из 3 узлов остаются). Это управляется списком cluster.initial_master_nodes, предоставленным на Шаге 1.


Шаг 3: Запуск узлов кластера

Запустите Elasticsearch последовательно на каждом узле. Как правило, безопаснее сначала запускать узлы, перечисленные первыми в cluster.initial_master_nodes, хотя современные версии Elasticsearch хорошо обрабатывают неупорядоченный запуск.

На Узле 1, Узле 2 и Узле 3:

Перейдите в каталог установки Elasticsearch и выполните:

# Для запуска в foreground (полезно для отладки)
bin/elasticsearch

# Для запуска в background (рекомендуется для production)
bin/elasticsearch -d

Отслеживайте журналы (logs/elasticsearch.log) на каждом узле на предмет сообщений об успешном запуске, особенно тех, которые указывают на успешное присоединение к кластеру.


Шаг 4: Проверка состояния кластера

После запуска всех узлов используйте API _cat/health, доступный через HTTP-порт любого узла (по умолчанию 9200), чтобы подтвердить состояние кластера.

Получите доступ к этому с машины, которая может достичь узлов (например, через curl):

Проверка состояния:

curl -X GET "http://node1_ip:9200/_cat/health?v"

Ожидаемый фрагмент вывода:

epoch timestamp cluster status node.total node.data shards pri relo init unassigned unpersisted
1701331200 12:00:00 my-three-node-cluster green 3 3 0 0 0 0 0 0

Если status green, а node.total равен 3, ваш кластер работает правильно.

Проверка членства узлов

Чтобы убедиться, что все узлы видят друг друга, проверьте список узлов:

curl -X GET "http://node1_ip:9200/_cat/nodes?v"

Вы должны увидеть три отдельных записи, соответствующие node-1, node-2 и node-3, каждая из которых показывает их IP-адреса и роли (m для подходящего мастера, d для данных).


Шаг 5: Создание тестового индекса с репликацией

Чтобы проверить способность кластера распределять данные и обрабатывать репликацию, мы должны создать индекс, указав как минимум одну реплику.

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

Команда создания индекса:

```bash
curl -X PUT "http://node1_ip:9200/test_data_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3