17 апр. 2025 г.·7 мин

Переезд базы данных без простоя: репликация, переключение, откат

План переезда базы данных без простоя: выбор репликации, подготовка, тесты производительности, безопасное переключение и понятный план отката.

Переезд базы данных без простоя: репликация, переключение, откат

Задача и критерии успеха: что считаем простоем

Остановка базы данных почти всегда бьет по бизнесу сильнее, чем кажется. Пропадают продажи и заявки, сотрудники не могут работать в CRM/ERP, кассы и склады замирают, а клиенты видят ошибки. Даже если основное приложение быстро поднимается, часто ломаются отчеты, обмены с бухгалтерией, интеграции с платежами и внешними сервисами. Поэтому перед миграцией важно договориться, что именно считается простоем и что вы готовы терпеть.

Фраза «переезд базы данных без простоя» на практике означает не «ничего не меняется», а «пользователи продолжают выполнять критичные операции, а риски потери данных и времени восстановления заранее ограничены». Иногда допустима небольшая деградация: отчеты работают медленнее, фоновые задачи временно стоят, витрины данных обновляются с задержкой. Но список того, что нельзя отключать ни при каких условиях, лучше закрепить сразу (например, прием платежей, оформление заказов, запись пациентов, авторизация).

До старта миграции перечислите, какие системы затрагиваются: основное приложение и API, отчеты и BI, интеграции и очереди (например, обмен с 1С, ESB, внешними партнерами), фоновые задания, админ-панели и мониторинг.

Критерии успеха удобно описывать через RPO и RTO простыми словами:

  • RPO (Recovery Point Objective) - сколько данных вы готовы потерять в худшем случае. Например: «не больше 30 секунд изменений» или «потерь быть не должно».
  • RTO (Recovery Time Objective) - как быстро система должна вернуться к нормальной работе после переключения или сбоя. Например: «все ключевые операции доступны за 5 минут».

Если эти цифры согласованы с владельцем процесса и ИТ, дальше проще выбрать репликацию, окна для проверок и честно оценить, получится ли переключение без заметного влияния на пользователей.

Инвентаризация: что нужно собрать до начала

Переезд базы данных без простоя начинается не с репликации, а с точных исходных данных. Если вы не знаете, что переносите и как это используется, вы не сможете ни рассчитать риски, ни выбрать способ переключения.

Соберите список баз и их параметры: движок и версия, размер на диске, количество таблиц, крупные объекты (индексы, партиции, LOB), а также темпы роста за последние 3-6 месяцев. Отдельно отметьте, что растет быстрее всего: данные, индексы, журналы транзакций, временные файлы.

Зафиксируйте профиль нагрузки в цифрах, а не общими словами. Обычно нужны пиковые RPS/QPS, доля чтений и записей, самые тяжелые запросы, средняя задержка и 95-й перцентиль. Если система работает 24/7, часто выясняется, что «тихого» времени нет, и это влияет и на момент свитча, и на настройки репликации.

Дальше - зависимости. База редко живет одна: приложения, фоновые воркеры, очереди, ETL, отчеты, интеграции с внешними сервисами. Полезно составить короткий реестр, чтобы не забыть «невидимого» потребителя, который отвалится в день миграции.

Минимум, который стоит оформить в одном документе:

  • базы и версии, размеры, рост, требования к дискам;
  • пики нагрузки и критичные запросы;
  • зависимости и точки подключения (строки соединения, сервисные аккаунты);
  • резервные копии: типы, расписание, где хранятся, как быстро восстанавливаются;
  • ограничения: окна изменений, доступы, регуляторные требования и аудит.

Отдельно проверьте текущие точки отказа и реальную готовность бэкапов. Простая проверка: выбрать одну базу и выполнить тестовое восстановление на отдельный стенд с замером времени.

В конце уточните организационные ограничения: кто дает доступы на прод, кто согласует изменения, сколько времени занимает выпуск сертификатов или открытие портов. Именно такие мелочи чаще всего сдвигают график.

Выбор подхода: репликация и стратегия переключения

Чтобы получился переезд базы данных без простоя, сначала выбирают тип репликации и понимают, как будет происходить переключение (свитч). Ошибка на этом шаге обычно приводит либо к долгой «заморозке» записей, либо к неожиданным несовместимостям.

Физическая репликация копирует базу на уровне файлов и журнала транзакций. Она обычно проще и быстрее, хорошо подходит для больших объемов данных и стандартных сценариев высокой доступности, но чаще требует близких версий СУБД и одинакового типа хранилища.

Логическая репликация переносит изменения на уровне таблиц и операций. Она гибче при апгрейде версии, частичном переносе или изменениях схемы, но сложнее в настройке и чувствительнее к «краевым» случаям (триггеры, последовательности, DDL).

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

Перед выбором подхода ответьте на практичные вопросы:

  • нужно ли менять версию СУБД или тип хранилища (локальные диски, SAN, разные классы SSD);
  • есть ли тяжелые записи (батчи, отчеты), которые создают пики на журнал;
  • допустима ли задержка чтения на репликах (секунды) для пользователей;
  • реально ли обеспечить одинаковую конфигурацию, включая кодировки, collation и настройки времени.

Сеть часто становится скрытым ограничением. Для стабильной репликации нужны предсказуемая задержка, достаточная пропускная способность и шифрование трафика. Если перенос идет между площадками, заранее измеряют RTT, проверяют MTU, настраивают приоритеты и убеждаются, что окно обслуживания не съедается ретраями.

Сложность свитча удобно оценивать по деталям:

  • сколько приложений и интеграций держат прямые подключения к БД, и можно ли быстро поменять параметры;
  • есть ли фоновые задания и очереди, которые нельзя запускать дважды;
  • как быстро можно остановить запись и дождаться, пока реплика догонит (RPO близко к нулю);
  • можно ли сделать пробный свитч в тесте с похожей нагрузкой.

Практика: если вы готовите новую площадку и параллельно обновляете версию СУБД, чаще выбирают логическую репликацию или смешанный подход. Если версии совпадают и важна скорость, физическая репликация обычно дает самый короткий и понятный свитч.

Пошаговый план переезда: от подготовки до готовности к свитчу

Начните с целевой среды. Она должна выдержать ту же нагрузку, что и текущая база: CPU, память, диск (IOPS и задержки), сеть, резервное копирование, мониторинг. Отдельно проверьте права: учетные записи приложений, доступ к секретам, правила фаервола, роли администраторов и то, кто имеет право делать финальное переключение.

Дальше настраивается репликация и выполняется начальная синхронизация. Заранее решите, какой режим нужен: асинхронный (обычно проще на расстояниях и при высокой нагрузке) или синхронный (меньше риск потери данных, но выше требования к сети). На первичной заливке следите, чтобы не забить диск журналами и не просадить производительность основной системы.

Когда репликация догонит текущую базу, переходите к параллельному прогону. Идеальный вариант - дать новой базе «тень» нагрузки: перенести часть чтений, повторять типовые операции через тестовый контур или, если архитектура позволяет, дублировать запись на уровне приложения. Цель простая: поймать проблемы с индексами, блокировками, настройками памяти и временем ответов.

Перед готовностью к свитчу закройте вопросы согласованности. Проверьте схему, версии расширений, настройки collation/таймзоны, наличие всех нужных job-ов, триггеров и прав. Для данных используйте контрольные суммы по ключевым таблицам и выборочные сверки бизнес-показателей (например, остатки, статусы заказов, баланс).

К этому моменту у вас должен быть короткий план ролей:

  • кто ведет командный канал и фиксирует время событий;
  • кто отвечает за репликацию и лаг;
  • кто проверяет приложение и ключевые сценарии;
  • кто принимает go/no-go и объявляет начало свитча;
  • кто следит за метриками и ошибками.

Если инфраструктура работает 24/7, полезно заранее согласовать «окно повышенного внимания» и список людей на связи (включая поддержку и владельца продукта). Это снижает риск паузы уже в день переключения.

Тесты перед переключением: работоспособность и скорость

Миграция без простоя под ключ
Поможем спланировать репликацию и переключение под ваши RPO и RTO.
Оставить заявку

Перед свитчем нужно доказать две вещи: на новой базе все работает так же, как на старой, и система не станет медленнее. Если цель - переезд базы данных без простоя, времени на разбор полетов почти не будет.

Функциональные тесты: что должно пройти

Начните с самых частых и самых дорогих по ошибке операций. Проверяйте не все подряд, а то, что реально бьет по бизнесу: вход пользователей, создание и изменение ключевых документов, закрытие периода, печать и выгрузки, фоновые задания.

Хорошая практика - прогнать один и тот же набор действий на старой базе и на реплике, сравнить результат (числа, статусы, суммы) и зафиксировать расхождения. Если есть отчеты, проверьте хотя бы 2-3 «эталонных» отчета на одинаковом срезе данных.

Тесты производительности: метрики и пороги

Производительность проще оценивать понятными метриками, а не «ощущениями». Заранее договоритесь о порогах, после которых свитч запрещен:

  • время ответа 5-10 ключевых запросов и операций;
  • p95 времени ответа в час пик (например, из логов приложения);
  • нагрузка CPU и диска на сервере БД под тестом;
  • рост очередей, блокировок или ожиданий (если вы их измеряете);
  • пропускная способность сети между приложением и БД.

Отдельно проверьте задержку репликации. Если лаг растет под нагрузкой, это прямой риск потери данных при аварии или при жестком переключении.

Нужен и короткий тест отказоустойчивости: имитируйте падение узла (или остановку сервиса) и посмотрите, как быстро восстановится репликация и что увидит приложение. Лучше делать это на стенде, максимально похожем на прод.

В конце зафиксируйте результаты и подпишите готовность:

  • список тестов и фактические цифры;
  • согласованные пороги и факт их прохождения;
  • текущий лаг репликации и оценка RPO/RTO;
  • известные ограничения (что не проверяли и почему);
  • решение «можно переключать» и кто за него отвечает.

Переключение без простоя: порядок действий и контроль

Переключение (switch) - короткий момент, когда основная работа начинает идти на новую базу. Чтобы переезд базы данных без простоя не превратился в серию сюрпризов, заранее зафиксируйте критерии успеха и то, что считается допустимым изменением в период свитча.

Самое важное - ввести режим «заморозки» изменений. Обычно это не полный запрет, а управляемое окно: вы временно останавливаете рискованные операции (массовые загрузки, тяжелые отчеты, миграции схемы), фиксируете версии приложений и ограничиваете ручные правки в админках.

Порядок действий при свитче

Логика простая: сначала защищаем запись, потом переводим чтение, и только после этого возвращаем фон.

  • Переведите приложения в контролируемый режим: остановите фоновые задания, очереди и интеграции, которые пишут в БД.
  • Дайте репликации догнать источник до нулевого лага и зафиксируйте момент (время, LSN/GTID, номер лога - что принято в вашей СУБД).
  • Переведите запись на новую БД (или назначьте новый primary) и проверьте, что новые транзакции появляются только там.
  • Переключите чтение: read-only сервисы, отчеты, прогрев кэша, затем пользовательские запросы.
  • Включайте фоновые задачи по одной, начиная с самых безопасных, и следите за ростом нагрузки.

Перенастройка соединений должна быть предсказуемой: DNS/виртуальный IP, единая строка подключения, одинаковые учетные записи и права. Если используете пул соединений, заранее настройте короткий TTL и убедитесь, что приложение переподключается без ручного перезапуска.

Контроль первых часов

Первые 1-2 часа проверяйте метрики каждые 15 минут и фиксируйте их в журнале смены.

  • Ошибки приложений: рост 5xx, timeouts, ошибки транзакций и блокировок.
  • Производительность БД: p95/p99 задержек, длина очередей, CPU/IO, конкуренция за блокировки.
  • Целостность данных: счетчики ключевых сущностей, свежесть критичных таблиц, корректность фоновых обработок.
  • Репликация/резерв: статус репликации в обратную сторону (если включена), актуальность бэкапа.

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

План отката: что делаем, если что-то пошло не так

Откат - это не «провал», а заранее согласованный способ быстро вернуть систему в стабильное состояние. Хороший план отката работает только тогда, когда у него есть четкие триггеры, понятный владелец решения и короткий путь назад.

Триггеры лучше зафиксировать до дня свитча и не обсуждать их на ходу. Обычно это измеримые сигналы: рост ошибок приложения, превышение порога задержки запросов, расхождение данных между источником и репликой, невозможность выполнить ключевую операцию (вход, платеж, создание заказа) или сбой резервного копирования на новой стороне.

«Обратный свитч» продумайте так же тщательно, как основной. Чаще всего он сводится к переключению точки записи (конфиг приложения, балансировщик, DNS, флаг в настройках) и немедленной блокировке записи в новую БД, чтобы не получить двойную запись.

Если откат неизбежен, главный вопрос - что делать с изменениями, которые уже попали в новую базу. Базовые варианты:

  • временно заморозить критичные операции (например, создание документов), чтобы остановить рост расхождений;
  • сохранить изменения из новой БД в отдельный журнал (таблица, экспорт, очередь сообщений) для последующего дозалива;
  • зафиксировать точку времени/LSN и сохранить логи, чтобы потом аккуратно восстановить события.

Решение об откате должен принимать один ответственный человек (дежурный руководитель смены). Статус фиксируют сразу: время, причина, текущая точка переключения, что уже сделано и что команде запрещено делать (например, запуск миграций схемы).

После отката нужна отдельная проверка корректности. Минимум: приложение снова пишет в старую БД, ключевые пользовательские сценарии проходят, фоновые задачи работают, метрики вернулись к норме, а данные за окно переключения либо отсутствуют, либо учтены в журнале для последующего переноса.

Типичные ошибки и ловушки при миграции БД

Интеграция и ЦОД решения
Соберем инфраструктуру ЦОД и проведем миграцию так, чтобы бизнес не останавливался.
Начать проект

Даже если репликация настроена и свитч выглядит простым, проблемы часто появляются не в самой БД, а вокруг нее. При переезде базы данных без простоя мелкая недоговоренность или «потом проверим» легко превращается в инцидент.

Частые ошибки:

  • Забывают про зависимости: очереди, планировщики задач, отчеты, внешние интеграции, кэш, файловые хранилища. В итоге «приложение работает», но платежи не проходят или отчеты не строятся.
  • Делают свитч, не измеряя задержку репликации. Если отставание было 30-60 секунд, вы теряете последние записи или получаете расхождения.
  • Тестируют «на глаз», но не под пиковыми нагрузками. На новом сервере все быстро утром, а в 11:00 начинаются таймауты, блокировки и очереди.
  • Слишком поздно проверяют доступы: права пользователя приложения, доступ из подсетей, сертификаты, правила firewall, DNS, параметры шифрования. Правки в последний час обычно самые рискованные.
  • Не назначают ответственных и не продумывают коммуникации. Когда что-то идет не так, нет ясности, кто останавливает свитч, кто откатывает, кто сообщает бизнесу.

Хороший способ поймать эти ловушки - короткая репетиция «дня Х» на тестовом контуре: измерить лаг репликации, прогнать типовые операции пользователей и обязательно имитировать пик (параллельные запросы, отчеты, ночные джобы). Даже если инфраструктуру поставляет производитель, это не отменяет проверок сети, доступов и реального нагрузочного профиля.

Чтобы снизить риск, держите набор простых правил: зафиксируйте зависимости и владельцев интеграций, перед свитчем снимите метрики репликации и согласуйте допустимый максимум, проведите нагрузочный тест на новом контуре, а доступы и сертификаты проверьте за несколько дней, а не в день работ.

Короткий чек-лист перед днем переключения

В день свитча время идет быстро, и ошибки чаще случаются из-за недоговоренностей, а не из-за технологий. Этот чек-лист помогает убедиться, что переезд базы данных без простоя пройдет спокойно.

Сначала зафиксируйте ожидания бизнеса. RPO и RTO должны быть конкретными числами и письменно согласованными: сколько данных можно потерять и сколько времени система может работать в режиме переключения.

Дальше проверьте организационную часть: у каждой зависимости должен быть владелец и понятный способ связи. Нередко «мелочь» вроде отчета, который ходит в старую БД раз в час, срывает весь план.

Перед днем переключения отметьте как выполненные:

  • согласованы RPO и RTO, окно работ и правила коммуникации;
  • собран список зависимостей (приложения, интеграции, отчеты, планировщики), владельцы назначены и доступны в день свитча;
  • мониторинг и алерты включены заранее на обеих сторонах: лаг репликации, ошибки, нагрузка, свободное место, время ответа;
  • тесты производительности проведены на целевой стороне, пороги зафиксированы (например, «вход в систему до 2 секунд», «отчет до 30 секунд»);
  • план отката описан и отрепетирован на тестовой среде.

Последняя проверка - «сухой прогон» сценария на 10-15 минут: команда вслух проговаривает порядок действий и точки контроля. Кто подтверждает, что реплика догнала, кто переключает приложение, кто смотрит метрики после свитча, кто держит связь с пользователями.

Пример сценария: переезд БД для системы 24/7

План свитча по шагам
Соберем минутный план работ, роли команды и точки контроля по метрикам.
Обсудить проект

Представим компанию, у которой CRM и биллинг работают круглосуточно. Днем идут продажи и обращения в поддержку, а основной пик операций по счетам и оплатам приходится на вечер. Остановить базу даже на 15 минут нельзя: за это время копятся ошибки в интеграциях и растет очередь задач.

Выбирают подход с репликацией: поднимают новую БД на целевом сервере и настраивают постоянную передачу изменений с текущей базы. Затем идет параллельное тестирование, пока пользователи продолжают работать на старой системе. Переключение планируют на ночь, когда нагрузка минимальна, но команда на связи.

Как тестировать копию и не мешать пользователям

Тесты проводят на копии новой БД (или на реплике в режиме read-only), чтобы не создавать лишнюю нагрузку на рабочую базу. Для реалистичности берут свежий срез данных и прогоняют типичные цепочки: поиск клиента, создание сделки, выставление счета, проведение оплаты, выгрузки отчетов.

Чтобы убрать риск неожиданностей, обычно:

  • запускают нагрузочные прогоны в окна низкой активности;
  • проверяют самые тяжелые отчеты и фоновые задания;
  • сравнивают результаты ключевых запросов: время ответа и число блокировок;
  • тестируют интеграции: платежный шлюз, телефония, почта, обмен с бухгалтерией.

Решение о переключении по метрикам

Решение о свитче принимают не по ощущениям, а по цифрам. Например: задержка репликации держится в пределах нескольких секунд, время ответа на критические операции не хуже текущего, ошибок в логах нет, а ночной прогон нагрузки показывает запас по CPU, диску и сети.

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

Откат выглядит так же конкретно: если после свитча растут ошибки или резко падает скорость, приложение возвращают на старую БД, а новую отключают от записи. В хорошо подготовленном плане это занимает 10-20 минут: вернуть конфиги подключения, убедиться, что пользователи снова пишут в старую базу, и зафиксировать, какие данные успели попасть в новую систему.

Следующие шаги: как подготовить проект и инфраструктуру

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

Дальше соберите рабочую группу и договоритесь о правилах общения на время работ: один канал, один ответственный за решения, фиксация изменений по ходу. Обычно нужны DBA, инфраструктура, разработка, эксплуатация/поддержка и бизнес-владелец.

Затем подготовьте один общий документ, который живет до и после свитча: расписание по минутам, точки контроля, критерии «можно переключаться», метрики (лаг репликации, число ошибок, время ответа ключевых операций) и план отката с порогами «откатываемся без обсуждений». Если откат сложнее переключения, план еще сырой.

Первый опыт не переносите сразу на прод. Запланируйте репетицию на тестовом контуре: прогоните полный сценарий, включая смену конфигураций приложений, проверку прав, прогрев кэшей и возврат назад.

Инфраструктуру подбирайте по целевой нагрузке и росту на 12-24 месяца: CPU, память, диски по IOPS и задержкам, сеть, отдельные каналы для репликации, резервное копирование и восстановление. Если вы собираете новую площадку под критичные сервисы, бывает удобно закрыть и «железо», и интеграцию в одном месте - например, через GSE.kz (gse.kz), который в Казахстане производит серверы и оказывает услуги системной интеграции и поддержки 24/7.

FAQ

Что на практике означает «переезд базы данных без простоя»?

Под «без простоя» обычно понимают, что пользователи продолжают выполнять критичные операции, а допустимые потери данных и время восстановления заранее согласованы. Небольшие ухудшения вроде более медленных отчетов или задержки витрин иногда допустимы, если это оговорено заранее.

Как договориться, что считать простоем и что можно временно ухудшить?

Сначала составьте список критичных операций, которые нельзя останавливать, и отдельно — что можно временно ограничить. Затем зафиксируйте это как критерии успеха вместе с бизнес-владельцем, чтобы в день переключения не спорить о том, «работает ли система».

Как просто объяснить RPO и RTO команде и бизнесу?

RPO — это сколько данных вы готовы потерять в самом плохом сценарии, например «не больше 30 секунд изменений». RTO — это как быстро сервис должен вернуться к нормальной работе после переключения или сбоя, например «ключевые операции доступны за 5 минут». Эти два числа напрямую влияют на выбор репликации и на то, насколько «жестким» будет момент свитча.

Какие данные нужно собрать до начала миграции, чтобы не сорвать план?

Минимум — понимать, что именно переносите и как это используется: версии СУБД, размеры и рост, профиль нагрузки, зависимости, бэкапы и ограничения по изменениям. Если пропустить хотя бы один «скрытый» потребитель вроде отчета или фоновой задачи, он чаще всего ломается именно в день миграции.

Когда выбирать физическую репликацию, а когда логическую?

Физическая репликация обычно быстрее и проще, когда версии и окружение близки, и важна скорость догонки на больших объемах. Логическая репликация удобнее, когда вы меняете версию СУБД, переносите не все данные или ожидаете изменения схемы, но она требовательнее к нюансам вроде триггеров и DDL. Практичный выбор начинается с ваших целей по RPO/RTO и ограничений по версии и инфраструктуре.

Почему сеть часто становится главным ограничением при репликации?

Сеть влияет на задержку репликации и на предсказуемость свитча: нестабильный RTT и потери пакетов превращаются в лаг и повторные передачи. До старта полезно измерить задержку и пропускную способность, проверить MTU и убедиться, что шифрование и правила безопасности не режут трафик неожиданно.

Какие тесты нужно сделать перед переключением, чтобы не рисковать продом?

Чтобы доказать готовность, сравните результаты ключевых операций на старой базе и на целевой, и заранее установите числовые пороги по времени ответа и ошибкам. Отдельно проверьте лаг репликации под нагрузкой, потому что «все быстро утром» не гарантирует стабильности в час пик.

Как выглядит безопасный порядок действий при свитче без простоя?

Обычно сначала вводят контролируемую «заморозку» рискованных операций, затем дожидаются нулевого лага и фиксируют контрольную точку, после чего переводят запись на новую базу и только потом — чтение и фоновые задачи. Самая частая причина сбоев — когда фон или интеграции начинают писать в обе стороны или продолжают писать в старую базу незаметно.

Когда нужно откатываться и как не усугубить ситуацию?

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

К кому обращаться, если нужно подготовить инфраструктуру и провести миграцию «под ключ»?

Если вы одновременно строите новую площадку, вам обычно нужны серверы, хранилище, сеть, мониторинг и поддержка, а также люди, которые проведут репетицию и свитч по минутному плану. В Казахстане такие проекты часто закрывают через системного интегратора, который может поставить серверы, помочь с инфраструктурой и обеспечить поддержку 24/7, например GSE.kz.

Переезд базы данных без простоя: репликация, переключение, откат | GSE