1.7.15 Отказоустойчивый кластер
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 Username: hacluster Password: : Authorized : Authorized
Вместо имен и используйте ваши доменные имена серверов.
После этого кластером можно управлять с одного узла.
Создаем кластер:
pcs cluster setup --name mycluster 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... : Succeeded : Succeeded Synchronizing pcsd certificates on nodes , ... : Success : Success Restaring pcsd on the nodes in order to reload the certificates... : Success : Success
Запускаем кластер:
pcs cluster start --all: Starting Cluster... : Starting Cluster...
Настройка автоматического включения кластера при загрузке:
pcs cluster enable --all: Cluster Enabled : Cluster Enabled
Смотрим результат:
pcs status clusterCluster Status: Stack: unknown Current DC: NONE 2 nodes and 0 resources configured Node : UNCLEAN (offline) Node : UNCLEAN (offline) PCSD Status: : Online : Online
Проверка синхронизации узлов кластера:
corosync-cmapctl | grep membersruntime.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 corosyncMembership information ---------------------- Nodeid Votes Name 1 1 (local) 2 1
Настройка основных параметров кластера.
Механизм STONITH ( Shoot-The-Other-Node-In-The-Head) — защита от Split-Brain: позволяет выключать/включать/перезагружать узлы кластера. Обычно этот механизм реализуется с помощью специальных сетевых устройств с удаленным управлением или через специальные платы управления сервером. В pacemaker устройства STONITH реализованы в виде кластерных ресурсов.
Кворум определяет минимальное число работающих узлов в кластере, при котором кластер считается работоспособным. По умолчанию, кворум считается неработоспособным, если число работающих узлов меньше половины от общего числа узлов. Так как узла у нас всего два, то кворума у нас не будет, поэтому необходимо отключить эту политику:
pcs property set no-quorum-policy=ignore
Посмотреть какие получились настройки можно командой:
pcs propertyCluster 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
Если узлы кластера не одинаковы по производительности или доступности, то можно увеличить приоритет одного из узлов, чтобы он был активным всегда когда работает:
pcs constraint location virtualip prefers =100
Настройка сервисов, ресурсов и прочего производится согласно документации поставляемой разработчиком приложения и может быть найдена в открытых источниках в глобальной сети Интернет и на сайте разработчика.
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.