Corosync — это программа с открытым исходным кодом, которая предоставляет возможности кластерного членства и обмена сообщениями, часто называемые уровнем обмена сообщениями, на клиентские серверы. Pacemaker — это менеджер ресурсов кластера с открытым исходным кодом (CRM), который координирует ресурсы и службы, которые управляются и становятся доступными кластеру. По сути, Corosync позволяет серверам связываться как кластер, в то время как Pacemaker предоставляет возможность управлять тем, как ведет себя кластер.
Архитектура pacemaker состоит из трех уровней:
- Кластеронезависимый уровень — на этом уровне располагаются сами ресурсы и их скрипты, которыми они управляются, и локальный демон, который скрывает от других уровней различия в стандартах, использованных в скриптах.
- Менеджер ресурсов (Pacemaker), который представляет из себя мозг. Он реагирует на события, происходящие в кластере: отказ или присоединение узлов, ресурсов, переход узлов в сервисный режим и другие административные действия. Pacemaker, исходя из сложившейся ситуации, делает расчет наиболее оптимального состояния кластера и дает команды на выполнения действий для достижения этого состояния (остановка/перенос ресурсов или узлов).
- Информационный уровень — на этом уровне осуществляется сетевое взаимодействие узлов, т.е. передача сервисных команд (запуск/остановка ресурсов, узлов и т.д.), обмен информацией о полноте состава кластера (quorum) и т.д. На этом уровне работает Corosync.
Для наглядности рассмотрим создание простого кластера с плавающим ip-адресом. В случае если работающий сервер отказывает, второй автоматически запускается и начинает работать вместо первого.
Если вы хотите иметь доступ к настройкам кластера через доменное имя, необходимо настроить DNS-адресацию серверов. Если у вас нет имени домена для использования, можно использовать плавающий IP-адрес для доступа к настройкам.
Всякий раз, когда есть несколько серверов, обменивающихся друг с другом информацией, особенно с помощью программного обеспечения для кластеризации, важно обеспечить синхронизацию их часов. Рекомендуется использовать NTP (Network Time Protocol) для синхронизации серверов.
Corosync использует UDP-транспорт между портами 5404 и 5406. Если вы используете брандмауэр, убедитесь, что между этими серверами разрешена связь между этими портами.
Установка Corosync и Pacemaker:
Если вы используете РЕД ОС версии 7.1 или 7.2, выполните команду:
yum install corosync pcs pacemaker
Если вы используете РЕД ОС версии 7.3 и старше, выполните команду:
dnf install corosync pcs pacemaker
Для управления кластером рекомендуется пользоваться утилитой pcs. При установке pacemaker автоматически будет создан пользователь hacluster. Для использования pcs, а также для доступа в веб-интерфейс, нужно задать пароль пользователю hacluster:
passwd hacluster Changing password for user hacluster. New password: Retype new password: passwd: all authentication tokens updated successfully.
Запуск сервиса:
systemctl start pcsd
Настраиваем аутентификацию (на одном узле):
pcs cluster auth <Сервер_1> <Сервер_2> Username: hacluster Password: <Сервер_1>: Authorized <Сервер_2>: Authorized
Вместо имен <Сервер_1> и <Сервер_2> используйте ваши доменные имена серверов.
После этого кластером можно управлять с одного узла.
Создаем кластер:
pcs cluster setup --name mycluster <Сервер_1> <Сервер_2> Shutting down pacemaker/corosync services... Redirecting to /bin/systemctl stop pacemaker.service Redirecting to /bin/systemctl stop corosync.service Killing any remaining services... Removing all cluster configuration files... <Сервер_1>: Succeeded <Сервер_2>: Succeeded Synchronizing pcsd certificates on nodes <Сервер_1>, <Сервер_2>... <Сервер_1>: Success <Сервер_2>: Success Restaring pcsd on the nodes in order to reload the certificates... <Сервер_1>: Success <Сервер_2>: Success
Запускаем кластер:
pcs cluster start --all <Сервер_2>: Starting Cluster... <Сервер_1>: Starting Cluster...
Настройка автоматического включения кластера при загрузке:
pcs cluster enable --all <Сервер_1>: Cluster Enabled <Сервер_2>: Cluster Enabled
Смотрим результат:
pcs status cluster Cluster Status: Stack: unknown Current DC: NONE 2 nodes and 0 resources configured Node <Сервер_1>: UNCLEAN (offline) Node <Сервер_2>: UNCLEAN (offline) PCSD Status: <Сервер_1>: Online <Сервер_2>: Online
Проверка синхронизации узлов кластера:
corosync-cmapctl | grep members runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(192.168.100.201) runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.1.status (str) = joined runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(192.168.100.202) runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.2.status (str) = joined
pcs status corosync Membership information ---------------------- Nodeid Votes Name 1 1 <Сервер_1> (local) 2 1 <Сервер_2>
Настройка основных параметров кластера.
Механизм STONITH ( Shoot-The-Other-Node-In-The-Head) — защита от Split-Brain: позволяет выключать/включать/перезагружать узлы кластера. Обычно этот механизм реализуется с помощью специальных сетевых устройств с удаленным управлением или через специальные платы управления сервером. В pacemaker устройства STONITH реализованы в виде кластерных ресурсов.
Кворум определяет минимальное число работающих узлов в кластере, при котором кластер считается работоспособным. По умолчанию, кворум считается неработоспособным, если число работающих узлов меньше половины от общего числа узлов. Так как узла у нас всего два, то кворума у нас не будет, поэтому необходимо отключить эту политику:
pcs property set no-quorum-policy=ignore
Посмотреть какие получились настройки можно командой:
pcs property Cluster Properties: cluster-infrastructure: corosync cluster-name: mycluster dc-version: have-watchdog: false last-lrm-refresh: 1480973783 no-quorum-policy: ignore stonith-enabled: false
Настройки кластера можно проверить с помощью утилиты crm_verify. Опция -L осуществляет диагностику всех работающих узлов кластера.
Чтобы сервисы кластера запускались автоматически при перезагрузке сервера, нужно выполнить на каждом узле кластера:
systemctl enable pcsd systemctl enable corosync systemctl enable pacemaker
Создание виртуального плавающего ip-адреса (floatingip) VIP:
pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.100.203 cidr_netmask=32 op monitor interval=30s pcs status resources virtualip (ocf::heartbeat:IPaddr2): Started <Сервер_1>
Если узлы кластера не одинаковы по производительности или доступности, то можно увеличить приоритет одного из узлов, чтобы он был активным всегда когда работает:
pcs constraint location virtualip prefers <Сервер_1>=100
Настройка сервисов, ресурсов и прочего производится согласно документации поставляемой разработчиком приложения и может быть найдена в открытых источниках в глобальной сети Интернет и на сайте разработчика.