Установка и настройка кластера 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).
Что мы сделаем
- Скачиваем Elasticsearch;
- Устанавливаем Java 1.8 (OpenJDK 8);
- Распаковываем и настраиваем Elasticsearch для кластерного режима (3 узла);
- Настраиваем системные лимиты и запускаем кластер;
- Тестируем и даём рекомендации по безопасности и отладке.
Скачивание 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; обычно лучше брать поддерживаемую и стабильную версию.

Установка Java
Elasticsearch требует Java. В примере ставим OpenJDK 8 на Ubuntu 18.04. На каждом узле выполните:
sudo apt update
sudo apt install openjdk-8-jdk
java --versionПроверьте, что java –version показывает версию 1.8.x.

Установка и распаковка Elasticsearch
Распакуйте загруженный архив на каждом узле:
tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
Конфигурация кластера
Допустим у нас три сервера с приватными 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
Ниже приведены примеры конфигурации для каждого узла.
Конфигурация на мастере 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"]
Советы по конфигурации:
- 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
В логах вы увидите сообщения об присоединении узлов, например:
[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 с корректными переменными окружения и пробросом портов.
Похожие материалы
Herodotus — Android‑троян и защита
Как включить новый Пуск в Windows 11
Панель полей сводной таблицы в Excel — быстрый разбор
Включение нового меню Пуск в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить