[RH7] Tworzenie klastra wysokiej dostępności

Red Hat 7.x / CentOS 7.x
Na oprogramowanie umożliwiające uruchomienie klastra HA w systemach RHEL/Centos 7.x składają się trzy główne komponenty:

pacemaker - komponent odpowiedzialny za całość aktywności klastrowej, np: monitoring członkostwa w klastrze, zarządzanie serwisami i zasobami klastra czy fensowanie członków klastra. Na pacemaker'a składają się cztery główne funkcjonalności:
- Cluster Information Base (CIB) - zawierający konfigurację i informacje o statusie samego klastra jak i wszystkich jego komponentów, przechowywaną w formie XML
- Policy Engine (PEngine) - określający na podstawie informacji zawartych w CIB najlepszą drogę dostępu i optymalną konfigurację klastra
- Cluster Resource Management Deamon (CRMd) - koordynuje zatrzymanie, uruchamianie i sprawdzanie statusu lokalnych demonów zarządzania klastrem (Local Resource Management Deamon - LRMd)
- Shoot the Other Node in the Head (STONITH) - funkcjonalność odpowiedzialna za fensowanie urządzeń klastra skonfigurowanych w CIB

corosync - to framework używany przez pacemaker'a do obsługi komunikacji pomiędzy nodami klastra. Dostarcza on pacemaker'owi informacji o członkostwie i quorum klastra

pcs (Pacemaker Configuration System) - zawiera dwa narzędzia konfiguracji klastra: 
- komenda pcs dostarcza interfejs do tworzenia, konfiguracji i kontroli wszystkich parametrów klastra
- demon pcsd dba o synchronizację konfiguracji nodów oraz dostarcza interfejs tworzenia i konfiguracji klastra.

Dodatkowym oprogramowaniem wymaganym do działania jest pakiet umożliwiający fensowanie urządzeń środowiska klastra. Pakiet ten występuje w wielu wersjach dedykowanych do różnego rodzaju sprzętu. Liczba dedykowanych agentów waha się w okolicach 30, i należałoby dobrać odpowiedni dla swojego środowiska - lub skorzystać z paczki zbiorczej fence-agents-all. Pełna lista dostępna jest w yum:

[root@clusternode1 ~]# yum search fence-agents

Z zagadnień teoretycznych należałoby wspomnieć o portach, któymi klaster komunikuje się sieciowo, gdyż porty te muszą zostać otwarte na lokalnym oraz zewnętrznych firewall'ach. Będą to:
- 5404(UDP), 5405(UDP) - corosync
- 2224(TCP) - pcsd
- 3121(TCP) - pacemaker
- 21064(TCP) - dlm - używany przez GFS2

Selinux w trybie enforcing jest w pełni wspierany, jeśli korzystamy z polityki targeted.

Tyle teorii, zabieramy się więc do tworzenia klastra.

Jak pisałem wcześniej do działania klastra będziemy potrzebować kilku paczek. Część z nich jest zależna od innych i zostanie doinstalowana automatycznie przez yum, dlatego wystarczy, że zainstalujemy tylko dwie z nich:

[root@clusternode1 ~]# yum install pcs fence-agents-all

Na środowiskach produkcyjnych nie jest konieczna instalacja wszystkich agentów i wystarczy dobrać odpowiedni do naszych potrzeb...

Kolejnym etapem będzie umożliwienie komunikacji, poprzez otwarcie lokalnego firewall'a. W wersji 7 nie ma konieczności wprowadzania poszczególnych reguł ruchu, a całość konfiguracji możemy udrożnić dodając odpowiedni serwis do demona firewalld:

[root@clusternode1 ~]# firewall-cmd --permanent --add-service=high-availability
success
[root@clusternode1 ~]# firewall-cmd --reload
success

Oczywiście włączamy demona pcs w systemctl, aby startował wraz z systemem, oraz uruchamiamy go, wykonując na wszystkich node'ach polecenia:

[root@clusternode1 ~]# systemctl enable pcsd
Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.
[root@clusternode1 ~]# systemctl start pcsd

Szybka weryfikacja, czy wszystko przebiegło po naszej myśli:

[root@clusternode1 ~]# systemctl is-enabled pcsd
enabled
[root@clusternode1 ~]# systemctl status pcsd
● pcsd.service - PCS GUI and remote configuration interface
   Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2016-03-03 20:47:01 CET; 34s ago
 Main PID: 10424 (pcsd)
   CGroup: /system.slice/pcsd.service
           ├─10424 /bin/sh /usr/lib/pcsd/pcsd start
           ├─10428 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/ruby -I/usr/lib/pcsd /usr/lib/pcsd/ssl.rb
           └─10429 /usr/bin/ruby -I/usr/lib/pcsd /usr/lib/pcsd/ssl.rb

Mar 03 20:47:00 clusternode1 systemd[1]: Starting PCS GUI and remote configuration interface...
Mar 03 20:47:01 clusternode1 systemd[1]: Started PCS GUI and remote configuration interface.

Operacje powtarzamy na wszystkich node'ach przyszłego klastra.

Po instalacji w systemie zaistniał nowy użytkownik systemowy, który używany będzie do komunikacji w klastrze - Red Hat zaleca konfigurację jednakowych haseł dla tego użytkownika na wszystkich node'ach, choć z punktu widzenia bezpieczeństwa zalecenie to może budzić pewne wątpliwości... Skonfigurujmy więc hasło:

[root@clusternode1 ~]#  echo naszklaster | passwd --stdin hacluster
Changing password for user hacluster.
passwd: all authentication tokens updated successfully.

Jeśli nasze maszyny nie posiadają wpisów w dns, najwygodniej będzie je dodać do /etc/hosts

Jako, że nody klastra wymagają autoryzacji użytkownika hacluster, wykonujemy takową na jednym z node'ów przyszłego klastra:

[root@clusternode1 ~]# pcs cluster auth clusternode1 clusternode2 clusternode3
Username: hacluster
Password:
clusternode2: Authorized
clusternode3: Authorized
clusternode1: Authorized

Do celów automatyzacyjnych/skryptowych przydatne mogą okazać się przełączniki do pcs -u hacluster -p naszklaster.

Zasadniczo podstawowa konfiguracja jest już wykonana, więc możemy spróbować uruchomić nasz klaster:

[root@clusternode1 ~]# pcs cluster setup --start --name PierwszyKlaster clusternode1 clusternode2 clusternode3
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...
clusternode1: Succeeded
clusternode2: Succeeded
clusternode3: Succeeded
Starting cluster on nodes: clusternode1, clusternode2, clusternode3...
clusternode3: Starting Cluster...
clusternode1: Starting Cluster...
clusternode2: Starting Cluster...
Synchronizing pcsd certificates on nodes clusternode1, clusternode2, clusternode3...
clusternode2: Success
clusternode3: Success
clusternode1: Success

Restaring pcsd on the nodes in order to reload the certificates...
clusternode2: Success
clusternode3: Success
clusternode1: Success

Możemy zweryfikować status naszego klastra:

[root@clusternode1 ~]# pcs cluster status
Cluster Status:
 Last updated: Thu Mar  3 21:24:51 2016         Last change: Thu Mar  3 21:15:09 2016 by hacluster via crmd on clusternode1
 Stack: corosync
 Current DC: clusternode1 (version 1.1.13-10.el7_2.2-44eb2dd) - partition with quorum
 3 nodes and 0 resources configured
 Online: [ clusternode1 clusternode2 clusternode3 ]

PCSD Status:
  clusternode1: Online
  clusternode2: Online
  clusternode3: Online

Musimy pamiętać tu o jednym fakcie. Domyślna konfiguracja powoduje, że w przypadku restartu node'a nie podłącza on się automatycznie do klastra. W takiej sytuacji na działającym node uzyskamy komunikat:

[root@clusternode1 ~]# pcs cluster status
Cluster Status:
 Last updated: Thu Mar  3 21:28:02 2016         Last change: Thu Mar  3 21:15:09 2016 by hacluster via crmd on clusternode1
 Stack: corosync
 Current DC: clusternode1 (version 1.1.13-10.el7_2.2-44eb2dd) - partition with quorum
 3 nodes and 0 resources configured
 Online: [ clusternode1 clusternode2 ]
 OFFLINE: [ clusternode3 ]

PCSD Status:
  clusternode1: Online
  clusternode2: Online
  clusternode3: Online

A na maszynie, która była zrestartowana:

[root@clusternode3 ~]# pcs cluster status
Error: cluster is not currently running on this node

Sytuacja ta jest prosta do naprawienia, wystarczy włączyć automatyczne dołączanie node'a do klastra, poprzez:

[root@clusternode1 ~]# pcs cluster enable --all
clusternode1: Cluster Enabled
clusternode2: Cluster Enabled
clusternode3: Cluster Enabled

Teraz, po restarcie node'a wszystkie znajdować się będą w statusie online.

[TIP] Uruchomienie node'a, który nie dołącza się automatycznie do klastra po restarcie wykonujemy poprzez egzekucję na nim komendy pcs cluster start

Brak komentarzy:

Prześlij komentarz