С момента появления и развития облачных технологий, на рынке IT-услуг появилось много новых игроков в лице хостинг- и облачных провайдеров, которые предоставляют различные сервисы, начиная от аренды облачных и выделенных серверов и заканчивая арендой кластеров баз данных и Kubernetes. Со временем может возникнуть потребность в смене облачного провайдера. Одна из самых главных задач при миграции — это перенос данных и приложений от одного провайдера к другому. В данной статье мы рассмотрим перенос данных от хостинг-провайдера UpCloud к облачному провайдеру Timeweb Cloud.
UpCloud — это финский-хостинг провайдер, основанный в 2012 году. Помимо аренды облачных серверов, компания предоставляет своим пользователям облачные сервисы по аренде выделенных баз данных, кластеров Kubernetes и сетевых хранилищ данных. Компания располагает 13 дата центрами в 10 странах мира.
Для переноса данных из UpCloud в Timeweb Cloud нам понадобится:
Учетная запись в UpCloud. Предполагается, что у пользователя арендован и используется облачный или выделенный сервер с данными, которые необходимо перенести.
Учетная запись в Timeweb Cloud и арендованный облачный или выделенный сервер. Также на балансе должна присутствовать необходимая сумма для оплаты сервера. При аренде сервера важно выбрать те же характеристики, что и у использовавшегося сервера в UpCloud, включая одинаковый объем оперативной памяти, количество ядер процессора и что самое важное одинаковый объем дискового пространства. Если вы не можете выбрать идентичную конфигурацию для нового сервера, то выберите характеристики сервера чуть больше, чем у сервера в UpCloud. При выборе операционной системы (в данном случае это будет Linux Ubuntu версии 22.04) необходимо выбрать ту, которая будет совпадать с операционной системой установленной на сервере в UpCloud, включая дистрибутив и его версию. Если не соблюдать данное требование, то при переносе части данных, в частности установленных приложений, могут возникнуть ошибки, т.к. в разных дистрибутивах используются разные версии программ, и не все пакеты устанавливаются при помощи официальных репозиториев.
После того, как учетная запись в Timeweb Cloud была создана и активирована, можно арендовать облачный сервер.
1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля.
2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
3) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04. Используемая версия операционной системы должна совпадать с версией, которая используется на сервере у провайдера UpCloud.
4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
5) Далее выбираем необходимую конфигурацию для сервера. В качестве конфигурации сервера выберем двухъядерный процессор и 40 ГБ жесткого диска. В реальности вам необходимо выбирать именно ту конфигурацию, которая используется на сервере провайдера UpCloud. Выбираем соответствующий тариф:
6) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
Для выхода сервера в Интернет, нужно заказать плавающий IP.
7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).
8) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
9) Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
10) Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Перед тем как переходить к процессу миграции данных, необходимо произвести базовую настройку серверов. Для того чтобы облегчить процесс переноса данных между двумя серверами, необходимо настроить авторизацию по ключам в протоколе SSH. Если ключи у вас уже используются, то данные шаги можно пропустить и переходить к следующей главе.
1) На сервере у провайдера UpCloud выполняем команду для генерации новой пары ключей:
ssh-keygen
По умолчанию ключи сохраняются в рабочей директории пользователя, из-под имени которого запускается команда, и располагаются в скрытой (символ точки перед именем папки) директории .ssh
. С целью облегчения переноса данных ключи можно сгенерировать из-под учетной записи root
-пользователя.
2) Для использования ключей при подключении по протоколу SSH сначала необходимо скопировать открытый ключ на новый сервер. Это можно сделать при помощи утилиты ssh-copy-id
. Команда для копирования открытого ключа на удаленный сервер:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@147.45.143.163
После того как открытый ключ будет успешно скопирован, необходимо убедиться что аутентификация по ключам работает. Для этого достаточно подключиться к серверу по SSH:
ssh root@147.45.143.163
Если пароль не был запрошен и вы смогли подключиться, то подключение по SSH-ключам успешно работает.
3) Дополнительно можно проверить что между двумя серверами присутствует сетевое соединение. Можно использовать утилиту ping
:
ping 147.45.143.163
Или утилиту telnet
. Telnet предустановлен не во всех дистрибутивах Linux, т.к. является устаревшей программой, однако утилиту активно используют для проверки на возможность установки сетевого взаимодействия. Чтобы установить telnet
в Debian-based-дистрибутивах, достаточно выполнить команду:
apt -y install telnet
Telnet проверяет сетевую доступность по порту сервиса. Для этого сначала указывается IP адрес или доменное имя сервера далее через пробел порт сервиса, например 22 порт который по умолчанию использует сервис SSH:
telnet 147.45.143.163 22
Если удаленный хост может принимать соединение по указанному порту то в ответ команда вернет сообщение «Connected to». Чтобы закрыть сессию telnet
, достаточно нажать на клавишу Enter.
Если сервис SSH использует другой порт, то вместо 22 порта необходимо задать тот, который указан в конфигурационном файле SSH-сервера.
4) Если на серверах используется UFW (Uncomplicated Firewall) или iptables для контроля сетевого трафика, то необходимо открыть порт, который использует SSH.
Синтаксис команды для открытия 22 порта для UFW:
ufw allow 22
При необходимости UFW можно остановить:
systemctl stop ufw
Если используется iptables:
Для входящих соединений на порт 22:
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Для исходящих соединений на порт 22:
iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
Пакеты, которые установлены на одном сервере Linux, можно перенести на другой сервер Linux только при условии, что на обоих серверах используется один и тот же дистрибутив (например, Ubuntu) и одной и той же версии. Один из способов заключается в использовании утилиты apt-clone, при помощи которой можно перенести установленные пакеты на другой дистрибутив Linux, который в качестве пакетного менеджера использует APT.
1) Для начала установим утилиту на сервере который находится в UpCloud при помощи команд:
apt update && apt -y install apt-clone
2) Далее создадим архив с именем my-packages
, в который будет сохранены все установленные пакеты в системе:
apt-clone clone my-packages
Иногда при сохранении пакетов apt-clone
может вывести сообщение, что часть пакетов не удается сохранить. В этом случае можно попробовать использовать опцию --with-dpkg-repack
, чтобы попытаться сохранить пакеты, с которыми возникла проблема:
apt-clone clone --with-dpkg-repack my-packages-full
После выполнения команды, apt-clone
создаст сжатый tar
-архив:
Сохраненный архив необходимо отправить на сервер, арендованный у Timeweb Cloud. Скопировать архив можно, например, используя утилиту scp
:
scp my-packages.apt-clone.tar.gz root@147.45.143.163:/root
3) Переходим на сервер провайдера Timeweb Cloud. Сначала устанавливаем утилиту apt-clone
:
apt update && apt -y install apt-clone
4) Далее восстанавливаем перенесенный архив с пакетами:
apt-clone restore my-packages.apt-clone.tar.gz
Установленные ранее приложения на сервере UpCloud успешно перенесены на новый сервер в Timeweb Cloud.
Если на сервере присутствуют конфигурационные файлы, лог-файлы, файлы html, xml и т.д., то их можно легко перенести, воспользовавшись встроенной утилитой scp
, которая копирует файлы между двумя серверами.
По умолчанию утилита будет запрашивать пароль пользователя каждый раз при копирование файлов с хоста на удаленный сервер в связи с тем, что scp
работает по протоколу SSH. Чтобы не вводить пароль каждый раз при процедуре копирования, необходимо использовать SSH-ключи — их мы создали в предыдущей главе.
Для копирования одинарных файлов без использования SSH-ключей достаточно выполнить команду:
scp first-file.txt dev-user@147.45.143.163:/home/dev-user
Для копирования файлов с использованием SSH-ключей необходимо выполнить команду:
scp -i ~/.ssh/id_rsa first-file.txt dev-user@147.45.143.163:/home/dev-user
Где:
-i ~/.ssh/id_rsa
— полный путь до файла с закрытым ключом. В данном примере закрытый (приватный) ключ находится в домашнем каталоге пользователя, из-под которого запускается команда, в скрытой директории .ssh
.first-file.txt
— имя файла, который будет скопирован на удаленный хост. В данном случае предполагается, что команда для копирования запускается в той директории, где находится файл first-file.txt
. Если файл размещен в другой директории, необходимо задать полный путь до файла.dev-user@147.45.143.163
— имя пользователя и адрес сервера. Используется синтаксис команды SSH.:/home/dev-user
— полный путь на удаленном сервере, куда будет сохранен файл.Чтобы скопировать несколько файлов, их необходимо указать поочередно через пробел:
scp acess1.log acess2.log dev-user@10.20.31.25:/dev-user
Также можно использовать символы регулярных выражений. Вот так можно скопировать все файлы, которые оканчиваются на .log
и располагаются в текущей директории:
scp *.log dev-user@10.20.31.25:/home/dev-user
Для копирования директорий необходимо использовать ключ -r
:
scp -r -i ~/.ssh/id_rsa src/ dev-user@147.45.143.163:/opt/
Если вам необходимо скопировать файлы сайта (файлы html, css, javascript, php и прочие), логи или конфигурационные файлы, то их можно предварительно сжать и поместить в архив.
Рассмотрим ситуацию, когда нам необходимо скопировать целый сайт. Конфигурационные файлы сайта находятся в директории /var/www/html/payment-dev
.
С целью уменьшения объема копируемых данных воспользуемся процедурой сжатия. Для сжатия в Linux принято использовать программы Gzip и Bzip2.
Отличие Gzip от Bzip2 заключается в скорости работы, однако Bzip2 лучше сжимает данные. Также по умолчанию Bzip2 предустановлен не во всех дистрибутивах. Если в вашей системе Bzip2 отсутствует, то утилиту необходимо установить:
# Для Debian-based дистрибутивов:
apt -y install bzip2
# Для RHEL дистрибутивов использующих менеджер пакетов YUM:
yum -y install bzip2
# Для RHEL дистрибутивов использующих менеджер пакетов DNF:
dnf -y install bzip2
Чтобы заархивировать директорию, содержащую файлы сайта, сначала создадим архив при помощи утилиты tar
, далее воспользуемся сжатием:
tar cvf - payment-dev | gzip -9 - > payment-dev.tar.gz
На выходе будет создан архив payment-dev.tar.gz
. Цифра 9 в команде gzip
означает использование максимальной степени сжатия. Это означает, что готовый архив будет занимать меньше места на диске, но для операций архивирования/разархивирования будет затрачиваться больше времени. Данную особенность стоит учитывать при работе с файлами большого объема. gzip
, как и bzip2
, поддерживает степени сжатия начиная от 0 до 9, где 0 — полное отсутствие сжатия, а 9 — максимальное сжатие.
Для передачи архива воспользуемся командой (предполагается, что на удаленном хосте уже создана директория):
scp -r -i ~/.ssh/id_rsa payment-dev.tar.gz dev-user@147.45.143.163:/var/www/html/
Чтобы разархивировать скопированный архив на новом сервере, необходимо перейти в директорию, куда он был сохранен, и выполнить команду:
tar -xvf payment-dev.tar.gz
Если необходимо использовать bzip2
вместо gzip
, то достаточно просто заменить название утилиты:
tar cvf - payment-dev | bzip2 -9 - > payment-dev.tar.gz
В сегодняшней статье мы проанализировали процесс переноса файлов с сервера облачного провайдера UpCloud на сервер провайдера Timeweb Cloud. Благодаря шагам по переносу можно легко перенести свои данные и приступить к работе на новом сервере.