4.18 Отказоустойчивый кластер

Corosync — это программа с открытым исходным кодом, которая предоставляет возможности кластерного членства и обмена сообщениями, часто называемые уровнем обмена сообщениями, на клиентские серверы. Pacemaker — это менеджер ресурсов кластера с открытым исходным кодом (CRM), который координирует ресурсы и службы, которые управляются и становятся доступными кластеру. По сути, Corosync позволяет серверам связываться как кластер, в то время как Pacemaker предоставляет возможность управлять тем, как ведет себя кластер.

Архитектура pacemaker состоит из трех уровней:

  • Кластеронезависимый уровень — на этом уровне располагаются сами ресурсы и их скрипты, которыми они управляются и локальный демон, который скрывает от других уровней различия в стандартах, использованных в скриптах.
  • Менеджер ресурсов (Pacemaker), который представляет из себя мозг. Он реагирует на события, происходящие в кластере: отказ или присоединение узлов, ресурсов, переход узлов в сервисный режим и другие административные действия. Pacemaker исходя из сложившейся ситуации делает расчет наиболее оптимального состояния кластера и дает команды на выполнения действий для достижения этого состояния (остановка/перенос ресурсов или узлов).
  • Информационный уровень — на этом уровне осуществляется сетевое взаимодействие узлов, т.е. передача сервисных команд (запуск/остановка ресурсов, узлов и т.д.), обмен информацией о полноте состава кластера (quorum) и т.д. На этом уровне работает Corosync.

Для наглядности рассмотрим создание простого кластера с плавающим ip адресом. В случае если работающий сервер отказывает, второй автоматически запускается и начинает работать за место первого.

Если вы хотите иметь доступ к настройкам кластера через доменное имя, необходимо настроить DNS адресацию серверов. Если у вас нет имени домена для использования, можно использовать плавающий IP-адрес для доступа к  настройкам.

Всякий раз, когда есть несколько серверов, обменивающихся друг с другом информацией, особенно с помощью программного обеспечения для кластеризации, важно обеспечить синхронизацию их часов. Рекомендуется  использовать NTP (Network Time Protocol) для синхронизации серверов.

Corosync использует UDP-транспорт между портами 5404 и 5406 . Если вы используете брандмауэр, убедитесь, что между этими серверами разрешена связь между этими портами.

Установка Corosync и Pacemaker:

yum 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

Настройка сервисов, ресурсов и прочего производится согласно документации поставляемой разработчиком приложения и может быть найдена в открытых источниках в глобальной сети Интернет и на сайте разработчика.

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email