Задача масштабирования ресурсов выделенных серверов окружена большим количеством трудностей. Среди самых трудоемких вопросов выделяется добавление памяти и дисков, что со 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
Заключение
Разумеется, используемый в этом материале метод не единственный, но он превосходит большую часть самых распространенных способов по надежности. Благодаря этой инструкции ваш новый сервер сможет приступить к работе сразу же, а в случае возникновения каких-либо проблем в резерве всегда есть старый сервер, который можно легко запустить.