Серверы · 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

Что мы будем делать?

  1. Настройка файла hosts.
  2. Установка и настройка Nginx.
  3. Установка Pacemaker, Corosync и Crmsh.
  4. Настройка ключа Corosync.
  5. Запуск всех служб.
  6. Создание и настройка кластера.
  7. Тестирование.

Шаг 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 завершены.

Установка и настройка Nginx на Ubuntu 16.04

Шаг 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, был установлен.

Установка Pacemaker, Corosync и Crmsh на Ubuntu 16.04

Шаг 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/

Генерация ключа 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/

Копирование конфигурации Corosync с узла web01 на другие

Когда все будет завершено, перейдите на серверы ‘web02’ и ‘web03’, затем проверьте файлы.

ssh root@web02  
cd /etc/corosync/  
ls -lah

Конфигурация Corosync на узле web02

Конфигурация 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-адреса серверов.

Список участников Corosync

Шаг 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

Вы увидите результат ниже.

Отключение STONITH и игнорирование политики кворума

Далее нам нужно создать несколько новых ресурсов для кластера. 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

Добавить новые ресурсы Virtual_ip и Webserver в кластер

Наконец, нам нужно добавить группу для новой конфигурации службы плавающего 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

Кластер высокой доступности Nginx на Ubuntu 16.04

Теперь вы получите результат, что узел ‘web01’ находится в состоянии ‘Offline’, а ресурсы virtual_ip и webserver переключены на узел ‘web02’.

Когда вы снова посетите плавающий IP ‘ ha-web.co ‘, вы увидите страницу web02.

Высокая доступность Nginx с Pacemaker, Corosync и Crmsh на Ubuntu 16.04 была успешно установлена и протестирована.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.