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

Заключение

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


Новости
13 сентября 202413.09.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов
18 апреля 202418.04.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов Q1
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
Создать учетную
запись ProCloud
arrow
arrow hover
 
Имя, Фамилия*
Номер телефона
Электронный адрес*
Ваше сообщение*
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Тип формы
ID тикета Zendesk
Продукт
IP
 

Создайте бесплатную учетную запись или напишите нам, чтобы узнать больше.

Нажимая «Отправить заявку» вы даете свое согласие на обработку своих персональных данных