У меня есть два KVM-сервера с несколькими виртуальными машинами.
Сервер (A) KVM с образами qcow2
Сервер (B) KVM монтирует NFS для разделения (с образами qcow2, присутствующими на сервере A).
Мой вопрос прост: как лучше всего создавать копии виртуальных дисков на сервере B (очевидно, при запущенных виртуальных машинах). DRBD - это одно решение ??
Если вы просто хотите реплицировать образы qcow2 с сервера A на сервере B, но к ним не нужно обращаться одновременно на A и B, тогда вы можете использовать DRBD с любой файловой системой на нем (например, ext4) , работает как первичный на A и вторичный на B. Когда A выйдет из строя, вы сможете переключить DRBD на B на Primary и использовать там изображения.
Если вы хотите, чтобы эти изображения были доступны и использовались на A и B одновременно, это будет сложнее. Кластерная файловая система может помочь, но я не думаю, что производительность будет правильной.
Если вы просто хотите сделать одноразовую копию изображений, просто остановите виртуальные машины на A, скопируйте изображения с помощью scp / rsync / over-NFS / something. Если виртуальные машины должны быть запущены на A, то для согласованного образа вам потребуется сделать какой-то снимок. Я не знаю KVM и QCOW2, но, возможно, они предоставляют некоторую функциональность снимков. Если нет, то снимки LVM могут быть, если вы храните изображения на томе LVM.
Взгляни на https://alteeve.ca/w/2-Node_Red_Hat_KVM_Cluster_Tutorial он проведет вас по шагам.
Для обеспечения высокой доступности с виртуальными машинами вы можете попробовать Ganeti и DRBD в качестве ресурса, но при настройке ganeti потребуется немного дополнительной работы, но боль того стоит, поскольку это сделает управление вашей виртуальной машиной по-настоящему гладким.
Еще один вариант, который я мог придумать, - это использовать глянцевые объемы. Его будет очень легко настроить и установить, и если у вас хорошее оборудование, производительность должна быть хорошей.
На данный момент я использую простой стиль DRBD, как объяснил Яцек, я также изучаю другие способы.
Я работал над той же проблемой. У меня это работает двумя разными способами.
Настроить
Я решил построить свои гостевые системы kvm поверх LV, используя необработанный формат. Я не знаю, что это лучше, чем иметь их в файлах изображений на LV, но я собираюсь с этим. Было бы намного проще использовать drbd для синхронизации физического раздела LVM, но я хочу запустить несколько LV, и один из них будет работать на hostA
(требуется drbd
основная роль), а другой на hostB
(также требует drbd
основная роль). Так что я застрял, если не перейду к Gluster, но я не хочу принимать еще одну технологию на данном этапе. Мой стек хранилища уже:
KVM guest
drbd (drbd1)
lvm2 logical volume (guestlv)
lvm2 volume group (vg)
lvm2 physical volume (crypt)
dm-crypt (crypt)
gpt partitions (md_d0p1=root, md_d0p2=swap, md_d0p3=crypt)
mirror-RAID (md_d0)
gpt partition (single)
hard drive (2)
Самая большая проблема, которую мне нужно решить, это то, что virt-manager
не узнает и не позволит вам работать с drbd
объемы (virt-install
и vmbuilder
у меня не работают). Итак, вот что я сделал:
hostA
и hastB
работают под управлением Ubunut 14.04LTS, установленного с пакетами OpenSSH Server и Virtualization Host, с lvm2
и drbd8-utils
также установлен. Каждый имеет 4 NICS, соединенных попарно. bond0
соединяется с br0
и используется гостями, bond1
не соединен мостом и использует подсеть, зарезервированную для drbd
.
KVM + DRBD, метод 1
Часть A - Создание гостя KVM
hostA
.ubuntu-14.04.1-server-amd64.iso
к /var/lib/libvirt/images
virt-manager
.hostA
.Details
и используйте вкладку Хранилище, чтобы добавить группу томов LVM.br0
для сети.Часть B - Настройка репликации
lvresize
увеличить размер LV на 1 lun. lvresize -l +1 vg/guestlv
drbd
метаданные. drbdadm create-md /dev/vg/guestlv
drbd
файл ресурсов.
file:/etc/drbd.d/guest.res
resource guest {
device /dev/drbd1;
meta-disk internal;
startup {
become-primary-on hostA;
wfc-timeout 30;
outdated-wfc-timeout 20;
degr-wfc-timeout 30;
}
net {
cram-hmac-alg sha1;
shared-secret sync_disk;
}
syncer {
rate 100M;
verify-alg sha1;
}
on hostA {
address 192.168.2.1:7789;
disk /dev/vg/guestlv;
}
on hostB {
address 192.168.2.2:7789;
disk /dev/vg/guestlv;
}
}
hostB
drbdadm create-md /dev/vg/guestlv
drbdadm connect --discard-my-data guest
drbdadm up guest
hostA
drbdadm up guest
drbdadm primary guest
Часть C - Переключите устройство drbd в конфигурацию KVM
hostA
, бегать virsh edit guestlv
<source dev='/dev/vg/guestlv'/>
и измените его на <source dev='/dev/drbd1'/>
drbd
синхронизировать, чтобы закончить.drbdadm secondary guest
.hostB
, бегать drbdadm primary guest
.virt-manager
для создания нового гостя с нежелательным объемом хранилища. Выключите его, как только начнется установка.hostB
, используйте virsh edit guestlv
и установите хранилище на /dev/drbd1
. Запустите виртуальную машину, убедитесь, что она работает и т. Д.KVM + DRBD, метод 2 Очень похоже на вышеприведенное, но
/dev/drbd1
, синхронизируйте.virsh-edit
поменять местами /dev/drbd1
место хранения./dev/vda
.drbd
первичный и вторичный, настройте другой хост, тест и т. д.