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
За более подробными инструкциями и списком ресурсов, которые можно добавить идём на сайт разработчика ссылка