Версии Elasticsearch обозначаются как X, Y и Z:

  • X - основная (major) версия
  • Y - второстепенная (minor) версия
  • Z - это уровень исправления (patch) или отладочного (maintenance) выпуска

В основной версии добавляются критические изменения и новые функции. Второстепенная версия добавляет предупреждения об устаревании и новые функции. Критические изменения происходят в экспериментальных функциях или из-за исправлений ошибок. Elasticsearch любит выпускать множество новых основных функций в второстепенных выпусках. Имейте в виду, что вы можете увидеть второстепенные версии, наполненные новыми функциями!

Для примера возьмём версию 7.13.2:

  • 7 - X
  • 13 - Y
  • 2 - Z

Совместимость версий

Elasticsearch будет работать только с индексами, созданными в предыдущей основной версии. Например, индекс в 6.x можно использовать в кластере 7.x, но индекс в 5.x нельзя использовать в кластере 7.x. Elasticsearch просто не запустится.

Обновление с 5.x до 7.x требует, чтобы все ваши старые индексы были переиндексированы, чтобы ваши данные были приведены в соответствие с текущими стандартами текущего выпуска.

Существует два возможных сценария, которые возникают при обновлении кластера:

  1. Последовательное обновление не требует простоев и позволяет продолжать работать с кластером. Например, обновление с версии 7.1 до 7.2.
  2. Полный перезапуск кластера вызывает некоторое время простоя и приводит к отключению всех узлов. Например, при обновлении с 6.2 до 7.1.

Помощник по обновлению (Upgrade Assistant)

Помощник по обновлению поможет вам подготовиться к обновлению. Это приложение Kibana, которое определяет устаревшие настройки и поможет вам в процессе решения проблем. Рекомендуется использовать этот инструмент, чтобы определить состояние вашего кластера перед обновлением.

Подготовка к обновлению

Перед обновлением рекомендуется выполнить несколько вещей, которые нужно сделать для подготовки:

  • Проверьте журналы устаревания - вы можете увидеть, используете ли вы какие-либо устаревшие функции, и они могут не существовать в следующей версии, до которой вы обновляетесь. Представляет из себя лог файл в папке логов Elasticsearch. Создаётся ежедневно и имеет максимальный размер в 1Гб.
  • Просмотрите критические изменения - убедитесь, что вы установили первую основную (major) версию (например, 7.0, 6.0, 5.0).
  • Резервное копирование данных - как обычно любой вендор рекомендует сперва сделать бэкап перед обновлением, в нашем случае snapshot.

Последовательное обновление

Мы уже говорили о том, что такой вид обновления не требует перезапуска всего кластера. Смысл в том, что мы по очереди обновляем все узлы в кластере Elasticsearch.

Для обновления выполняем:

  1. Естественно сперва делаем snapshot
  2. Выключаем shard allocation для реплик index
    PUT _cluster/settings
    {
      "persistent": {
    "cluster.routing.allocation.enable": "primaries"
      }
    }
    POST _flush/synced
    
  3. Останавливаем узел, который хотим обновить
    sudo systemctl stop elasticsearch.service
    
  4. Если вы используете machine learning, то выполните пункт 3 по ссылке
  5. Скопируйте на всякий случай файл конфига elasticsearch.yml
  6. Обновляем узел
    sudo yum update elasticsearch
    
  7. Проверьте что в файле elasticsearch.yml ничего не изменилось, например вы могли использовать нестандартные path.data и т.д.
  8. Запускаем узел
    sudo systemctl start elasticsearch.service
    
  9. Ждём пока узел войдёт в кластер. Можно для просмотра воспользоваться GET _cat/nodes
  10. Включаем shard allocation
    PUT _cluster/settings
    {
      "persistent": {
    "cluster.routing.allocation.enable": "all"
      }
    }
    
  11. Ждём пока состояние кластера будет зелёным GET _cat/health. Если создались новые index то возможно статус вашего кластера будет жёлтым пока большинство узлов не обновится.
  12. Повторить этап с 2 по 11 на всех остальных узлах кластера

Для просмотра версии нод в клатере можно восспользоваться GET /_cat/nodes?h=ip,name,version&v=true.

Для просмотра всех активных нод в кластере можно восспользоваться GET _cat/nodes?v=true.

В итоге

  • Major и minor версии содержат много новых функций
  • В основном Major версии включают критические изменения
  • Последовательное обновление позволяет перезапускать узлы в кластере по одному (без простоев)
  • Полный перезапуск кластера обычно ускоряет обновление, хотя для этого требуется отключить все узлы перед обновлением (приводит к простою)