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

Поговорим о том, как мигрировать так, чтобы пользователи ничего не заметили.

По каким причинам может понадобиться миграция серверов

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

  1. Требования закона или договора. Например, в течение определенного времени вы должны перевести инфраструктуру в дата-центр в другой стране. Или ваш бизнес куплен более крупным игроком, теперь нужно перевести обслуживание клиентов в дата-центр нового владельца.
  2. Проблемы с обслуживанием арендованных серверов. Цены неадекватно выросли, оборудование стало постоянно ломаться, администраторы допускают критические ошибки и нарушают работу вашего приложения — вот примеры таких причин.
  3. Получение важного конкурентного преимущества от перестройки инфраструктуры. Лучшее качество обслуживания, более высокая скорость, доступ к новым облачным технологиям и сервисам, радикальное снижение стоимости обслуживания — вот причины, по которым выигрывает облачная инфраструктура и может потребоваться перенос серверов на виртуальные машины в облаке.
  4. Глубокая перестройка инфраструктуры. Смена технического стека, СУБД, операционных систем, архитектуры системы, глубокая перестройка бизнеса.
  5. Улучшение масштабируемости или оптимизация стоимости эксплуатации сервиса с помощью облачных технологий, виртуальных серверов или контейнеров на замену физическим серверам.

Самый легкий переезд: миграция сервисов и приложений с помощью контейнеров

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

Все необходимые настройки сервисов можно выполнить заранее и зафиксировать, например, в файлах Deployment для Kubernetes.

Путь к Kubernetes и его преимущества для разработки

Как мигрировать виртуальные машины, если нет контейнеров

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

  1. Перенести образы серверов

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

  2. Применить средства автоматизации развертывания серверов и софта, например: SaltStack, Ansible, Chef, Terraform

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

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

  3. Упростить миграцию серверов с помощью DevOps-практик, а именно методологии GitOps

    В этом случае необходимые конфигурационные файлы хранятся в репозиториях Git, развертывание инфраструктуры осуществляется скриптами и файлами строго из репозитория. Для миграции достаточно отредактировать исходные настройки в Git и выполнить checkout на новой инфраструктуре. Эта методика хорошо дружит и прекрасно дополняется системами автоматизации развертываний типа Ansible и Chef, о которых мы говорили выше.

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

  4. Воспользоваться помощью облачного провайдера

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

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

У экспертов VK Cloud (бывш. MCS) можно получить помощь в миграции сложных инфраструктур или воспользоваться автоматической платформой для миграции серверов, данных и приложений.

Безболезненная миграция серверов требует системного подхода

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