Пример настройки легко масштабируемого кластера Elasticsearch, с возможностью прозрачного горизонтального масштабирования дата нод.
Пример кластера довольно простой, но при этом является ограниченным по функционалу, часть возможностей (ролей) Elasticsearch не используется.
Схема построения кластера будет следующая
Прежде чем продолжить чтение, возможно подойдет более простой кластер из двух нод.
Установка Elasticsearch
Устанавливаем Elasticsearch на север.
На всех узлах кластера версия Elasticsearch должна быть одинаковой!
Оптимизация настроек
Для работы кластера должны на межсетевом экране должны быть открыты порты 9200/TCP и 9300/TCP (порты по умолчанию)
Прежде чем приступить к дальнешим шагам, рекомендуется предварительно корректно сконцентрировать как сам Elasticsearch, так и Linux сервер.
Оптимальная настройка сервера Elasticsearch
Это позволит избежать части проблем связанных с работой bootstrap.
Создание директории для данных
Если не требуется изменить путь для хранение данных, то этот пункт можно пропустить.
На всех нодах, не зависимо от типа, создаем директорию, для хранения данных и назначаем на нее права.
1 2 | mkdir -p /data/elasticsearch chown elasticsearch:elasticsearch /data/elasticsearch -R |
Создание Master/Ingest ноды
В данном кластере у нас будет одна нода, выполняющая две роли
Master- управление кластером
Ingest - конвейер для изменения документов до индексирования.
Открываем на редактирование elasticsearch.yml
1 | nano /etc/elasticsearch/elasticsearch.yml |
Указываем имя кластера
1 | cluster.name: es-cluster |
Устанавливаем имя ноды, в соответствии с именем сервера
1 | node.name: ${HOSTNAME} |
указываем путь для хранения данных и журналов (логов)
1 2 | path.data: /data/elasticsearch path.logs: /var/log/elasticsearch |
Указываем прослушиваемый IP адрес
1 | network.host: [_local_, "<master_node_ip>"] |
- _local_ - указывает что необходимо так же использовать локальный интерфейс (127.0.0.1)
- <master_node_ip> - IP адрес сетевого интерфейса Linux
Указываем HTTP порт
1 | http.port: 9200 |
Обязательно включаем bootstrap, если не включили ранее
1 | bootstrap.memory_lock: true |
В данном кластере одна мастер нода, указываем только ее. При этом запоминаем IP адрес, он нам понадобиться при настройке дата нод
1 2 | discovery.zen.ping.unicast.hosts: ["<master_node_ip>"] discovery.zen.minimum_master_nodes: 1 |
Указываем роли
1 2 3 | node.master: true node.data: false node.ingest: true |
Итоговый файл конфигурации Master/Ingest ноды
Для упрощения, пример готового файла конфигурации
1 2 3 4 5 6 7 8 9 10 11 12 | cluster.name: es-cluster node.name: ${HOSTNAME} path.data: /data/elasticsearch path.logs: /var/log/elasticsearch network.host: [_local_, "<master_node_ip>"] http.port: 9200 bootstrap.memory_lock: true discovery.zen.ping.unicast.hosts: ["<master node ip>"] discovery.zen.minimum_master_nodes: 1 node.master: false node.data: true node.ingest: false |
Создание шаблона data ноды
Будем создавать именно шаблон, а не настраивать data ноду. В файле конфигурации учтены некоторые моменты.
При развертывании дата ноды из шаблона, необходимо будет изменить имя сервера и его IP адрес.
Все новые data ноды автоматический зайдут в кластер
Перед началом настройки, обаятельно необходимо остановить сервис Elasticsearch
1 | systemctl stop elasticsearch |
Открываем на редактирование elasticsearch.yml
1 | nano /etc/elasticsearch/elasticsearch.yml |
По аналогии, указываем имя машины, имя кластера и пути установки
1 2 3 4 | cluster.name: es-cluster node.name: ${HOSTNAME} path.data: /data/elasticsearch path.logs: /var/log/elasticsearch |
В данном случае, так как мы не знаем какой IP адрес будет у сервера, указываем просушивание всех доступных адресов.
1 | network.host: 0.0.0.0 |
Указываем порт и включаем bootstrap
1 2 | http.port: 9200 bootstrap.memory_lock: true |
Указываем IP-адрес, который мы получили при настройке мастер ноды
1 2 | discovery.zen.ping.unicast.hosts: ["<master node ip>"] discovery.zen.minimum_master_nodes: 1 |
Далее указываем роль дата ноды
1 2 3 | node.master: false node.data: true node.ingest: false |
Сохраняем файл настроек.
Если по какой-то причине сервис Elasticserach был запущен, то необходимо очистить директорию с данными, что бы удалить все данные и сбросить ID ноды.
1 | rm /data/elasticsearch/nodes/0/* -fr |
Теперь из данной машины можно создать шаблон и использовать его для развертывания нод для хранения данных.
Итоговый файл конфигурации Data ноды
1 2 3 4 5 6 7 8 9 10 11 12 | cluster.name: es-cluster node.name: ${HOSTNAME} path.data: /data/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 bootstrap.memory_lock: true discovery.zen.ping.unicast.hosts: ["<master node ip>"] discovery.zen.minimum_master_nodes: 1 node.master: false node.data: true node.ingest: false |
Заключение
Теперь при развертывании дата ноды из образа, она автоматически будет подключаться к кластеру. Писать данные можно в любую из нод или во все сразу, Elasticserach сам разберется куда раскладывать данные.