Имея кластер из двух серверов стоящих на Proxmox с объединенным по DRBD хранилищем, бывает нужно обновить узел в этом кластере, без остановки работы машин в нем. Задача не сложная, но некоторые моменты не всегда вспоминаешь в процессе.
Поэтому, для себя, действия были записаны для будущего копипаста в консоль. Ну а раз уже написаны, почему бы не поделиться с людьми?
P.S. В конце небольшой бонус про расширение блочного устройства по имени DRBD, тюнинг и полезные ссылки.
Приступим.
1. Мигрируем все виртуальные машины на один узел который остаётся живым (PM2).
2. Заходим консолью на PM2 от привилегированного пользователя. Разрешаем находиться в кластере одному узлу:
pvecm expected 1
3. Смотрим узлы в кластере:
pvecm nodes
4. Удаляем переезжающий узел из кластера:
pvecm delnode pm1
5. Останавливаем синхронизацию DRBD:
drbdadm disconnect all
и проверяем статус StandAlone командой
cat /proc/drbd
6. Удаляем записи о старой машине в /etc/pve/priv/{autorized_keys, know_hosts}, а также аналогично в /root/.ssh
7. Устанавливаем на новую машину (PM1) ProxmoxVE2, указав при установке размеры разделов, написав в приглашении
boot: linux ext4 maxroot=8 swapsize=1 maxvz=10 (есть еще ключ minfree=200)
8. Заходим в консоль свежей PM1, обновляемся:
apt-get update && apt-get dist-upgrade
9. Добавляемся в кластер:
pvecm add 192.168.0.12
(192.168.0.12 это IP адрес PM2)
10. Установим утилиты для работы с DRBD:
apt-get install drbd8-utils
но т. к. в репозитории дебиан старые утилиты нам нужно обновить их на аналогичные в ядре:
dpkg -i drbd8-utils_8.3.13-0_amd64.deb
(в Proxmox 3 основаном на Debian 7 версия актуальна, поэтому пропускаем этот пункт)
11. Создаем/копируем файл с PM2 /etc/drbd.d/r0.res для примера следующего содержания:
resource r0 {
protocol C;
startup {
wfc-timeout 0; # non-zero wfc-timeout can be dangerous (http://forum.p$
degr-wfc-timeout 7200;
become-primary-on both;
}
syncer {
rate 500M;
}
net {
cram-hmac-alg sha1;
shared-secret "my-secret";
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
on pm1 {
device /dev/drbd0;
disk /dev/pve/drbd;
address 192.168.33.46:7788;
meta-disk internal;
}
on pm2 {
device /dev/drbd0;
disk /dev/pve/drbd;
address 192.168.33.45:7788;
meta-disk internal;
}
12. Создаем логический раздел размером точь в точь как на рабочей машине:
lvcreate -L450G -n drbd0 pve
и смотрим что мы наделали командой
lvscan
13. Стартуем drbd:
/etc/init.d/drbd start
14. Создаём метадату:
drbdadm create-md r0
15. На всякий случай делаем вторичным
drbdadm secondary r0
и отключаемся от всех
drbdadm disconnect r0
16. Говорим что на нашей машине хранилище в не актуальном состоянии командой:
drbdadm -- --discard-my-data connect r0
и перезагружаем машину
17. В консоли первого сервера смотрим статус синхронизации командой:
watch cat /proc/drbd
18. В web интерфейсе в сторадже кластера разрешаем у хранилища с drbd наши узлы
Bonus: Расширение объема DRBD
Это все актуально для мета диска external.
1. Мы добавили объём дисков в рэйде. Расширяем раздел на котором лежит:
drbd lvextend -L+250G /dev/pve/drbd0
2. Расширяем drbd:
drbdadm resize r0
на машине где крутятся виртуалки, т.к. диск на второй машине временно стопорнётся.
3. Расширение устройства drbd увеличит только это блочное устройство, но не pv, чтобы увеличить его:
pvresize /dev/pve/drbd0
Если диск internal то придется на время или навсегда перенести метаданные на отдельный диск. Без остановки это можно сделать в два этапа
1. На одном из серверов:
a) Cтопорим drbd:
drbdadm down r0
затем меняем в конфиге строчки
meta-disk internal
на
meta-disk /dev/”ваше устройство для метаданных”
для которого очень рекомендуется ssd диск, но на время можно создать lvm раздел.
b) Затем на другой машине
drbdadm -- --overwrite-data-of-peer primary r0
а на текущей
drbdadm up r0
и смотрим процес синхронизации
watch cat /proc/drbd
После завершения процесса у нас на этом сервере метаданные вынесены на отдельное устройство.
2. Повторяем пункт 1 на другом сервере.
Если ssd нет, то после расширения, дабы не испортить скорость работы хранилища, придется сделать обратные манипуляции. Но лучше купить пару ssd, а может и четыре, на запас или соединив их в RAID1 на каждом из серверов.
Перед любыми действиями вполне естественно делать резервные копии, а сделать их быстрее поможет строчка в файле /etc/vzdump.conf:
bwlimit: 100000
которая сделает ограничение скорости в 100 мегабит, по умолчанию стоит всего 10, что для 100 мегабитной сети вполне нормально, но для гигабит(а) слишком мягко.
Полезные ссылки:
Сайт Proxmox
Proxmox wiki
Proxmox форум
Скачать образ для инсталляции
Автор: Supme