Я хотел бы обсудить, какие передовые практики / подходы используют инженеры при обновлении elasticsearch
кластеров. Я считаю, что этот пост может служить хорошим примером стратегий и шагов, которые необходимо выполнить, гарантируя отсутствие потери данных, минимальное время простоя, масштабируемость и доступность elasticsearch
сервисов.
Чтобы начать инициативу, мы можем разбить обновление на два подраздела:
1) Выполнение обновления на master nodes
:
Поскольку главные узлы не содержат никаких данных и отвечают за управление кластером, я считаю, что мы можем безопасно применить terraform, чтобы добавить все обновленные виртуальные машины главного узла, а затем удалить старые.
2) Выполнение обновления на data nodes
:
Как многие люди уже знают, есть определенные ограничения на возможность обновления узлов данных. Мы не можем позволить себе полностью освободить виртуальную машину и заменить ее другой. На мой взгляд, хорошая практика - это:
а) Остановите выделение индекса для старой виртуальной машины
б) Затем выполнение terraform apply
для создания новой обновленной версии виртуальной машины узла данных (и ручное изменение terraform state
, чтобы старая виртуальная машина не была уничтожена)
c) Разрешение трафика (создание индекса) на новую виртуальную машину и использование elasticsearch
API для передачи данных со старой виртуальной машины на новую.
г) Ручное изменение terraform state
, позволяющее удалить старую ВМ.
Это всего лишь идеалистические шаги. Я хотел бы узнать ваше мнение и стратегии для выполнения безопасных обновлений elasticsearch через Terraform.