Назад | Перейти на главную страницу

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

У меня есть стек ELK для наших нужд журналирования. В стеке находится 1 сервер Logstash, 3 сервера Elasticsearch и 1 сервер Kibana. У всех есть playbooks в Ansible, которые можно повторно развернуть при необходимости.

Когда я перехожу к повторному развертыванию Elasticsearch, у меня возникает небольшая проблема, связанная с необходимостью запуска sudo service elasticsearch restart чтобы он снова заработал, и я хотел бы, чтобы моя книга запускала его от начала до конца. Когда я запускаю playbook, он создает временный экземпляр, настраивает этот экземпляр, сохраняет AMI, создает конфигурацию запуска и присоединяет ее к группе масштабирования. Затем он масштабируется с 1 до 3 экземпляров, но я думаю, что проблема в том, что первый экземпляр не знает о двух других.

Есть ли способ, чтобы Elasticsearch автоматически перезагружался при загрузке каждого экземпляра Ubuntu? Это должно решить проблему.

Похоже, здесь есть две проблемы (автоматический запуск Elasticsearch и обнаружение других экземпляров). Я постараюсь ответить на оба вопроса.

Запускается автоматически

Предполагая, что ваша сборка основана на недавнем дистрибутиве Linux, в котором доступен systemd, вы можете установить файл системного модуля для автоматического запуска Elasticsearch. Согласно документам на https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd похоже, что официальные пакеты RPM и APT включают один. Предполагая, что вы установили из пакета, системный блок может уже быть там.

Вероятно, он отключен, и вы можете проверить:

andy@search-logs2:~$ sudo systemctl is-enabled elasticsearch
disabled

В этом случае во время сборки AMI вам просто нужно запустить:

andy@search-logs2:~$ sudo systemctl enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

Если вы установили Elasticsearch другим способом и у вас нет файла модуля, официальная роль Ansible Elasticsearch установит его. Вы можете просто скопировать их в качестве примера: https://github.com/elastic/ansible-elasticsearch/blob/master/templates/systemd/elasticsearch.j2. Затем вы использовали бы Ansible или systemctl чтобы устройство запускалось при загрузке.

Знакомство с другими вещами

Существуют плагины для обнаружения экземпляров в облачных провайдерах, таких как AWS. Ознакомьтесь с плагином обнаружения EC2 по адресу https://www.elastic.co/guide/en/elasticsearch/plugins/6.3/discovery-ec2.html. По умолчанию он попытается обнаружить любые другие экземпляры в учетной записи. Ограничьте, установив groups или host_type настройки: https://www.elastic.co/guide/en/elasticsearch/plugins/6.3/_settings.html.

У меня аналогичная настройка, но в Google Cloud, и при добавлении экземпляра новый узел запускается автоматически с использованием файла системного блока и через минуту присоединяется к кластеру с помощью подключаемого модуля обнаружения GCP.

Может быть, вы можете попробовать перезапустить службу elasticsearch с заданием, это будет выглядеть примерно так:

- name: Restart service elasticsearch
  service:
    name: "{{inventory_hostname}}_elasticsearch"
    state: restarted

hth

Создайте два экземпляра как часть вашего скрипта ansible, и пусть они обнаруживают друг друга, а затем создают ami. Таким образом, экземпляр будет считать себя частью кластера, а затем, когда вы загрузите его из ami, он будет искать другие экземпляры.