Гид по технологиям

Установка и настройка кластера Elasticsearch (3 узла)

5 min read Инфраструктура Обновлено 10 Nov 2025
Установка Elasticsearch: кластер из 3 узлов
Установка Elasticsearch: кластер из 3 узлов

Что такое Elasticsearch

Elasticsearch — распределённый движок поиска и аналитики для структурированных и неструктурированных данных. Кратко: это NoSQL-хранилище с REST API для индексирования и быстрых поисковых запросов.

Определение: Elasticsearch — хранилище и движок поиска на Java с возможностью горизонтального масштабирования.

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

  • Ubuntu 18.04 LTS на всех трёх серверах;
  • Права sudo/root для установки пакетов и изменения системных параметров;
  • Доступ по приватным IP между узлами (порты 9300 TCP для внутрекластерной связи, 9200 TCP для HTTP API);
  • Рекомендация: минимум 4 ГБ RAM на узел (оптимально 8+ ГБ для prod).

Что мы сделаем

  1. Скачиваем Elasticsearch;
  2. Устанавливаем Java 1.8 (OpenJDK 8);
  3. Распаковываем и настраиваем Elasticsearch для кластерного режима (3 узла);
  4. Настраиваем системные лимиты и запускаем кластер;
  5. Тестируем и даём рекомендации по безопасности и отладке.

Скачивание Elasticsearch

Для Linux текущая версия в примере — 7.4.2. На каждом узле выполните (имя папки может отличаться):

mkdir elastic1
cd elastic1/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-linux-x86_64.tar.gz

Если нужен конкретный релиз, просмотрите архивы на сайте Elastic; обычно лучше брать поддерживаемую и стабильную версию.

Скриншот команды wget и загрузки архива

Установка Java

Elasticsearch требует Java. В примере ставим OpenJDK 8 на Ubuntu 18.04. На каждом узле выполните:

sudo apt update
sudo apt install openjdk-8-jdk
java --version

Проверьте, что java –version показывает версию 1.8.x.

Вывод java --version в терминале

Установка и распаковка Elasticsearch

Распакуйте загруженный архив на каждом узле:

tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz

Распаковка архива Elasticsearch

Конфигурация кластера

Допустим у нас три сервера с приватными IP:

  • es-node-1: 10.11.10.62 (инициирующий мастер);
  • es-node-2: 10.11.14.248;
  • es-node-3: 10.11.13.158.

Откройте файл config/elasticsearch.yml и внесите соответствующие параметры на каждом узле (внимательно проверьте IP и имена узлов):

vim config/elasticsearch.yml

Открытие конфигурационного файла в vim

Ниже приведены примеры конфигурации для каждого узла.

Конфигурация на мастере es-node-1

#give your cluster a name.
cluster.name: my-cluster

#give your nodes a name (change node number from node to node).
node.name: "es-node-1"

#define node 1 as master-eligible:
node.master: true

#define nodes 2 and 3 as data nodes:
node.data: true

#enter the private IP and port of your node:
network.host: 10.11.10.62
http.port: 9200

#detail the private IPs of your nodes:
discovery.zen.ping.unicast.hosts: ["10.11.10.62", "10.11.14.248","10.11.13.158"]

cluster.initial_master_nodes:
- 10.11.10.62

Обратите внимание: параметр cluster.initial_master_nodes добавляется только при первичном создании кластера и должен содержать список мастер-инициаторов.

Конфигурация на es-node-2

#give your cluster a name.
cluster.name: my-cluster

#give your nodes a name (change node number from node to node).
node.name: "es-node-2"

#define node 1 as master-eligible:
node.master: true

#define nodes 2 and 3 as data nodes:
node.data: true

#enter the private IP and port of your node:
network.host: 10.11.14.248
http.port: 9200

#detail the private IPs of your nodes:
discovery.zen.ping.unicast.hosts: ["10.11.10.62", "10.11.14.248","10.11.13.158"]

Конфигурация на es-node-3

#give your cluster a name.
cluster.name: my-cluster

#give your nodes a name (change node number from node to node).
node.name: "es-node-3"

#define node 1 as master-eligible:
node.master: true

#define nodes 2 and 3 as data nodes:
node.data: true

#enter the private IP and port of your node:
network.host: 10.11.13.158
http.port: 9200

#detail the private IPs of your nodes:
discovery.zen.ping.unicast.hosts: ["10.11.10.62", "10.11.14.248","10.11.13.158"]

Конфигурация elasticsearch.yml с перечислением узлов

Советы по конфигурации:

  • node.master: true означает «мастер-валидация возможна» — если вы хотите разделить роли, можете сделать только один мастер-узел или отметить node.master: false на некоторых узлах;
  • node.data: true указывает, что узел хранит и обслуживает шарды; для master-only узла поставьте node.data: false;
  • network.host может быть приватным IP; убедитесь, что firewall не блокирует 9300/9200.

Запуск и тестирование кластера

Настройка системных лимитов

Elasticsearch по умолчанию использует mmapfs; на Linux нужно увеличить vm.max_map_count:

sudo sysctl -w vm.max_map_count=262144

Для постоянного эффекта добавьте в /etc/sysctl.conf: vm.max_map_count=262144

Запуск узлов

На каждом узле (сначала запустите мастер es-node-1) выполните в каталоге распакованного Elasticsearch:

bin/elasticsearch

Чтобы запустить в фоне, добавьте -d:

bin/elasticsearch -d

Логи запуска Elasticsearch и добавление узлов в кластер

В логах вы увидите сообщения об присоединении узлов, например:

[2019-11-30T08:43:05,766][INFO ][o.e.c.s.ClusterApplierService] [es-node-1] added {{es-node-2}{V9-rBKeJRe2S8UPW96_XzA}{65Bu-WtmTj-Hce_lFAK-ng}{10.11.14.248}{10.11.14.248:9300}{dilm}{ml.machine_memory=4135120896, ml.max_open_jobs=20, xpack.installed=true},}, term: 1, version: 18, reason: Publication{term=1, version=18}
[2019-11-30T08:43:30,317][INFO ][o.e.c.s.MasterService     ] [es-node-1] node-join[{es-node-3}{TArASFSyS2-gVcNaH-XosQ}{g9X4hxLBQAu3QBcPXL9JAQ}{10.11.13.158}{10.11.13.158:9300}{dilm}{ml.machine_memory=4135124992, ml.max_open_jobs=20, xpack.installed=true} join existing leader], term: 1, version: 19, reason: added {{es-node-3}{TArASFSyS2-gVcNaH-XosQ}{g9X4hxLBQAu3QBcPXL9JAQ}{10.11.13.158}{10.11.13.158:9300}{dilm}{ml.machine_memory=4135124992, ml.max_open_jobs=20, xpack.installed=true},}

Тестирование API

С любого хоста, который может достучаться до мастер-узла, выполните:

curl http://10.11.10.62:9200/_cluster/stats?pretty

Вывод статистики кластера

curl http://10.11.10.62:9200/_nodes/process?pretty

Информация о процессах нод кластера

Повторный вывод cluster stats для проверки изменений:

curl http://10.11.10.62:9200/_cluster/stats?pretty

Статистика кластера после присоединения узлов

Частые проблемы и устранение (Troubleshooting)

  • vm.max_map_count слишком мал — ошибка: “max virtual memory areas vm.max_map_count [65530] is too low”. Решение: sudo sysctl -w vm.max_map_count=262144.
  • Узлы не видят друг друга — проверьте firewall, iptables, и что порт 9300 открыт и слушается на network.host.
  • Bootstrap checks не проходят — при запуске на production JVM-параметры и права файловой системы должны соответствовать рекомендациям (heap, ulimit, owner файлов).
  • Неправильно указан cluster.initial_master_nodes при первичном запуске — добавьте только на начальном мастер-узле.

Рекомендации по безопасности

  • Закройте доступ к 9200 извне; используйте firewall/SG.
  • Включите xpack.security и настройте TLS для внутрекластерного трафика (особенно в production).
  • Ограничьте привилегии файлов и пользователей, запускающих процесс Elasticsearch.
  • Периодически обновляйте Elasticsearch и OpenJDK до поддерживаемых версий.

Альтернативные способы установки

  • Установка через официальные репозитории APT/Deb (удобно для автоматических обновлений);
  • Использование RPM/DEB пакетов для систем семейства Debian/RedHat;
  • Docker-контейнеры — быстрый тестовый стенд, но для production нужна оркестрация и хранение данных вне контейнера;
  • Elastic Cloud — управляемый сервис от Elastic (SaaS) для быстрой загрузки в production.

Mermaid: быстрый выбор метода установки

flowchart TD
  A[Нужен быстрый тест?] -->|Да| B[Docker]
  A -->|Нет| C[Production]
  C --> D{Нужен автообновления?}
  D -->|Да| E[APT/Deb]
  D -->|Нет| F[Ручная распаковка]

Чек-листы по ролям

  • Администратор:

    • Проверить сетевую доступность 9200 и 9300;
    • Прописать vm.max_map_count и ulimit;
    • Настроить backup и мониторинг (Prometheus/Elastic Stack).
  • DevOps:

    • Подготовить конфигурации elasticsearch.yml для окружений;
    • Настроить сервисы systemd или контейнеры с healthcheck;
    • Настроить TLS и аутентификацию.
  • Разработчик:

    • Тестировать индексы и mapping на dev;
    • Использовать клиентские библиотеки с retry/backoff;
    • Писать тесты для search/aggregation.

Критерии приёмки

  • Три узла видят друг друга: cluster health green или yellow (в зависимости от реплик);
  • API /_cluster/stats возвращает информацию по всем трём узлам;
  • Нет критических ошибок в логах при старте;
  • Система соответствует базовым правилам безопасности (firewall, TLS/аутентификация при необходимости).

Факт-бокс — ключевые числа и правила

  • Порты: 9200 (HTTP), 9300 (транспорт для кластера);
  • Рекомендация vm.max_map_count: 262144;
  • Правило для JVM heap: half of RAM, но не более 32 ГБ;
  • Рекомендуется минимум 3 мастер-валида (master-eligible) узла для отказоустойчивости.

Заключение

В статье описаны шаги для развёртывания простого кластера Elasticsearch из трёх узлов: скачивание, установка OpenJDK 8, распаковка, настройка config/elasticsearch.yml, системные правки и тесты. Для production следует дополнительно обеспечить безопасность, мониторинг и план резервного копирования.

FAQ

Q: Можно ли использовать более новые версии Java?
A: Да, современные версии Elasticsearch поддерживают OpenJDK 11 и выше в актуальных релизах, но в примере использована 1.8 для совместимости с версией 7.4.2.

Q: Как сделать мастер-only узел?
A: В elasticsearch.yml установите node.master: true и node.data: false для мастер-only роли.

Q: Как быстро развернуть для теста?
A: Используйте Docker-образ elasticsearch:7.4.2 с корректными переменными окружения и пробросом портов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus — Android‑троян и защита
Кибербезопасность

Herodotus — Android‑троян и защита

Как включить новый Пуск в Windows 11
Windows

Как включить новый Пуск в Windows 11

Панель полей сводной таблицы в Excel — быстрый разбор
Excel

Панель полей сводной таблицы в Excel — быстрый разбор

Включение нового меню Пуск в Windows 11
Windows

Включение нового меню Пуск в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram