У нас есть два сервера, которые я унаследовал, на обоих работает DRBD, и на каждом из них запущены виртуальные машины KVM.
Я бы хотел остановить ВМ, работающую на сервере server1, и поднять только одну ВМ на сервере server2 для некоторых тестов. Хотя с DRBD, работающим на этих серверах, и сломанным скриптом запуска (опубликованным здесь) с сервера server2, это заставляет меня нервничать, так как я не хочу полностью останавливать server1, только одну ВМ на нем. Я не создавал и не настраивал эти машины, и я сомневаюсь, был ли DRBD (о котором я мало что знаю) полностью правильно реализован. Скрипт остановки Server1 опубликован, а скрипт запуска servers2 опубликован здесь.
Но перед всем этим, я думаю, я просто хочу знать, как безопасно остановить drbd от возни с двумя серверами на время. Так что я могу смонтировать файловую систему на server2 и поднять VM, которую я остановил на server1.
Скрипт остановки сайта Server1:
echo poweroff -p now
echo
read -rsp $'Press any key to continue...\n' -n1 key
virsh shutdown irsc
virsh shutdown backup
virsh shutdown user
virsh shutdown repository
virsh shutdown web-firewall
virsh shutdown wiki
virsh shutdown a-gateway
virsh shutdown b-gateway
virsh shutdown dhcp
# shutdown the drbd
#drbd-stop
echo now manually turn off drbd
echo umount /systems
echo drbdadm secondary all
echo drbd-overview
Почему drbd-stop закомментирован, понятия не имею, и почему он повторяет то, что должен делать? Понятия не имею. Но ладно, вот скрипт остановки. Кстати, файлы img Server1 для KVM находятся в /systems.
Итак, я перехожу на сервер 2. Первая проблема: в папке /systems нет файлов img, но в скрипте запуска есть строка монтирования. Вот скрипт запуска для сервера 2: (Понятия не имею, что на самом деле делает nodedev-detach pci.)
#!/bin/sh
# isolate the CPUs for the VMs
#site-isolate
# backup 192 network
virsh nodedev-detach pci_0000_06_10_2
# 10.7
virsh nodedev-detach pci_0000_02_10_0
# 10.5
virsh nodedev-detach pci_0000_06_10_3
# 10.2
virsh nodedev-detach pci_0000_02_10_1
# a-gateway
# 192
virsh nodedev-detach pci_0000_06_10_0
# 10.5
virsh nodedev-detach pci_0000_06_10_1
# 10.7
virsh nodedev-detach pci_0000_02_10_4
# b-gateway
# 192
virsh nodedev-detach pci_0000_06_10_4
# 10.2
virsh nodedev-detach pci_0000_02_10_5
# dhcp
# 10.5
virsh nodedev-detach pci_0000_06_10_7
# 10.7
virsh nodedev-detach pci_0000_02_11_0
# 10.2
virsh nodedev-detach pci_0000_02_11_1
# dns2
# 192
virsh nodedev-detach pci_0000_06_11_0
# web-server
# 10.7
virsh nodedev-detach pci_0000_02_11_4
# web-firewall
# 192
virsh nodedev-detach pci_0000_06_10_6
# 10.7
virsh nodedev-detach pci_0000_02_12_4
# 10.2
virsh nodedev-detach pci_0000_02_11_5
# irsc
# 10.7
virsh nodedev-detach pci_0000_02_13_0
# BTTV
virsh nodedev-detach pci_0000_09_00_0
# firewall
# 10.25
virsh nodedev-detach pci_0000_02_12_1
# 10.5
virsh nodedev-detach pci_0000_06_11_1
# bro-server
# 192
virsh nodedev-detach pci_0000_06_11_2
echo start drbd
# start the disk mirror with the slave
service drbd start
sleep 2
# now setup drbd and filesystems
# for all VM images, mount the /systems
drbdadm primary systems
mount /dev/drbd/by-res/systems /systems
# for arc-gateway
drbdadm primary arc-gateway-data
# for backup
drbdadm primary archive
drbdadm primary amanda
# for user computer
# for user computer
drbdadm primary users
# for web server computer
drbdadm primary web-server
# for wiki
drbdadm primary svn
# for irsc. *** this is the one I want to bring up? do I have to do this drbdadm primary irsc
drbdadm primary irsc
echo start vms
# start the VMs
# fundamental servers
virsh start dns2
virsh start dhcp
# take a long time to start servers
virsh start devel1
virsh start xmail
# gateways, sdss-gateway takes a long time
virsh start sdss-gateway
virsh start arc-gateway
virsh start user
# APO servers
virsh start web-server
virsh start backup
virsh start repository
virsh start wiki
virsh start irsc
# finally web firewall, now online to the world
virsh start web-firewall
решение1
Как вы объяснили в комментарии выше. Все корневые тома ВМ хранятся в виде файлов образов в файловой системе, смонтированной в /systems
. Чтобы безопасно переключиться на одноранговую систему, вам нужно будет остановить доступ к этой файловой системе (остановить все ВМ) и сначала размонтировать ее. Это объединяет все ВМ вместе, и вам нужно будет выполнить переключение всех ВМ.
Один из вариантов, который обычноне рекомендуетсябудет отключать узлы DRBD и вручную вызывать split-brain. По сути, оба узла будут первичными в одно и то же время, и, таким образом, вызывать расхождение данных, которое вам нужно будет вручную разрешить, чтобы снова подключить их. Сначала я бы проверил, не включает ли ваша конфигурация DRBD какие-либоавтоматические параметры восстановления разделенного мозга. Процедура должна быть похожа на следующую. Будьте осторожны, особенно с --discard-my-data
командой. Запуск их с неправильного узла может иметь катастрофические последствия.
## From the secondary node
# drbdadm disconnect systems
# drbdadm primary systems
## Verify irsc is stopped on the peer
# virsh start irsc
## Do whatever testing you need
# virsh stop irsc
# drbdadm secondary systems
# drbdacm connect systems --discard-my-data