Под обновлением понимается переход на новую версию Elasticsearch. Процесс обновления распределенных систем, таких как Elasticsearch, может быть достаточно сложным, учитывая большие объемы данных, участие множества узлов и различные конфигурации, которые могут существовать в кластере.
Обновление существующего кластера может быть выполнено двумя способами: путем скользящего обновления и путем полного перезапуска кластера. Преимуществом скользящего обновления является отсутствие простоев.
Следует помнить, что любые изменения в системе могут привести к потере данных при неточном соблюдении инструкций. Тщательно тестируйте и разрабатывайте стратегию обновления, а также создавайте резервные копии данных перед выполнением любых обновлений.
Что необходимо проверить перед обновлением версий?
Узлы Elasticsearch не могут быть понижены после обновления. Перед началом процесса обновления необходимо:
- Проверить журнал устаревания и устранить все проблемы.
- Просмотреть список изменений, чтобы убедиться в том, что вы знаете о функциональных возможностях, которые могут измениться или исчезнуть. В основном это касается конфигурации узлов, маппингов и шаблонов индексов, а также настроек кластера.
- Проверьте совместимость плагинов ES, чтобы убедиться в их совместимости с новой версией.
- Во избежание проблем перед обновлением рабочего кластера создайте тестовую среду для проверки процесса обновления в тестовой или промежуточной среде.
- Сделайте резервную копию и снимки данных, поскольку единственный способ "отменить" неудачное обновление - это создать новый кластер со старой версией и восстановить данные из снимков.
Как выполнить автономное обновление - полное обновление с перезапуском кластера
Обновление с полным перезапуском кластера предполагает одновременную остановку всех узлов Elasticsearch, их обновление и последующий перезапуск каждого из них. Такой подход к обновлению неизбежно потребует простоя кластера Elasticsearch на протяжении всего процесса.
Как правило, автономные обновления проще, чем онлайн, поскольку не требуется одновременная работа с кластером с различными версиями узлов.
Порядок действий следующий:
- Отключить релокацию шардов
- Остановите все узлы Elasticsearch и обновите их
- Обновить все подключаемые модули
- Запустите кластер Elasticsearch
- Вновь включить распределение шардов
- Обновление клиентских библиотек до новой версии
- Перезапустите узлы, соответствующие требованиям мастера
- Перезапустить узлы, не имеющие права на использование мастера
Следует помнить, что при полном перезапуске кластера ведущие узлы должны быть запущены раньше, чем не ведущие. Это необходимо для того, чтобы ведущие узлы могли создать кластер, к которому смогут присоединиться другие узлы, в отличие от скользящего запуска, при котором не ведущие узлы должны быть обновлены раньше ведущих.
Как выполнить обновление в режиме онлайн - обновление с откатными перезапусками
Обновление со скользящим перезапуском позволяет обновлять кластер без простоев. В этом случае каждый узел последовательно обновляется и перезагружается, не останавливая работу всего кластера Elasticsearch.
Обновление с перезапуском не может быть выполнено при изменении MAJOR-версий, за исключением особых исключений:
- Обновление Elasticsearch версии 5.6.16 до версии 6.x.x
- Обновление версии Elasticsearch 6.8.23 до версии 7.x.x
- Обновление Elasticsearch версии 7.17.5 до версии 8.x.x
По этой причине при выполнении скользящего перезапуска обновления между основными версиями необходимо ВСЕГДА использовать последнюю минорную версию в качестве промежуточного шага для обновления до последующей основной версии. Например, если вы используете Elasticsearch 5.x.x, вы можете сначала обновить его до версии 5.6.16, а затем перейти к версии 6.8.23.
Как обновлять узлы при скользящем обновлении
Обновление узлов выполняется следующим образом: сначала обновляются все узлы NON, отвечающие требованиям мастера.
Убедитесь, что статус кластера зеленый и стабильный.
Убедитесь, что все реплики доступны, чтобы отключение узла не привело к потере данных.
Отключите ненужное индексирование
По возможности следует остановить все процессы индексирования, чтобы повысить стабильность кластера.
Отключить выделение шардов
Важно отключить выделение шардов, чтобы при остановке узла для обновления кластер не перераспределил шарды на другой узел. (См. команду ниже).
Остановить Elasticsearch
Остановите Elasticsearch, прежде чем переходить к следующему шагу.
Обновление Elasticsearch
Метод обновления зависит от способа установки.
Обновление подключаемых модулей
Elasticsearch не запустится, если подключаемый модуль не той же версии, что и Elasticsearch.
Запуск Elasticsearch
Запустите Elasticsearch, прежде чем переходить к следующему шагу.
Повторное включение распределения шардов
Используйте команду, приведенную ниже.
Проверьте, что обновленный узел вернулся в кластер
С помощью приведенной ниже команды можно проверить, сколько узлов находится в кластере.
Дождитесь, пока статус кластера станет зеленым
Команда, представленная ниже, также покажет прогресс процесса восстановления шардов на обновленном узле, пока кластер не перейдет в зеленое состояние.
Повторите
Повторите весь описанный выше процесс для каждого узла.
Чтобы отключить выделение шардов, выполните команду:
1 2 3 4 5 6 | PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "primaries" } } |
Чтобы снова включить выделение шардов, выполните команду:
1 2 3 4 5 6 | PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": null } } |
Получите статус кластера и узнайте, сколько узлов находится в кластере:
1 | GET _cluster/health |
Общие проблемы и важные моменты
- Основной проблемой при обновлении является несовместимость версий. Elasticsearch поддерживает скользящее обновление только между младшими версиями. Необходимо изучить официальную документацию, чтобы убедиться, что ваш кластер поддерживает скользящее обновление, иначе потребуется полная переиндексация.
- После обновления узла Elasticsearch откат невозможен. Перед обновлением необходимо обязательно создать резервную копию данных.
- Elasticsearch постоянно удаляет или устаревает некоторые свои функции с каждым выпуском, поэтому перед планированием обновления необходимо следить за журналами изменений каждой версии.
- При скользящем обновлении важно отключить выделение шардов перед остановкой узла и включить выделение шардов при обновлении и перезапуске узла. Этот процесс позволяет избежать излишней нагрузки на IO в кластере.