# Лабораторная работа 6. Основы виртуализации в Linux. Отказоустойчивый кластер на базе Corosync/Pacemaker.

Цель

Получить базовые навыки в работе с пакетом управления виртуализацией Libvirt.

Задачи
1. Настроить nfs клиент.
0. Установить и настроить Corosync/Pacemaker.
0. Подготовить XML ВМ.
0. Создать ресурс.

<b>Note: Логин/пароль на всех узлах<br>
Логин:</b> labuser<br>
<b>Пароль:</b> labpass1!

Схема виртуального лабораторного стенда
<div drawio-diagram="136"><img src="https://docs.resds.ru/uploads/images/drawio/2022-02/eRnLmZvya3svZGZ4-drawing-3-1645729739.png"></div>

#### Задание 1. Настройка nfs клиента
В проекте [GROUP]:[team]-lab:4-7, на labnode-1, labnode-2 и labnode-3 нужно зайти в файл
<b>/etc/fstab</b>:
```sh
sudo vi /etc/fstab
```
И раскомментировать следующую строку (уберите символ # в начале строки):
```
10.0.12.18:/home/nfs/ /media/nfs_share/ nfs rw,sync,hard,intr 0 0
```
На всех трёх машинах установить пакет для работы с nfs и перемонтировать разделы,
используя комманды:
```sh
sudo yum install -y nfs-utils
sudo mkdir /media/nfs_share
sudo mount -a
```
#### Задание 2. Установка Pacemaker и Corosync
Установка очень проста. На <b>всех</b> узлах нужно выполнить команду:
```sh
sudo yum install -y pacemaker corosync pcs resource-agents qemu-kvm libvirt virt-install
```
Далее поднять pcs. Тоже, на всех узлах:
```sh
sudo systemctl start pcsd
sudo systemctl enable pcsd
```
Открыть порты, необходимые для работы кластера (на всех узлах):
```sh
sudo firewall-cmd --permanent --add-port=5900-5930/tcp
sudo firewall-cmd --permanent --add-port=49152-49216/tcp
sudo firewall-cmd --permanent --add-service={high-availability,libvirt,libvirt-tls}
sudo firewall-cmd --reload
```
Для обращения к узлам по имени, а не по адресу удобнее прописать на ***всех узлах*** сопоставление
ip адреса и его имени. В таком случае, для сетевого взаимодействия между узлами можно будет
обращаться по его имени. Для того чтобы прописать это соответствие, необходимо открыть файл
***/etc/hosts***:
```sh
sudo vi /etc/hosts
```
Прописать в нем следующее:
```
10.0.12.21 labnode-1 labnode-1.novalocal
10.0.12.22 labnode-2 labnode-2.novalocal
10.0.12.23 labnode-3 labnode-3.novalocal
```
Задайте пользователю <b>hacluster</b> пароль на всех узлах(сам пользователь был автоматически создан в процессе установки pacemaker).
```sh
echo password | sudo passwd --stdin hacluster
```
И, с помощью pcs создать кластер (на одном из узлов):
```sh
sudo pcs cluster auth labnode-1 labnode-2 labnode-3 -u hacluster -p password --force
sudo pcs cluster setup --force --name labcluster labnode-1 labnode-2 labnode-3
sudo pcs cluster start --all
```
Отключить fencing (в рамках работы он не рассматривается)
```sh
sudo pcs property set stonith-enabled=false
```
Включить автозапуск сервисов на всех трех машинах:
```sh
sudo systemctl enable pacemaker corosync --now
sudo systemctl status pacemaker corosync
```
Просмотреть информацию о кластере и кворуме:
```sh
sudo pcs status
sudo corosync-quorumtool
```
#### Задание 3. Настройка моста.
На <b>labnode-1</b> уже создан мост. Сделать то же на <b>labnode-2</b> и <b>labnode-3</b>. Открыть файл:
```sh
sudo vi /etc/sysconfig/network-scripts/ifcfg-br0
```
И добавить в него следующее содержимое для labnode-2:
```
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.12.22
PREFIX=24
GATEWAY=10.0.12.1
```
И добавить в него следующее содержимое для labnode-3:
```
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.0.12.23
PREFIX=24
GATEWAY=10.0.12.1
```

А в файл <b>/etc/sysconfig/network-scripts/ifcfg-eth0</b> добавить параметр <b>BRIDGE</b> и
убрать <b>BOOTPROTO</b> и <b>ONBOOT</b>:
```
DEVICE=eth0
#HWADDR=”оставить как было”
#ONBOOT=yes
TYPE=Ethernet
NAME=eth0
USERCTL=no
BRIDGE=br0
```
Перезагрузить сеть:
```sh
sudo systemctl restart network
```
#### Задание 4. Создание ресурса
Для начала, нужно отключить Selinux. Требуется зайти в файл <b>/etc/selinux/config</b>:
```sh
sudo vi /etc/selinux/config
```
И заменить значение параметра SELINUX с enforcing на permissive:
```
SELINUX = permissive
```
После чего перезагрузить ВМ:
```sh
sudo reboot
```
Сделать это нужно на <b>labnode-1, labnode-2 и labnode-3</b>.

В предыдущих заданиях был сделан дамп (копия) конфигурации виртуальной машины <b>cirros</b> на
<b>labnode-1</b>.
```
ls -lah /home/labuser/cirros.xml
```
Необходимо зайти в него через vi:
```sh
sudo vi cirros.xml
```
И изменить в разделе <disk/>
путь до диска с /var/lib/libvirt/images/ на
/media/nfs_share/, удалив одну строку, и заменив её другой.
```
<source file='/var/lib/libvirt/images/cirros.img'/> ### эту строчку необходимо удалить

<source file='/media/nfs_share/cirros.img'/>
```
 Можно воспользоваться поиском по файлу, набрав /, а затем то, что необходимо найти. Искать
нужно <disk. То есть, набрать /<disk.
Скопировать cirros.xml с <b>labnode-1</b> на <b>labnode-2</b> и <b>labnode-3</b>:
```sh
scp cirros.xml labnode-2:~
scp cirros.xml labnode-3:~
```

На labnode-1, labnode-2 и labnode-3 также переместить файл в /etc/pacemaker/
```sh
sudo mv cirros.xml /etc/pacemaker/
sudo chown hacluster:haclient /etc/pacemaker/cirros.xml
```
Теперь добавить сам ресурс:
```sh
sudo pcs resource create cirros VirtualDomain \
сonfig="/etc/pacemaker/cirros.xml" \
migration_transport=tcp meta allow-migrate=true
```
Просмотреть список добавленных ресурсов
```sh
sudo pcs status
sudo pcs resource show cirros
```
Проверить список виртуальных машин на узле, на котором запустился ресурс:
```sh
sudo virsh list --all
```
Проверить, что ресурс успешно запустился. Для этого из virt_viewer (Пользователь - `Admin`,
пароль - `labpass1!`) подключиться к нему через программу Reminna.
Подключаться по адресу spice://[address]:5900.
<i>[address] - это IP адрес узла, на котором находится ресурс. Узнать его можно, набрав в
консоли соответствующего узла ip -c a.</i>