Как настроить первый кластер Elasticsearch для разработки

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

Как настроить первый кластер Elasticsearch для разработки

Настройка первого кластера Elasticsearch в основном сводится к выбору безопасной конфигурации для разработки и проверке того, что узел действительно присоединился к ожидаемому кластеру. Одноузловая конфигурация достаточна для базовых тестов индексации и поиска; локальная многоузловая конфигурация помогает изучить обнаружение и распределение шардов.

Основное внимание уделяется локальной разработке. Не используйте эти упрощенные настройки для публичного или производственного кластера.

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

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

  1. Среда выполнения Java: Последние дистрибутивы Elasticsearch включают встроенный JDK. Если вы используете пакет или дистрибутив, который его не включает, установите версию Java, требуемую для этого выпуска Elasticsearch.
  2. Загрузка Elasticsearch: Загрузите бинарный дистрибутив нужной версии Elasticsearch с официального сайта Elastic.
  3. Системные ресурсы: Для базового тестирования разработки обычно достаточно 2 ГБ ОЗУ, хотя для многоузлового тестирования рекомендуется больше.

Шаг 1: Загрузка и распаковка Elasticsearch

После загрузки (обычно в виде файла .zip или .tar.gz) распакуйте архив в каталог, где вы хотите разместить файлы кластера (например, ~/elasticsearch-8.12.0). Этот каталог называется Домашним каталогом Elasticsearch.

Шаг 2: Настройка одноузлового кластера (стандартная конфигурация для разработки)

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

Файлы конфигурации находятся в каталоге config/ внутри вашего домашнего каталога Elasticsearch.

Основная конфигурация (config/elasticsearch.yml)

Основным файлом конфигурации является elasticsearch.yml. Для локальной одноузловой настройки необходимо настроить как минимум имя кластера и имя узла.

# Конфигурация кластера
cluster.name: dev-cluster

# Конфигурация узла
node.name: node-1

# Сетевые настройки (используйте localhost для разработки)
network.host: 127.0.0.1

# HTTP порт (по умолчанию 9200)
http.port: 9200

# Важно для разработки: отключить безопасность изначально (использовать с осторожностью в производстве!)
xpack.security.enabled: false

Предупреждение о безопасности: Отключение xpack.security.enabled является обычной практикой для начальной настройки разработки, чтобы упростить тестирование. Никогда не запускайте эту конфигурацию в общедоступной среде. Для современных версий Elasticsearch (7.x+) часто требуется сначала выполнить команды настройки для генерации начальных паролей, если безопасность остается включенной.

Запуск одноузлового кластера

Перейдите в корень распакованного каталога и запустите соответствующий скрипт запуска. В Linux/macOS:

./bin/elasticsearch

В Windows с использованием PowerShell:

.\bin\elasticsearch.bat

Подождите, пока в журналах не появится сообщение об успешном запуске узла, обычно показывающее сообщение типа started.

Шаг 3: Проверка статуса кластера

После запуска процесса вы можете проверить статус кластера с помощью curl на порту HTTP по умолчанию (9200).

Проверка здоровья кластера

Эта команда проверяет общее состояние кластера:

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

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

epoch      timestamp cluster     status node.total node.data shards prio initialized
1678886400 10:00:00  dev-cluster green    1          1        0   0           1

Поле status должно быть green, что указывает на здоровый одноузловой кластер.

Проверка информации об узлах

Вы также можете проверить информацию об узлах:

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

Шаг 4: Настройка многоузлового кластера (для реалистичного тестирования)

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

Структура каталогов

Создайте отдельные каталоги для каждого узла в вашей основной рабочей области (например, es_data/node1, es_data/node2). Скопируйте базовый дистрибутив Elasticsearch в каждый из этих каталогов или свяжите их с основной установкой.

Различия в конфигурации узлов

Для каждого узла создайте уникальный файл config/elasticsearch.yml:

Конфигурация узла 1 (es_data/node1/config/elasticsearch.yml)

cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
transport.port: 9300
path.data: node1_data  # Уникальный путь к данным
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Эта строка указывает узлу 1, как найти других участников
cluster.initial_master_nodes: ["node-1", "node-2"]

Конфигурация узла 2 (es_data/node2/config/elasticsearch.yml)

cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201  # Должен использовать другой HTTP порт
transport.port: 9301  # Должен использовать другой транспортный порт
path.data: node2_data  # Уникальный путь к данным
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# Эта строка указывает узлу 2, как найти других участников
cluster.initial_master_nodes: ["node-1", "node-2"]

Запуск многоузлового кластера

  1. Запустите узел 1: Перейдите в es_data/node1 и выполните ./bin/elasticsearch.
  2. Запустите узел 2: Перейдите в es_data/node2 и выполните ./bin/elasticsearch.

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

Проверьте количество узлов с помощью API на любом работающем HTTP порту (например, 9200):

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

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

ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1    15           50       0   0.01    0.02    0.01    mdi        *      node-1
127.0.0.1    16           51       0   0.00    0.01    0.01    mdi        -      node-2

Если вы видите две записи в столбце name, ваш многоузловой кластер сформирован правильно.

Рекомендации для сред разработки

  • Используйте выделенные пути к данным: Всегда явно настраивайте path.data для каждого узла, особенно в многоузловых конфигурациях, чтобы предотвратить случайное загрязнение данных между экземплярами.
  • Уникальные порты: Используйте уникальные HTTP порты (http.port) и транспортные порты (transport.port) для каждого локального узла, чтобы они не конфликтовали.
  • Блокировка памяти: Для разработки убедитесь, что вы не сталкиваетесь с ограничениями размера кучи. Если вы получаете ошибки запуска, связанные с памятью, возможно, потребуется настроить размер кучи JVM в файле jvm.options (хотя значения по умолчанию обычно подходят для базового тестирования).

Следующие шаги: Индексация данных

После запуска кластера следующим логическим шагом является создание индекса и настройка маппинга. Например, чтобы создать простой индекс с именем products:

curl -X PUT "http://localhost:9200/products?pretty"

Эта базовая настройка позволяет вам начать взаимодействие с Elasticsearch с помощью клиентских библиотек или Kibana.