Серверы · 7 min read · Nov 29, 2025
Как настроить высокую доступность Nginx с Pacemaker, Corosync и Crmsh на Ubuntu 16.04
В этом руководстве я шаг за шагом покажу вам, как создать кластерный веб-сервер Nginx с высокой доступностью с помощью Pacemaker, Corosync и Crmsh. Мы создадим активный-пассивный кластер или кластер переключения на веб-сервере Nginx с использованием Pacemaker на Ubuntu 16.04.
Pacemaker — это программное обеспечение для управления кластерами с открытым исходным кодом, которое достигает максимальной высокой доступности ваших услуг. Это продвинутый и масштабируемый менеджер HA-кластера, разработанный ClusterLabs с 2007 года.
Corosync Cluster Engine — это проект с открытым исходным кодом, производный от проекта OpenAIS в 2008 году и выпущенный под лицензией BSD. Это система групповой связи с дополнительными функциями для реализации высокой доступности в приложениях.
Существует несколько приложений, доступных для интерфейса Pacemaker, и Crmsh — одно из них. Это интерфейс командной строки Pacemaker для управления стеком высокой доступности Pacemaker. Crmsh написан на Python. Мы можем создавать, настраивать и устранять неполадки стека HA Pacemaker с помощью инструмента командной строки Crmsh.
Предварительные требования
- Три сервера Ubuntu 16.04 - web01 10.0.15.11
- web02 10.0.15.12
- web03 10.0.15.13
- Плавающий IP-адрес 10.0.15.15
- Привилегии root
Что мы будем делать?
- Настройка файла hosts.
- Установка и настройка Nginx.
- Установка Pacemaker, Corosync и Crmsh.
- Настройка ключа Corosync.
- Запуск всех служб.
- Создание и настройка кластера.
- Тестирование.
Шаг 1 - Настройка файла hosts
Примечание:
Запустите шаги 1 - 3 на всех трех серверах ‘web01’, ‘web02’, ‘web03’.
В этом руководстве я буду использовать 3 сервера Ubuntu 16.04, и каждый из них имеет уникальное имя хоста: ‘web01’, ‘web02’ и ‘web03’. Каждый сервер может подключаться к другим серверам по имени хоста сервера.
Чтобы это сделать, отредактируйте файл ‘/etc/hosts’ на всех серверах с помощью vim.
vim /etc/hostsВставьте конфигурацию /etc/hosts ниже.
10.0.15.11 web01
10.0.15.12 web02
10.0.15.13 web03
10.0.15.15 ha-web.coСохраните файл и выйдите из vim.
Затем протестируйте все серверы, пингуя другие серверы через каждое имя хоста.
ping -c 3 web01
ping -c 3 web02
ping -c 3 web03
Шаг 2 - Установка и настройка Nginx
Теперь мы начинаем создавать настройку высокой доступности веб-сервера Nginx, создавая кластер переключения с помощью Pacemaker. Сначала нам нужно установить Nginx на каждом из серверных узлов.
Установите Nginx с помощью команды apt ниже.
apt install -y nginxКогда установка завершится, замените страницу по умолчанию Nginx на уникальную страницу на каждом сервере, выполнив команды ниже, чтобы мы могли позже определить, какой сервер выдал страницу.
#Запустите команду на 'web01'
echo 'web01 - hakase-labs
' > /var/www/html/index.html
#Запустите команду на 'web02'
echo 'web02 - hakase-labs
' > /var/www/html/index.html
#Запустите команду на 'web03'
echo 'web03 - hakase-labs
' > /var/www/html/index.htmlТеперь остановите веб-сервер.
systemctl stop nginxУстановка и настройка Nginx завершены.

Шаг 3 - Установка Pacemaker, Corosync и Crmsh
Pacemaker — это приложение для управления кластерами с открытым исходным кодом. Corosync — это кластерный движок для Pacemaker, а Crmsh — это инструмент на основе Python для управления кластером Pacemaker. Все эти приложения доступны в репозитории Ubuntu.
Установите Pacemaker, Corosync и crmsh с помощью команды apt ниже.
apt install -y pacemaker corosync crmshПосле установки все эти службы автоматически запускаются в системе. Остановите их с помощью команд systemctl ниже.
systemctl stop corosync
systemctl stop pacemakerСтек программного обеспечения, обеспечивающий высокую доступность для Nginx, был установлен.

Шаг 4 - Настройка Corosync
Примечание:
Запустите шаг 4 только на сервере ‘web01’.
Поскольку мы не используем pcsd для Ubuntu, нам нужно настроить Corosync вручную. Мы сгенерируем ключ Corosync для аутентификации кластера и создадим новый файл конфигурации Corosync на сервере ‘web01’, а затем скопируем ключ и конфигурацию на другие серверы ‘web02’ и ‘web03’.
Перед тем как сгенерировать ключ Corosync, нам нужно установить новый пакет ‘haveged’. Он используется для получения лучших случайных чисел для генерации ключа Corosync.
Установите haveged из репозитория с помощью команды apt.
apt install -y havegedТеперь сгенерируйте новый ключ Corosync с помощью команды ниже.
corosync-keygenКогда генерация ключа завершится, вы сможете увидеть новый ключ ‘authkey’ в каталоге ‘/etc/corosync/‘.
ls -lah /etc/corosync/
Далее перейдите в каталог ‘/etc/corosync’ и создайте резервную копию файла конфигурации по умолчанию ‘corosync.conf’.
cd /etc/corosync/
mv corosync.conf corosync.conf.bekupЗатем создайте новый файл конфигурации ‘corosync.conf’ с помощью vim.
vim corosync.confВставьте конфигурацию ниже в этот файл.
# Конфигурация протокола Totem
totem {
version: 2
cluster_name: hakase-cluster
transport: udpu
# Конфигурация интерфейса для Corosync
interface {
ringnumber: 0
bindnetaddr: 10.0.15.0
broadcast: yes
mcastport: 5407
}
}
# Список узлов - Список серверов
nodelist {
node {
ring0_addr: web01
}
node {
ring0_addr: web02
}
node {
ring0_addr: web03
}
}
# Конфигурация кворума
quorum {
provider: corosync_votequorum
}
# Конфигурация журнала Corosync
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
service {
name: pacemaker
ver: 0
}Сохраните файл и выйдите из редактора.
Далее скопируйте ключ аутентификации и файл конфигурации с сервера ‘web01’ на серверы ‘web02’ и ‘web03’.
scp /etc/corosync/* root@web02:/etc/corosync/
scp /etc/corosync/* root@web03:/etc/corosync/
Когда все будет завершено, перейдите на серверы ‘web02’ и ‘web03’, затем проверьте файлы.
ssh root@web02
cd /etc/corosync/
ls -lah
Конфигурация Corosync завершена.
Шаг 5 - Запуск всех кластерных служб
Примечание:
Запустите шаг 5 на всех серверах.
Запустите стек программного обеспечения HA-кластера, pacemaker и corosync, на всех серверах. Затем включите его для автоматического запуска при загрузке.
Запустите Corosync и добавьте его для автоматического запуска при загрузке.
systemctl start corosync
systemctl enable corosyncТеперь запустите pacemaker и включите его для запуска при загрузке.
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemakerВсе службы были запущены, проверьте все узлы и убедитесь, что статус сервера ‘Online’ на всех из них.
crm status
Или вы можете проверить статус, проверив участников Corosync с помощью команды corosync-cmapctl ниже.
corosync-cmapctl | grep membersВы увидите все IP-адреса серверов.

Шаг 6 - Создание и настройка кластера
ПРИМЕЧАНИЕ:
Запустите шаг 6 только на сервере web01
На этом шаге мы настроим кластер Nginx Active-Passive с помощью инструмента командной строки crmsh. Поскольку мы не используем устройство STONITH, мы хотим отключить STONITH и игнорировать политику кворума в нашем кластере.
Запустите команды crm ниже, чтобы отключить ‘STONITH’ и игнорировать политику кворума.
crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignoreТеперь проверьте статус STONITH и политику кворума с помощью команды crm ниже.
crm configure showВы увидите результат ниже.

Далее нам нужно создать несколько новых ресурсов для кластера. Pacemaker поддерживает следующие типы агентов ресурсов (RA).
- LSB (Linux Standard Based) - Предоставляется дистрибутивом Linux. например: ‘/etc/init.d/service’ скрипт.
- OCF (Open Cluster Framework) - Набор инструментов для кластерных вычислений. Проект является частью Linux Foundation.
Для нашего веб-сервера Nginx нам нужно создать два ресурса OCF: ‘virtual_ip’ для плавающего IP и ‘webserver’ для службы nginx.
Создайте новый ресурс ‘virtual_ip’ для конфигурации плавающего IP с помощью команды crm ниже.
sudo crm configure primitive virtual_ip \
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \
cidr_netmask="32" op monitor interval="10s" \
meta migration-threshold="10"А для nginx ‘webserver’ создайте ресурс с помощью команды ниже.
sudo crm configure primitive webserver \
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \
op start timeout="40s" interval="0" \
op stop timeout="60s" interval="0" \
op monitor interval="10s" timeout="60s" \
meta migration-threshold="10"Когда это будет сделано, проверьте новые ресурсы ‘virtual_ip’ и ‘webserver’ с помощью команды ниже. Убедитесь, что все ресурсы имеют статус ‘started’.
crm resource status
Наконец, нам нужно добавить группу для новой конфигурации службы плавающего IP. Мы хотим переместить службу ‘Nginx’ на ресурс ‘webserver’ с плавающим IP на ресурс ‘virtual_ip’.
Мы уже создали плавающий IP и службу, теперь добавьте эти ресурсы в новую группу с именем ‘hakase_balancing’ с помощью команды ниже. Вы можете выбрать свое собственное имя группы, конечно, просто убедитесь, что вы заменили имя везде, где оно используется.
sudo crm configure group hakase_balancing virtual_ip webserverНовая группа ресурсов с именем ‘hakase_balancing’ была определена. Вы можете проверить это с помощью команды ниже.
crm resource showВы получите группу с именем hakase_balancing с членами ресурсов ‘virtual_ip’ и ‘webserver’.

Конфигурация кластера завершена.
Шаг 7 - Тестирование
Тестирование статуса узлов и статуса кластера.
crm status
У нас 3 узла со статусом ‘Online’.
У нас есть группа ресурсов с именем ‘hakase_balancing’, и она сейчас работает на узле ‘web01’.
Тестирование веб-сервера Nginx из веб-браузера. Перейдите по плавающему IP-адресу, имя моего тестового сервера - ha-web.co. Используйте имя, которое вы выбрали для своего сервера здесь.
Все ресурсы находятся на узле ‘web01’.
Тестирование активного-пассивного кластера или переключения
Остановите кластер на сервере ‘web01’, выполнив команду ниже на узле ‘web01’.
crm cluster stopВы получите результат ‘ INFO: Службы кластера остановлены ‘.
Теперь войдите на узел ‘web02’ и проверьте статус кластера.
crm status
Теперь вы получите результат, что узел ‘web01’ находится в состоянии ‘Offline’, а ресурсы virtual_ip и webserver переключены на узел ‘web02’.
Когда вы снова посетите плавающий IP ‘ ha-web.co ‘, вы увидите страницу web02.
Высокая доступность Nginx с Pacemaker, Corosync и Crmsh на Ubuntu 16.04 была успешно установлена и протестирована.
Ссылки
Get new posts in your inbox
No spam. Unsubscribe anytime.