Пример простой настройки кластера Elasticsearch из двух нод (мастер и дата нода).
При кластеризации, данные (шарды) распределяются между нодами, всем процессами, что происходят внутри, занимается сам Elasticsearch и в большинстве случаев какое либо управление не требуется.
Вся настройка кластера сводится к настройке одного файла конфигурации и определения мастер нод. Далее всеми процессами займется сам Elasticsearch.
Установка Elasticsearch
Устанавливаем Elasticsearch на север.
На всех узлах кластера версия Elasticsearch должна быть одинаковой!
Оптимизация настроек
Для работы кластера должны на межсетевом экране должны быть открыты порты 9200/TCP и 9300/TCP (порты по умолчанию)
Прежде чем приступить к дальнешим шагам, рекомендуется предварительно корректно сконцентрировать как сам Elasticsearch, так и Linux сервер
Оптимальная настройка сервера Elasticsearch
Это позволит избежать части проблем связанных с работой bootstrap.
Настройка мастер ноды Elasticsearch
Так как мастер нода будет заниматься управлением кластером, индексирование и скорее всего маршрутизацией (Elasticsearch позволяет направлять данные в любую ноду), при ее развертывании рекомендуется добавить на нее больше ресурсов (памяти и ядер процессора).
Открываем на редактирование elasticsearch.yml
1 | nano /etc/elasticsearch/elasticsearch.yml |
Указываем имя кластера
1 | cluster.name: test-cluster |
имя ноды, должно быть уникальным, для кластера
1 | node.name: master-node |
так же возможно использовать имя ноды (предпочтительный вариант)
1 | node.name: ${HOSTNAME} |
Указываем используемые сетевые интерфейсы (IP адреса).
1 | network.host: [_local_, "<node ip>"] |
_local_ - указывает что необходимо так же использовать локальный интерфейс (127.0.0.1), полезно для управления нодой локально.
Желательно, но не обязательно HTTP порт
1 | http.port: 9200 |
Указываем IP адрес мастер ноды, данный параметр указывается на всех нодах
1 | discovery.zen.ping.unicast.hosts: ["<master node ip>"] |
и количество матер нод в кластере
1 | discovery.zen.minimum_master_nodes: 1 |
Данный параметр необходим для защиты от split brain, когда кластер может определить несколько мастер нод как главные. Значение = (количество мастер нод / 2)+1,
если мастер нода одна - указываем 1.
Включаем bootstrap, если не включали ранее
1 | bootstrap.memory_lock: true |
указываем путь, где будут хранится данные на диске (можно указать любой)
1 | path.data: /data-es |
Определяем роли, включаем роли мастера, даты и ingest (отвечает за индексирование)
1 2 3 | node.master: true node.data: true node.ingest: true |
после сохранения изменений, Elasticsearch необходимо перезапустить
1 | service elasticsearch restart |
Итоговая конфигурация мастер ноды
Для упрощения восприятия, пример готового файла конфигурации
1 2 3 4 5 6 7 8 9 10 11 | cluster.name: test-cluster node.name: ${HOSTNAME} network.host: [_local_, "<node ip>"] http.port: 9200 discovery.zen.ping.unicast.hosts: ["<master node ip>"] discovery.zen.minimum_master_nodes: 1 bootstrap.memory_lock: true path.data: /data-es node.master: true node.data: true node.ingest: true |
Настройка подчиненной ноды Elasticsearch
Дата нода - обеспечивать только хранением данных и поиском в них.
Аналогичным образом настраиваем дата ноду, исключение составляет лишь роли
Открываем на редактирование elasticsearch.yml
1 | nano /etc/elasticsearch/elasticsearch.yml |
Указываем имя кластера
1 | cluster.name: test-cluster |
имя ноды, должно быть уникальным, для кластера
1 | node.name: data-node |
так же возможно использовать имя сервера (предпочтительный вариант)
1 | node.name: ${HOSTNAME} |
Указываем используемые сетевые интерфейсы (IP адреса).
1 | network.host: [_local_, "<node ip>"] |
Желательно, но не обязательно HTTP порт
1 | http.port: 9200 |
Указываем IP адрес мастер ноды:
1 | discovery.zen.ping.unicast.hosts: ["<master node ip>"] |
и количество матер нод в кластере
1 | discovery.zen.minimum_master_nodes: 1 |
Включаем bootstrap, если не включали ранее
1 | bootstrap.memory_lock: true |
указываем путь, где будут хранится данные на диске (можно указать любой)
1 | path.data: /data-es |
Определяем роли, включаем роли мастера, даты и ingest (отвечает за индексирование)
1 2 3 | node.master: false node.data: false node.ingest: false |
после сохранения изменений, Elasticsearch необходимо перезапустить
1 | service elasticsearch restart |
После запуска службы, дата нода подключится (зарегистрируется) к мастер ноде, после чего, при наличии данных, начнется балансировка
Итоговая конфигурация дата ноды
1 2 3 4 5 6 7 8 9 10 11 | cluster.name: test-cluster node.name: ${HOSTNAME} network.host: [_local_, "<node ip>"] http.port: 9200 discovery.zen.ping.unicast.hosts: ["<master node ip>"] discovery.zen.minimum_master_nodes: 1 bootstrap.memory_lock: true path.data: /data-es node.master: false node.data: true node.ingest: false |