Linux🐧
March 1

Быстрая миграция VPS-серверов между DigitalOcean, Vultr и LunaNode

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

В этом руководстве мы будем использовать снимки и режим восстановления для переноса VPS между провайдерами. В частности, мы клонируем VPS DigitalOcean на Vultr и LunaNode, а я дам советы по адаптации процесса к миграции с Vultr или с LunaNode. Тем не менее, эти действия будут работать до тех пор, пока оба поставщика используют полную виртуализацию, исходный поставщик предлагает режим восстановления или позволяет выполнять загрузку по ISO-образу, а целевой поставщик поддерживает загрузку пользовательских образов.

Обзор

Общий процесс будет выглядеть следующим образом: мы сделаем снимок VPS DigitalOcean, создадим новый VPS на основе снимка и загрузим новый VPS в Recovery ISO. Из Recovery ISO мы скопируем содержимое диска в необработанный образ или образ qcow2, хранящийся на блочном устройстве хранения, и установим веб-сервер. Наконец, мы скажем Vultr и LunaNode, чтобы они загрузили изображение.

Прежде чем мы начнем, всего несколько советов по адаптации этого процесса к миграции от других провайдеров. Если вы переходите с Vultr, вместо «Восстановления ISO» используйте пользовательский ISO-образ Ubuntu 16.04 и выберите опцию «Восстановить сломанную систему» после загрузки VPS на ISO.

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

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

1. Загрузка для восстановления ISO

Сначала мы сделаем снимок VPS DigitalOcean, создадим новый сервер на основе снимка, подключим блочное хранилище и загрузим ISO-образ восстановления.

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

После завершения создания снимка разверните новый VPS на основе снимка.

При создании нового VPS обязательно выберите только что сделанный снимок.

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

Наконец, снова выберите новый VPS, перейдите в раздел «Восстановление» и выберите «Загрузить из восстановительного ISO». Выключите VPS и загрузите его обратно с панели.

Откройте консоль VPS, введите 6 и нажмите Enter, чтобы запустить интерактивную оболочку в восстановительном ISO.

2. Извлечение необработанного изображения или изображения qcow2

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

В оболочке восстановления сначала запустим для проверки путей к дискам:fdisk -l

Итак, у нас есть два диска:

  • /dev/vda содержит наш корневой диск, который мы хотим скопировать новому провайдеру.
  • /dev/sda — это блочное запоминающее устройство, которое мы используем в качестве временного хранилища.

Смонтируйте блочное запоминающее устройство:

mount /dev/sda /mnt

Теперь вам нужно решить, хотите ли вы извлечь необработанное изображение или изображение qcow2. Vultr поддерживает только добавление пользовательских необработанных изображений, а LunaNode поддерживает добавление только пользовательских изображений qcow2.

Чтобы извлечь необработанное изображение (например, для Vultr):

dd if=/dev/vda of=/mnt/disk.raw bs=64k

Чтобы извлечь изображение qcow2 (например, или LunaNode):

qemu-img convert -O qcow2 /dev/vda /mnt/disk.qcow2

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

3. Загрузите изображение на Vultr или LunaNode

Далее мы настроим веб-сервер на восстановительном ISO-образе, чтобы новый провайдер мог получить образ.

Установите nginx и измените веб-корневой каталог на:/mnt

apt install -y nginx
sed -i 's/\/var\/www\/html/\/mnt/' /etc/nginx/sites-enabled/default
service nginx restart

ПРЕДУПРЕЖДЕНИЕ: это приведет к тому, что ваш диск станет общедоступным. В целях безопасности вы можете захотеть переименовать файл диска в случайное имя. Для дополнительной безопасности рассмотрите возможность настройки SSL на веб-сервере, чтобы передача данных по диску не была незашифрованной./mnt/disk.raw

Как только nginx будет подключен к сети, вы сможете загрузить изображение, открыв веб-браузер и открыв (или disk.qcow2). Убедитесь, что URL работает:http://[your new droplet IP]/disk.raw

Однако вам не нужно скачивать файл, так как Vultr и LunaNode позволяют только добавить пользовательское изображение, указав URL-адрес. Давайте добавим изображение.

В Vultr перейдите в раздел «Серверы», затем перейдите на вкладку «Снимки», нажмите «Добавить снимок» и введите URL-адрес (например):http://1.2.3.4/disk.raw

На LunaNode перейдите в раздел «Изображения» и нажмите «Добавить новое изображение». Выберите регион, введите имя, установите формат диска qcow2 и driver на virtio, а также введите URL (например):http://1.2.3.4/disk.qcow2

Развертывайте новый VPS!

Наконец, давайте развернем новый VPS — создадим новый VPS из снимка!

Если вы используете LunaNode, все должно быть готово! К сожалению, на Vultr мы обнаружили, что при переносе Ubuntu VPS перед загрузкой VPS требуется некоторая настройка. Мой застрял:

Чтобы это исправить, нам нужно удалить параметр kernel. Это применимо только в том случае, если вы использовали Ubuntu на DigitalOcean и столкнулись с той же ошибкой при загрузке — если вы столкнулись с другими проблемами, то могут потребоваться другие решения.console=ttyS0

Давайте загрузимся на ISO-образ Ubuntu 16.04: выберите VPS, перейдите в «Настройки», затем «Пользовательский ISO» и выберите Ubuntu 16.04:

После перезагрузки VPS откройте консоль, выберите английский язык и выберите опцию Rescue a broken system:

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

Во-первых, бегите, чтобы получить более красивую оболочку. Затем выполните следующие команды (опять же, это при условии, что вы перенесли Ubuntu VPS на Vultr):bash

bash
sed -i 's/use_lvmetad = 1/use_lvmetad = 0/' /etc/lvm/lvm.conf
sed -i 's/ console=ttyS0//' /etc/default/grub
sed -i 's/ console=ttyS0//' /etc/default/grub.d/50-cloudimg-settings.cfg
grep LINUX_DEFAULT /etc/default/grub
update-grub
grub-install /dev/vda

Команда предназначена для проверки того, что наше изменение было успешно применено. Консоль должна выглядеть следующим образом:grep/etc/default/grub

Теперь выйдите из спасательной оболочки, выберите опцию перезагрузки и удалите пользовательский ISO:

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

Заключение

Снапшоты — отличный способ быстро перенести VPS. К сожалению, некоторые провайдеры, такие как DigitalOcean и Vultr, не позволяют скачивать снимки, что делает их бесполезными для клонирования VPS на другого провайдера.

Тем не менее, мы можем использовать функции Recovery или Custom ISO для извлечения состояния диска VPS в виде необработанного или qcow2 образа и отправки этого образа другому поставщику. Процесс не совсем безболезненный, но все же относительно простой и довольно быстрый, как только вы освоитесь.