[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-liquibase-kak-liquibase-rabotaet-s-neskolkimi-ekzemplyarami-prilozheniya-klaster":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},967,"kak-liquibase-rabotaet-s-neskolkimi-ekzemplyarami-prilozheniya-klaster",29,"liquibase","Liquibase","💧","Как Liquibase работает с несколькими экземплярами приложения (кластер)?","В кластерном окружении Liquibase использует таблицу DATABASECHANGELOGLOCK для предотвращения одновременного выполнения миграций несколькими экземплярами.\n\n### Механизм блокировки\n\n1. Перед началом миграции экземпляр пытается установить блокировку (`LOCKED = true`)\n2. Если блокировка уже установлена другим экземпляром — текущий экземпляр **ждёт** (по умолчанию до 5 минут)\n3. После завершения миграции блокировка снимается (`LOCKED = false`)\n4. Остальные экземпляры обнаруживают, что все changeset-ы уже применены, и стартуют нормально\n\n### Возможные проблемы\n\n**Зависшая блокировка** — если экземпляр аварийно завершился во время миграции, блокировка остаётся. Решение:\n\n```bash\nliquibase releaseLocks\n```\n\nИли SQL:\n\n```sql\nUPDATE DATABASECHANGELOGLOCK SET LOCKED = FALSE WHERE ID = 1;\n```\n\n**Таймаут ожидания** — если блокировка держится слишком долго, другие экземпляры не смогут стартовать. Настройка таймаута:\n\n```properties\nspring.liquibase.lock-wait-time=300\n```\n\n### Рекомендации\n\nВ банковских системах предпочтительнее выполнять миграции **отдельным шагом до деплоя**, а не при старте приложения. Это позволяет:\n\n- Избежать проблем с блокировками в кластере\n- Контролировать момент применения миграций\n- Быстрее откатить изменения при проблемах\n\n> **На собеседовании:** интервьюер проверяет понимание проблем конкурентного доступа. Нужно объяснить механизм DATABASECHANGELOGLOCK и знать, что делать при зависшей блокировке. Частая ошибка — предлагать запускать миграции при старте каждого экземпляра, не понимая, что это создаёт проблему блокировок.","","senior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как Liquibase работает с несколькими экземплярами приложения — Gymterview","В кластерном окружении Liquibase использует таблицу DATABASECHANGELOGLOCK для предотвращения одновременного выполнения миграций несколькими экземплярами.","В кластерном окружении Liquibase использует таблицу DATABASECHANGELOGLOCK для предотвращения одновременного выполнения м",[7,13],true]