ProCloud Yandex
23.08.2023
читать 12 минут

Перенос данных между серверами с помощью LVM

/upload/iblock/0f7/q1vt7mlm9evy4c5mqh1wk2hmk0rnozgs/nota_chile-aumenta-en-71-los-hogares-conectados-a-fibra-optica_%281%29_%281%29.jpg

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

процесс переноса информации

Сам процесс переноса информации пошагово выглядит так:

  • Новое устройство (сервер) загружается с внешнего устройства и осуществляется подготовка блочных устройств: создаем RAID-массивы и размечаем диски;
  • Создаем таргеты iSCSI;
  • Запускаем инициатор iSCSI на старом сервере и подключаем его к таргетам на новом устройстве. После этого на старом устройстве возникают и являются доступными блочные устройства нового сервера;
  • Блочное устройство нового сервера переносят в группу LVM на старом сервере;
  • Отключаем старый сервер;
  • Монтируем файловую систему на новый сервер и вносим некоторые правки в конфигурацию; 
  • Перезагружаем новый сервер с дисков и запускаем все серверы.

Готовим новый сервер

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

После этого загрузите новое устройство с помощью внешнего носителя. Вам потребуется задать для нового сервера его дальнейшее имя хоста.

Приступаем к разметке диска. В нашем примере на каждом из серверов будут созданы 2 раздела на каждом диске. Половина разделов будут применяться для сборки RAID1, а вторые для RAID10, который будет отвечать за хранение основных данных (LVM Physical Volume):

# fdisk /dev/sda
Command (m for help): p ... 
Device     Boot  Start     End         Blocks     Id    System
/dev/sda1  *     2048      2099199     1048576    fd    Linux raid autodetect 
/dev/sda2        2099200   1953525167  975712984  fd    Linux raid autodetect

Для упрощения задачи можно разметить только один диск, а на последующие просто перенести его разметку. После чего вам потребуется сгенерировать массивы RAID с применением утилиты mdadm:

# sfdisk -d /dev/sda | sfdisk /dev/sdb -f
# mdadm --create /dev/md0 --level=1  --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
# mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
# mdadm --examine --scan
ARRAY /dev/md/0 metadata=1.2 UUID=e9b2b8e0:205c12f0:2124cd91:35a3b4c8 name=cs940:0
ARRAY /dev/md/1 metadata=1.2 UUID=4be6fb41:ab4ce516:0ba4ca4d:e30ad60b name=cs940:1

Для установки таргета iSCSI мы прибегли к tgt:

# aptitude update
# aptitude install tgt

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

# tgt-setup-lun -n tgt0 -d /dev/md0 10.0.0.1
# tgt-setup-lun -n tgt1 -d /dev/md1 10.0.0.1
# tgt-admin -s

На этом создание нового сервера закончено и мы может приступить к подготовке старого сервера.

Подготовка старого сервера и копирование данных

Изначально нам нужно подключиться к старому серверу по SSH. Скачаем и сконфигурируем инициатор iSCSI, после чего присоединим к нему блочные устройства:

# apt-get install open-iscsi

Не забываем о данных авторизации, которые нужны для работы инициатора:

# nano /etc/iscsi/iscsid.conf
node.startup = automatic
node.session.auth.username = MY-ISCSI-USER
node.session.auth.password = MY-ISCSI-PASSWORD
discovery.sendtargets.auth.username = MY-ISCSI-USER
discovery.sendtargets.auth.password = MY-ISCSI-PASSWORD

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

# apt-get install screen
# screen

После присоединяемся к порталу и узнаем список доступных таргетов, при этом указывая текущий IP нового устройства:

# iscsiadm --mode discovery --type sendtargets --portal 10.0.0.2
10.0.0.2:3260,1 iqn.2001-04.com.cs940-tgt0
10.0.0.2:3260,1 iqn.2001-04.com.cs940-tgt1

Подключаем доступные таргеты и LUN и в итоге получим список новых блочных устройств:

# iscsiadm --mode node --login
Logging in to [iface: default, target: iqn.2001-04.com.cs940-tgt0, portal: 10.0.0.2,3260] (multiple)
Logging in to [iface: default, target: iqn.2001-04.com.cs940-tgt1, portal: 10.0.0.2,3260] (multiple)
Login to [iface: default, target: iqn.2001-04.com.cs940-tgt0, portal: 10.0.0.2,3260] successful.
Login to [iface: default, target: iqn.2001-04.com.cs940-tgt1, portal: 10.0.0.2,3260] successful.

Устройства iSCSI наделены одинаковыми именами в системе, что и обычные SAS\SATA. Однако у устройств отличается имя производителя:

# cat /sys/block/sdc/device/vendor
IET

После можно перейти к переносу информации. Изначально нужно отмонтировать boot и перенести его на новое устройство:

# umount /boot
# cat /sys/block/sdc/size
1999744
# cat /sys/block/md0/size
1999744
# dd if=/dev/md0 of=/dev/sdc bs=1M
976+1 records in
976+1 records out
1023868928 bytes (1.0 GB) copied, 19.6404 s, 52.1 MB/s

Добавляем массив RAID10 в VG:

# vgextend vg0 /dev/sdd
# pvs
PV          VG     Fmt      Attr     PSize      PFree
/dev/md1    vg0    lvm2     a--      464.68g    0
/dev/sdd    vg0    lvm2     a--      1.82t      1.82t

Помним, что /dev/sdd является /dev/md1, который экспортировали с нового устройства:

# lvs
LV       VG      Attr        LSize   Pool Origin Data%   Move Log  Copy%  Convert
root     vg0     -wi-ao--    47.68g
swap_1   vg0     -wi-ao--    11.44g
var      vg0     -wi-ao--    405.55g

Нам нужно создать для каждого из логических томов по копии на новом устройстве с помощью команды lvconvert: 

# lvconvert -m1 vg0/root --corelog /dev/sdd
vg0/root: Converted: 0.0%
vg0/root: Converted: 1.4%

vg0/root: Converted: 100.0%

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

# lvs
LV      VG     Attr       LSize   Pool Origin Data%   Move Log   Copy%  Convert
root    vg0    mwi-aom-   47.68g                                 100.00
swap_1  vg0    mwi-aom-   11.44g                                 100.00
var     vg0    mwi-aom-   405.55g                                100.00

Отключаем устройства iSCSI и убираем недоступную копию LVM:

# iscsiadm --mode session -u
# vgreduce vg0 --removemissing --force

Выключаем старый сервер:

# poweroff

Запуск нового сервера

Как только перенос информации завершен, то нам нужно перейти к загрузке и запуску нового сервера. Для этого мы остановим таргет iSCSI, активируем копию LVM:

# tgtadm --lld iscsi --mode target --op delete --tid 1
# tgtadm --lld iscsi --mode target --op delete --tid 2
# pvscan

Исключим копию из LVM со старого сервера:

# vgreduce vg0 --removemissing --force

Теперь давайте активируем все логические тома:

# vgchange -ay
3 logical volume(s) in volume group "vg0" now active

Не забудьте о проверке ФС на всех логических томах:

# fsck /dev/mapper/vg0-root

Выполняем chroot в копию системы и осуществляем некоторые финальные правки.

В первую очередь из fstab смонтируем все ФС:

Chroot:/# mount -a

Обновляем данные о массивах RAID на новом устройстве в файле mdadm:

Chroot:/# nano /etc/mdadm/mdadm.conf
Chroot:/# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Обновляем initramfs и выполним установку GRUB на диски:

Chroot:/# update-initramfs -u
Chroot:/# grub-install /dev/sda --recheck
Chroot:/# grub-install /dev/sdb --recheck
Chroot:/# update-grub

Удаляем файл udev:

Chroot:/# rm /etc/udev/rules.d/70-persistent-net.rules

Теперь можно запускать новый сервер:

Chroot:/# umount -a
Chroot:/# exit

Адаптация файловой системы после миграции

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

# pvresize /dev/md1
# lvextend /dev/vg0/var /dev/md1
Extending logical volume var to 1.76 TiB
Logical volume var successfully resized
# xfs_growfs /var
# df -h
Filesystem             Size      Used     Avail    Use%     Mounted on
rootfs                 47G       660M     44G      2%       /
udev                   10M       0        10M      0%       /dev
tmpfs                  1.6G      280K     1.6G     1%       /run
/dev/mapper/vg0-root   47G       660M     44G      2%       /
tmpfs                  5.0M      0        5.0M     0%       /run/lock
tmpfs                  3.2G      0        3.2G     0%       /run/shm
/dev/md0               962M      36M      877M     4%       /boot
/dev/mapper/vg0-var    1.8T      199M     1.8T     1%       /var

Заключение

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


Новости
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
28 марта 202428.03.2024
читать 1 минутучитать 1 мин
Запуск новой локации: Казахстан
6 марта 202406.03.2024
читать 1 минутучитать 1 мин
ProCloud №1 в Рейтинге облачных провайдеров 2023