Pacemaker - менеджер ресурсов для кластеров высокой доступности с открытым исходным кодом.
Основные функции :
-
Поддержка кворумных и ресурсозависимых кластеров любого размера
-
Обнаружение и восстановление после сбоев
-
Распаковываем и копируем в необходимые директории
-
Независимость от систем хранения - общий диск не нужен
-
Кластеризовано может быть всё, что описано
-
Автоматическая репликация на все узлы
-
Поддержка Shut The Other Node In The Head (STONITH - это возможность сделать узел неспособным запускать ресурсы, даже если этот узел не отвечает на команды кластера)
-
Возможность задания порядка запуска ресурсов, а также их совместимости на одном узле
-
Поддержка расширенных типов ресурсов: клонов (запущен на множестве узлов) и с дополнительными состояниями (master/slave и т.п.)
-
Единые инструменты управления кластером с поддержкой сценариев
Corosync(Corosync Cluster Engine) - проект с открытым кодом, предназначенный для создания кластеров высокой доступности, основной задачей которого является знать и передавать состояние всех узлов
Основные функции :
-
Отслеживание состояния приложений
-
Оповещение приложений о смене активной ноды кластера
-
Отправка одинаковых сообщений процессам на всех узлах кластера
-
предоставление доступа к базе данных с конфигурацией и статистикой, а также отправка уведомлений о ее изменениях
-
Устанавливаем пакеты (pcs -система настройки pacemaker/corosync )
sudo apt install pacemaker corosync pcs
-
Добавляем на всех узлах pcs в автозагрузку
systemctl enable pcsd
-
Изменяем пароль пользователю hacluster, созданному при установке Pacemaker
passwd hacluster
-
Запускаем сервис
systemctl start pcsd
-
Настраиваем аутентификацию (на одном узле, username - hacluster)
pcs host auth <Сервер_1> <Сервер_2>
-
Обязательно проверить включена ли служба pcsd на обоих узлах!
systemctl status pcsd
-
Запускаем ноды
pcs cluster setup <Название_кластера> <Сервер_1> <Сервер_2>
И тут начались проблемы...
Warning: Unable to read the known-hosts file: No such file or directory: '/var/lib/pcsd/known-hosts'
Error: Hosts 'vm0', 'vm2' are not known to pcs, try to authenticate the hosts using 'pcs host auth vm0 vm2' command
Error: None of hosts is known to pcs.
Но вопрос решился легко
sudo pcs cluster destroy # Хотя у меня до этого кластера не было...
systemctl restart pcsd
pcs host auth node1 node2
sudo pcs cluster setup --force newCluster node1 node2
-
Делаем все ноды активными
pcs cluster enable --all
-
Добавляем все службы в автозапуск на основном сервере(? - на всех серверах и обязательно проверяем статус!)
systemctl enable pcsd systemctl enable corosync systemctl enable pacemaker
-
Проверяем (или через gui (port 2224) - добавить ноду в Add Existing)
pcs status
Настраиваем 3 интерфейса: первый - для доступа к нодам, второй - для Heartbeat, третий - для синхронизации DRBD-ресурсов
-
Ставим пакет
sudo apt install drbd-utils
-
Подключаем модули ядра
sudo modprobe drbd echo “drbd” >> /etc/modules
-
Добавляем диск (не забываем ставить lvm2)
lsblk fdisk dev/sdb1 pvcreate /dev/sdb1 vgcreate vg0 /dev/sdb1 lvcreate -l 90%VG -n test vg0
-
Создаем конфиг /etc/drbd.d/my_files.res
touch /etc/drbd.d/my_files.res
resource my_files { # имя protocol C; # протолол (a, b ,c) disk { fencing resource-only; } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh"; } syncer { rate 110M; } on vm2 { device /dev/drbd2; disk /dev/vg0/test; address 192.168.123.3:7794; # ip адрес и порт синхронизации DRBD-ресурсов meta-disk internal; } on vm0 { device /dev/drbd2; disk /dev/vg0/test; address 192.168.123.4:7794; # ip адрес и порт синхронизации DRBD-ресурсов meta-disk internal; } }
-
Выполняем на обеих нодах
drbdadm create-md my_files drbdadm up all
-
Выполняем на первой ноде
drbdadm primary --force my_files
-
Выполняем на второй ноде
drbdadm secondary my_files
-
Подключаем разделы
mkdir /mnt/test mount /dev/drbd2 /mnt/test
-
Подключаем ресурс в кластер
pcs create MyFile ocf:linbit:drbd drbd_resource=/dev/drbd2 op monitor interval=60s pcs -f drbd_cfg resource promotable MyFile promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
Но ресурсы не стартуют...
Вопрос с drbd решился следующим образом:
apt install --reinstall drbd-utils
sudo pcs resource update MyFile ocf:linbit:drbd drbd_resource=my_files
Вопрос c Ipaddr2 решился следующим образом:
cp /usr/lib/ocf/lib/heartbeat/* /lib/heartbeat/
sudo pcs property set stonith-enabled=false
В обоих случаях для дебага помогла команда:
sudo pcs resource debug-promote <имя_ресурса>