Быстрая миграция 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, перейдите в раздел «Восстановление» и выберите «Загрузить из восстановительного 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 образа и отправки этого образа другому поставщику. Процесс не совсем безболезненный, но все же относительно простой и довольно быстрый, как только вы освоитесь.