Corosync+Pacemaker+Nginx

Debian 11

В данной статье будет рассказано о том, как настроить на базовом уровне отказоустойчивый кластер из двух серверов с Nginx на борту, используя Pacemaker и Corosync с применением Virtual IP.

Я развернул 2 виртуалки с 3-мя сетевыми картами/вланами:
1. локальная сеть
2. сеть кластера
3. внешний интерфейс

Виртуалки абсолютно идентичные, лишь IP-адреса внутренней сети отличаются.

Далее всё на чистом Debian 11. Все команды от root.

Выполнить на всех нодах

На всех нодах в /etc/hosts добавить записи:

nano /etc/hosts
172.16.20.1 proxy01
172.16.20.2 proxy02

Это IP-адреса, для внутренней сети кластера. Также прописываем эти адреса на виртуалках.

Pacemaker и Corosync со всеми зависимостями из дефолтных репозиториев:

apt install -y pcs pacemaker resource-agents

Задаём сложный пароль для пользователя hacluster, желательно одинаковый:

passwd hacluster

Nginx из официальных репозиториев:

apt install -y nginx nginx-extras && systemctl enable nginx --now

Нужно определиться с плавающими Virtual IP. В данном случае их будет 2:
1. 10.10.20.2/24 - внутренняя локальная сеть;
2. 1.1.1.1 - IP на интерфейсе, смотрящим в интернет.

systemctl enable pcsd corosync --now

Включить автозапуск для Pacemaker и Corosync (последний не запустится – не обращаем внимания):

Выполнить на любой ноде
pcs host auth proxy01 proxy02
pcs cluster setup ha proxy01 proxy02 --force

Если вываливается с ошибкой, то на всех нодах:

pcs cluster destroy
pcs cluster enable --all && pcs cluster start --all
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore

Проверить статус кластера:

systemctl status -l corosync && pcs cluster status

Далее я добавлю 4 ресурса:
virtual_ip - плавающий внешний IP-адрес;
route_ip - маршрут по умолчанию для этого адреса;
virtual_ip_lan - IP-адрес для внутренней сети;
nginx - собственно NginX/

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 nic=ens192.100 ip=82.193.1.120 cidr_netmask=24 op monitor interval=5s 
pcs resource create route_ip ocf:heartbeat:Route destination=default device=ens192.100 gateway=82.193.1.1
pcs resource create virtual_ip_lan ocf:heartbeat:IPaddr2 nic=ens192.200 ip=10.10.20.2 cidr_netmask=24 op monitor interval=5s
pcs resource create nginx ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf op monitor interval=5s


Добавим ресурсы в группу:

pcs resource group add ISP virtual_ip route_ip virtual_ip_lan nginx

Определим порядок запуска:

pcs constraint order set virtual_ip route_ip virtual_ip_lan nginx

Явно указываю, что NginX должен запускаться на той ноде, на которой запущен virtual_ip

pcs constraint colocation add nginx with virtual_ip score=INFINITY

В общем-то и всё. Можно запустить NginX в режиме клона и тогда он будет одновременно запущен на всех нодах и задержка при переезде уменьшится.

pcs constraint order set virtual_ip route_ip virtual_ip_lan nginx
pcs resource clone nginx
pcs constraint colocation add nginx-clone with virtual_ip score=INFINITY
Краткая справка по командам управления кластером

Краткая справка по командам управления кластером:

pcs cluster destroy && rm /var/lib/corosync/ringid_* - удалить кластер

pcs status resources - посмотреть статус ресурсов

pcs resource delete route_ip - удалить ресурс route_ip

pcs resource move virtual_ip proxy02 - переместить явно virtual_ip на другую ноду

pcs resource cleanup - очистить кластер от ошибок

crm_mon -Af - мониторинг

В статье был настроен простой кластер из Pacemaker+Corosync и Nginx, который сразу же готов к работе )

После внесения изменений в конфигурацию NginX настройки применяются следующей командой:

nginx -s reload

За более подробными инструкциями и списком ресурсов, которые можно добавить идём на сайт разработчика ссылка

Fuse

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.