gremlintv2
@gremlintv2

ELASTICSEARCH как более «изящно» осуществить репликацию через playbook ANSIBLE?

Здравствуйте,

После настройки реплики MASTER -> SLAVE на POSTGRES оказалось, что есть необходимость в создании, подобного типа репликации и для ELASTICSEARCH.
Немного погуглив узнал что ELASTICSEARCH поддерживает только кластреную мультимастер репликацию (MASTER - MASTER ELIGIBLE).
Почему мне не подходит способ через создание снэпшотов.

Но для подобия MASTER -> SLAVE на POSTGRES можно испльзовать механизм создания снэпшотов. С переодическим созданием/востановлением снэпшота через крон. Но как я понял для такой схемы необходимо:
  1. создать снэпшот,
  2. остановить ELASTICSEARCH на ноде "SLAVE" (и в этот момент он не доступен для клиента)
  3. востановить снэпшот
  4. запустить ELASTICSEARCH
Данная схема не подходит, так как необходима постоянная доступность ELASTICSEARCH для приложения.
Значит наиболее подходящим в данном случае будет способ предложеный командой ELASTIC: MASTER - MASTER ELIGIBLE

При добавлении новой ноды в кластер MASTER - MASTER ELIGIBLE - необходимо на всех существующих нодах включая мастер через ANSIBLE запустить
следующее
  1. добавить в hosts и elasticsearch.yml запись нового хоста
  2. изменить правила firewall
  3. перезагрузить сервис elasticsearch
Так же есть вероятность смены IP ноды (специфика проэкта), что требует создание дополнительного плэйбука с теми же тасками.

Такие манипуляции вызывают определенные опасения:
1) Не вызовет ли это split brain если что-то пойдет "не так" (временная недоступность IP одной из нод)
2) Краш всего кластера после перезапуска ELASTICSEARCH (временная недоступность IP одной из нод)

1 )Как "предупредить" данные проблемы (см. выше)?
2) Может есть способ более "изящный"? (на мой взгяд у Postgres он более удобен не смотря на единственную точку отказа).


Нашел туториал, но вопросы те же, плюс добавился дополнительный - 3) Надежен ли tinc, что может вызвать его падение, получится ли настроить его в OPENVZ контейнере?
  • Вопрос задан
  • 495 просмотров
Решения вопроса 1
AlexeyVi
@AlexeyVi
Linux, MySQL, PostgreSQL, ElasticSearch, HiLoad
Вы не правы, я на проде никогда не перезагружал ноды, после добавления новых.
Все делается налету:
В конфиге новой ноды вы прописываете все ноды, после запускаете и она заходит в кластер и начинается синкаться (лучше делать когда нагрузка на кластер минимальна, так как будет много копирования), синк будет зависит от настроек распределения шардов и реплик. Соответственно:
1. Убрать все ограничения по сети (настроить правила firewall (Добавить, поправить и тд)), если существуют
2. Запустить новую ноду, она сама зайдет в кластер и будет синкаться
3. Добавить на существующие в конфиг новую.

По поводу ваших вопросов сплит брейна, в настройках эластика есть настройка минимальное кол-во нод для работы: discovery.zen.minimum_master_nodes: кол-во
Это позволяет, например, у вас 5 нод, вы держите по 1 праймари шарду на каждой ноде и 2 реплики каждого шарда на других нодах. С настройкой discovery.zen.minimum_master_nodes: 3, вы всегда сможете вывести 2 сервера из работы (на обслуживание), при этом кластер перейдет в желтое состояние но будет отдавать данные (не так быстро правда, деградации производительности)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы