Начиная с JIRA Software Data Center 7.3 и JIRA Service Desk Data Center 3.6, теперь вы можете обновить с нулевым временем простоя для своих пользователей. Мы называем это коротко ZDU (нулевое обновление простоя) . Это работает, по сути, позволяя узлам вашего кластера работать на разных версиях JIRA одновременно при обновлении. На этой странице вы найдете краткий технический обзор того, как это работает.
Итак, что происходит с кластером JIRA во время ZDU?
ZDU вводит состояние кластера, которое описывает, что происходит с вашим кластером с точки зрения процесса обновления.
Ваш кластер может находиться в одном из следующих состояний:
- Стабильный: Стабильный означает, что кластер в настоящее время функционирует как обычно, и обновление не выполняется.
- Готов к обновлению: это означает, что кластер готов к обновлению. Обновление выполняется путем удаления узла из кластера, его обновления и последующего добавления в кластер. Это состояние означает, что ваш кластер готов для этого, но до сих пор ничего не произошло. На этом этапе администратор может удалить узел из балансировщика нагрузки и выполнить изящное завершение этого узла для его обновления или просто «убить» его. Мы никогда не рекомендуем, чтобы администратор «убивал» запущенный JIRA-узел, но технически он может, и как разработчики вы должны знать об этом.
- Смешанное: это состояние означает, что хотя бы один узел в кластере имеет более новую версию JIRA, работающую на нем, и по крайней мере один узел имеет исходную версию. На данный момент обновление еще не завершено, и JIRA не выполнила задачи (tasks) обновления. Если потребуется, JIRA изменила схему базы данных в соответствии с более новой версией JIRA.
- Готов к выполнению задач (tasks) обновления. Это состояние означает, что все узлы в кластере теперь запускают новую версию JIRA, но обновление еще не завершено. Все может случиться, и мы даем нашим администраторам шанс остановить его прямо сейчас и откатиться. Администратору необходимо одобрить обновление JIRA для запуска задач (tasks) обновления и включения всех новых функций.
- Выполнение задач обновления: это состояние означает, что администратор только что одобрил обновление, а один из узлов JIRA применяет все необходимые изменения, необходимые для обновления кластера и включения всех новых функций.
Процесс:
РИСУНОК
Что происходит с узлом JIRA во время ZDU?
Ничего особенного, если честно. Администратор должен обновить узел, как обычный JIRA-экземпляр, а затем добавить его обратно в кластер. Однако есть несколько важных вещей:
- Узел принимает события всякий раз, когда другой узел изменяет состояние кластера
- Узел может спуститься SUDDENLY (внезапно()
- Узел может быть обновлен до более новой версии JIRA и переключить состояние кластера в MIXED
- Обновленный узел можно понизить до исходной версии JIRA и, возможно, переключить состояние кластера обратно в READY TO UPGRADE, если нет узлов в более новой версии
- После того как администратор одобрит обновление, узел начнет выполнять любые требуемые задачи обновления
Что происходит с плагинами во время ZDU?
В настоящее время Atlassian решительно препятствует администраторам обновлять плагины во время ZDU. Однако мы не можем остановить людей от этого, поэтому JIRA замораживает все плагины для всех узлов, на которых запущена исходная версия JIRA. Это означает, что даже если администратор обновит плагин, узлы JIRA с исходной версией все равно будут запускать старую версию плагина.
Однако новые узлы получат обновленный плагин, поэтому мы не рекомендуем никаких изменений в схеме базы данных.
Если ваш плагин должен знать о состоянии обновления кластера JIRA, вы можете использовать наши общедоступные API:
com.atlassian.jira.cluster.zdu.ClusterStateManager
Плагин может получать события, когда изменяется состояние кластера:
com.atlassian.jira.cluster.zdu.JiraUpgradeStartedEvent
com.atlassian.jira.cluster.zdu.JiraUpgradeCancelledEvent
com.atlassian.jira.cluster.zdu.JiraUpgradeApprovedEvent
com.atlassian.jira.cluster.zdu.JiraUpgradeFinishedEvent
Gotchas(Мы понимаем вас как никто!)
com.atlassian.jira.cluster.zdu.ClusterStateManager # getUpgradeState гарантирует, что JIRA не застряла в одном из состояний обновлений, которое может включать кластерную блокировку, поэтому это дорогостоящая операция. Попытайтесь избежать этого. Вместо этого используйте события.
По материалам Atlassian JIRA Server Developer Zero downtime upgrades for JIRA Data Center applications