Отказоустойчивый кластер HAProxy+Pacemaker+Corosync — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 55: Строка 55:
 
Автозапуск кластера при загрузке
 
Автозапуск кластера при загрузке
 
  pcs cluster enable
 
  pcs cluster enable
 +
 +
 +
Проверяем статус кластера
 +
  pcs cluster status
 +
Cluster Status:
 +
  Status of pacemakerd: 'Pacemaker is running' (last updated 2023-07-14 00:13:50 +03:00)
 +
  Cluster Summary:
 +
    * Stack: corosync
 +
    * Current DC: haproxy-test-01 (version 2.1.5-8.0.1.el8-a3f44794f94) - partition with quorum
 +
    * Last updated: Fri Jul 14 00:13:50 2023
 +
    * Last change:  Fri Jul 14 00:12:11 2023 by hacluster via crmd on haproxy-test-01
 +
    * 2 nodes configured
 +
    * 0 resource instances configured
 +
  Node List:
 +
    * Online: [ haproxy-test-01 haproxy-test-02 ]
 +
 +
PCSD Status:
 +
  haproxy-test-01: Online
 +
  haproxy-test-02: Online
  
  

Версия 00:15, 14 июля 2023

Настройка производилась на Oracle Linux Server 8.8


Для построения кластера, будем использовать Pacemaker. Pacemaker - менеджер ресурсов кластера (Cluster Resource Manager), задачей которого является достижение максимальной доступности управляемых им ресурсов и защита их от сбоев как на уровне самих ресурсов, так и на уровне целых узлов кластера.
Архитектура pacemaker состоит из трех уровней:

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

Hacluster02.png


Имеем два сервера с работающим HAProxy и два плавающих(виртуальных ip-адреса)

haproxy-test-01  172.19.0.190
haproxy-test-02  172.19.0.191
virtual_ip1      172.19.0.192
virtual_ip2      172.19.0.193


Итоговая схема
Hacluster01.png


Для начала ставим нужные пакеты

yum install corosync pcs pacemaker


Для управления кластером используется утилита pcs. При установке Pacemaker автоматически будет создан пользователь hacluster. Для использования pcs, а также для доступа в веб-интерфейс нужно задать пароль пользователю hacluster

passwd hacluster


Запускаем сервис

systemctl start pcsd


Настраиваем аутентификацию (уже на одном узле)

pcs host auth haproxy-test-01 haproxy-test-02
Username: hacluster
Password: 
haproxy-test-01: Authorized
haproxy-test-02: Authorized

После этого кластером можно управлять с одного узла


Создаем кластер

pcs cluster setup mycluster haproxy-test-01 haproxy-test-02


Запускаем кластер

pcs cluster start --all


Автозапуск кластера при загрузке

pcs cluster enable


Проверяем статус кластера

 pcs cluster status
Cluster Status:
 Status of pacemakerd: 'Pacemaker is running' (last updated 2023-07-14 00:13:50 +03:00)
 Cluster Summary:
   * Stack: corosync
   * Current DC: haproxy-test-01 (version 2.1.5-8.0.1.el8-a3f44794f94) - partition with quorum
   * Last updated: Fri Jul 14 00:13:50 2023
   * Last change:  Fri Jul 14 00:12:11 2023 by hacluster via crmd on haproxy-test-01
   * 2 nodes configured
   * 0 resource instances configured
 Node List:
   * Online: [ haproxy-test-01 haproxy-test-02 ]

PCSD Status:
  haproxy-test-01: Online
  haproxy-test-02: Online


Проверка синхронизации узлов кластера

corosync-cmapctl | grep members
 runtime.members.1.config_version (u64) = 0
 runtime.members.1.ip (str) = r(0) ip(172.19.0.190) 
 runtime.members.1.join_count (u32) = 1
 runtime.members.1.status (str) = joined
 runtime.members.2.config_version (u64) = 0
 runtime.members.2.ip (str) = r(0) ip(172.19.0.191) 
 runtime.members.2.join_count (u32) = 1
 runtime.members.2.status (str) = joined
pcs status corosync
 Membership information
 ----------------------
     Nodeid      Votes Name
          1          1 haproxy-test-01 (local)
          2          1 haproxy-test-02