Лабораторная работа 2. Установка клиентской ВМ и настройка динамической миграции на базе Corosync/Pacemaker
Схема виртуального лабораторного стенда
Запуск ВМ с использованием 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
и скопировать его по пути/tmp/cirros.img
wget 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 /tmp/cirros.img
-
Создать Ceph RBD для виртуальной машины:
sudo qemu-img convert -p -t none /tmp/cirros.img rbd:libvirt-pool/cirros sudo virsh pool-refresh libvirt-pool
- Проверить доступность созданного образа:
sudo virsh vol-list libvirt-pool
- Проверить доступность созданного образа:
-
Создать ВМ:
sudo virt-install --name Test-VM --graphics none \ --vcpus 1 --memory 128 --disk "vol=libvirt-pool/cirros" \ --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