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

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

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

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

Print Friendly, PDF & Email