Лабораторная работа 2. Установка клиентской ВМ и настройка динамической миграции на базе Corosync/Pacemaker
Запуск ВМ с использованием Ceph FS и Ceph RBD
Интеграция Ceph и libvirt
Установка libvirt
sudo apt install -y qemu-kvm virtinst libvirt-clients libvirt-daemon-system
Добавление пула Ceph в libvirt
-
Во-первых, нам нужно создать пул Ceph OSD специально для использования хранилища kvm, qemu, libvirt:
sudo ceph osd pool create libvirt-pool 64 64 sudo rbd pool init libvirt-pool -
Во-вторых, нам нужен пользователь Ceph для манипулирования только что созданным пулом.
sudo ceph auth get-or-create "client.libvirt" mon "profile rbd" osd "profile rbd pool=libvirt-pool"
Выполнить пункты 3-6 на каждом узле
-
Нам нужно добавить файл с секретом libvirt для аутентификации.
uuidgen->e6ca4cff-bf4f-4444-9089-8bd1304b3500- для libvirt секрета
sudo vi /tmp/libvirt-secret.xml:<secret ephemeral='no' private='no'> <uuid>e6ca4cff-bf4f-4444-9089-8bd1304b3500</uuid> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret> -
Встраиваем ключ авторизации пользователя Ceph в файл с секретом с указанным uuid.
sudo virsh secret-define --file "/tmp/libvirt-secret.xml" sudo rm -f "/tmp/libvirt-secret.xml" sudo virsh secret-set-value --secret "e6ca4cff-bf4f-4444-9089-8bd1304b3500" \ --base64 "$(sudo ceph auth get-key client.libvirt)" -
Нам также необходимо определить пул хранения RBD в libvirt. Сначала нам нужно создать файл определения пула хранения (вставить свои адреса внешних интерфейсов в теги host):
vi /tmp/libvirt-rbd-pool.xml:<pool type="rbd"> <name>libvirt-pool</name> <source> <name>libvirt-pool</name> <host name='ext-ceph-01' port='6789' /> <host name='ext-ceph-02' port='6789' /> <host name='ext-ceph-03' port='6789' /> <auth username='libvirt' type='ceph'> <secret uuid='e6ca4cff-bf4f-4444-9089-8bd1304b3500'/> </auth> </source> </pool> -
Теперь мы можем определить и запустить пул.
sudo virsh pool-define "/tmp/libvirt-rbd-pool.xml" sudo rm -f "/tmp/libvirt-rbd-pool.xml" sudo virsh pool-autostart "libvirt-pool" sudo virsh pool-start "libvirt-pool"
Монтирование Ceph FS
-
На каждом узле кластера необходимо выполнить следующие команды:
sudo mkdir /mnt/cephfs sudo mount -t ceph fsclient@.cephfs=/ /mnt/cephfs -o secretfile=/etc/ceph/fsclient.secret -
Проверить статус монтирования:
df -hT | grep ceph
Запуск ВМ
-
Скачать образ
cirrosи скопировать его в/mnt/cephfs/, где примонтирована Ceph FSwget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img sudo cp cirros-0.5.1-x86_64-disk.img /mnt/cephfs/cirros.img -
Создать Ceph RBD как дополнительное хранилище для виртуальной машины:
sudo virsh vol-create-as libvirt-pool cirros-img --capacity 1G --format raw -
Создать ВМ:
sudo virt-install --name Test-VM --graphics none \ --vcpus 1 --memory 128 --disk "path=/mnt/cephfs/cirros.img" \ --disk "vol=libvirt-pool/cirros-img" --import --autostart -
Проверить работоспособность запущенной ВМ:
sudo virsh list --all sudo virsh console Test-VM
Настройка динамической миграции
Установка Pacemaker/Corosync
- На всех узлах нужно установить требуемые пакеты и запустить демон
pcsd:sudo apt install pacemaker corosync pcs resource-agents sudo systemctl enable --now pcsd
Запуск кластера
-
Задать пароль пользователя
haclusterна всех узлах (в примере используется парольpassword):sudo passwd hacluster -
Отредактировать раздел
nodelistфайла/etc/corosync/corosync.conf(на одном из узлов):nodelist { node { name: ceph-01 nodeid: 1 ring0_addr: ceph-01 } node { name: ceph-02 nodeid: 2 ring0_addr: ceph-02 } node { name: ceph-03 nodeid: 3 ring0_addr: ceph-03 } } -
С помощью pcs создать кластер (на одном из узлов):
sudo pcs host auth ceph-01 ceph-02 ceph-03 -u hacluster -p password sudo pcs cluster setup newcluster ceph-01 ceph-02 ceph-03 --force sudo pcs cluster start --all -
Отключить fencing (в рамках работы он не рассматривается):
sudo pcs property set stonith-enabled=false -
Включить автозапуск сервисов на всех трех машинах:
sudo systemctl enable pacemaker corosync -
Просмотреть информацию о кластере и кворуме:
sudo pcs status sudo corosync-quorumtool
Создание ресурса
-
Создать дамп созданной ВМ и затем удалить её:
sudo virsh dumpxml Test-VM | tee vm_conf.xml sudo virsh undefine Test-VM sudo virsh destroy Test-VM -
Скопировать дамп с ceph-01 на ceph-02 и ceph-03:
scp vm_conf.xml ceph-02:~ scp vm_conf.xml ceph-03:~ -
На ceph-01, ceph-02 и ceph-03 переместить файл в /etc/pacemaker/
sudo mv vm_conf.xml /etc/pacemaker/ sudo chown hacluster:haclient /etc/pacemaker/vm_conf.xml -
Теперь добавить сам ресурс:
sudo pcs resource create test-vm VirtualDomain \ config="/etc/pacemaker/vm_conf.xml" \ migration_transport=tcp meta allow-migrate=true -
Просмотреть список добавленных ресурсов:
sudo pcs status sudo pcs resource config test-vm -
Проверить список виртуальных машин на узле, на котором запустился ресурс:
sudo virsh list --all -
Проверить, что ресурс успешно запустился.
Настройка миграции
Выполнить действия на всех узлах
-
Необходимо отредактировать файл
/etc/libvirt/libvirtd.conf:listen_tls = 0 listen_tcp = 1 auth_tcp = "none" -
Отредактировать файл
/etc/default/libvirtd:libvirtd_opts="--config /etc/libvirt/libvirtd.conf" -
Запустить сокет
libvirt-tcp:sudo systemctl stop libvirtd && sudo systemctl start libvirtd-tcp.socket
Миграция ресурса
-
Нужно переместить ресурс на
ceph-02:sudo pcs resource move test-vm ceph-02 -
На ceph-02 посмотреть статус кластера, и проверить список запущенных гостевых машин можно следующими командами:
sudo pcs status sudo virsh list --all -
Команда move добавляет ресурсу правило, заставляющее его запускаться только на указанном узле. Для того, чтобы очистить все добавленные ограничения - clear:
sudo pcs resource clear test-vm