Wyszukiwanie w witrynie

Jak skonfigurować i utrzymać wysoką dostępność/klastrowanie w systemie Linux


Wysoka dostępność (HA) odnosi się po prostu do jakości systemu umożliwiającej ciągłą i bezawaryjną pracę przez długi okres czasu. Rozwiązania HA można wdrażać przy użyciu sprzętu i/lub oprogramowania, a jednym z typowych rozwiązań wdrażania HA jest klastrowanie.

W informatyce klaster składa się z dwóch lub większej liczby komputerów (powszechnie nazywanych węzłami lub elementami), które współpracują ze sobą w celu wykonania zadania. W takiej konfiguracji tylko jeden węzeł świadczy usługę, a węzeł(y) drugorzędny przejmuje tę usługę w przypadku jej awarii.

Klastry dzielą się na cztery główne typy:

  • Pamięć: zapewnia spójny obraz systemu plików na serwerach w klastrze, umożliwiając serwerom równoczesny odczyt i zapis w jednym udostępnionym systemie plików.
  • Wysoka dostępność: eliminuj pojedyncze punkty awarii i przełączaj usługi z jednego węzła klastra na inny w przypadku, gdy węzeł przestanie działać.
  • Równoważenie obciążenia: wysyłaj żądania usług sieciowych do wielu węzłów klastra, aby zrównoważyć obciążenie żądaniami pomiędzy węzłami klastra.
  • Wysoka wydajność: przeprowadzaj przetwarzanie równoległe lub współbieżne, pomagając w ten sposób poprawić wydajność aplikacji.

Innym szeroko stosowanym rozwiązaniem zapewniającym HA jest replikacja (w szczególności replikacja danych). Replikacja to proces, dzięki któremu jedna lub więcej (wtórnych) baz danych może być zsynchronizowana z pojedynczą podstawową (lub główną) bazą danych.

Do skonfigurowania klastra potrzebujemy co najmniej dwóch serwerów. Na potrzeby tego przewodnika będziemy używać dwóch serwerów Linux:

  • Węzeł 1: 192.168.10.10
  • Węzeł 2: 192.168.10.11

W tym artykule pokażemy podstawy wdrażania, konfigurowania i utrzymywania wysokiej dostępności/klastrowania w Ubuntu 16.04/18.04 i CentOS 7. Pokażemy, jak dodać usługę HTTP Nginx do klastra.

Konfigurowanie ustawień lokalnego DNS na każdym serwerze

Aby oba serwery mogły się ze sobą komunikować, musimy skonfigurować odpowiednie ustawienia lokalnego DNS w pliku /etc/hosts na obu serwerach.

Otwórz i edytuj plik za pomocą ulubionego edytora wiersza poleceń.

sudo vim /etc/hosts  

Dodaj następujące wpisy z rzeczywistymi adresami IP swoich serwerów.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Zapisz zmiany i zamknij plik.

Instalowanie serwera WWW Nginx

Teraz zainstaluj serwer WWW Nginx, używając następujących poleceń.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Po zakończeniu instalacji uruchom na razie usługę Nginx i włącz jej automatyczne uruchamianie podczas uruchamiania, a następnie sprawdź, czy jest uruchomiona i działa, używając polecenia systemctl.
W systemie Ubuntu usługa powinna zostać uruchomiona automatycznie natychmiast po zakończeniu wstępnej konfiguracji pakietu, wystarczy ją włączyć.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Po uruchomieniu usługi Nginx musimy stworzyć niestandardowe strony internetowe umożliwiające identyfikację i testowanie operacji na obu serwerach. Zmodyfikujemy zawartość domyślnej strony indeksu Nginx, jak pokazano.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Instalowanie i konfigurowanie Corosync i Pacemaker

Następnie musimy zainstalować Pacemaker, Corosync i PCS na każdym węźle w następujący sposób.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Po zakończeniu instalacji upewnij się, że na obu serwerach działa demon pcs.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Tworzenie Klastra

Podczas instalacji tworzony jest użytkownik systemu o nazwie „hacluster”. Musimy więc skonfigurować uwierzytelnianie potrzebne dla szt.. Zacznijmy od utworzenia nowego hasła dla użytkownika „hacluster”, musimy używać tego samego hasła na wszystkich serwerach:

sudo passwd hacluster

Następnie na jednym z serwerów (Węzeł 1) uruchom poniższe polecenie, aby skonfigurować uwierzytelnianie potrzebne dla szt..

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Teraz utwórz klaster i zapełnij go kilkoma węzłami (nazwa klastra nie może przekraczać 15 znaków, w tym przykładzie użyliśmy examplecluster) na serwerze Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Teraz włącz klaster podczas rozruchu i uruchom usługę.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Teraz sprawdź, czy usługa klastrowania działa i działa, używając następującego polecenia.

sudo pcs status
OR
sudo crm_mon -1

Z wyniku powyższego polecenia widać, że pojawiło się ostrzeżenie o braku urządzeń STONITH, mimo że STONITH jest nadal włączony w klastrze. Ponadto nie skonfigurowano żadnych zasobów/usług klastra.

Konfigurowanie opcji klastra

Pierwszą opcją jest wyłączenie STONITH (lub strzelenie innemu węzłowi w głowę), implementacji ogrodzenia w Pacemaker.

Ten komponent pomaga chronić dane przed uszkodzeniem w wyniku równoczesnego dostępu. Na potrzeby tego przewodnika wyłączymy go, ponieważ nie skonfigurowaliśmy żadnych urządzeń.

Aby wyłączyć STONITH, uruchom następujące polecenie:

sudo pcs property set stonith-enabled=false

Następnie zignoruj także zasadę Kworum, uruchamiając następujące polecenie:

sudo pcs property set no-quorum-policy=ignore

Po ustawieniu powyższych opcji uruchom następujące polecenie, aby wyświetlić listę właściwości i upewnić się, że powyższe opcje, stonith i zasady kworum są wyłączone.

sudo pcs property list

Dodawanie zasobów/usługi klastrowej

W tej sekcji przyjrzymy się, jak dodać zasób klastra. Skonfigurujemy pływający adres IP, czyli adres IP, który można natychmiast przenieść z jednego serwera na drugi w tej samej sieci lub centrum danych. W skrócie, pływający adres IP to powszechny termin techniczny używany do określenia adresów IP, które nie są ściśle powiązane z jednym interfejsem.

W tym przypadku zostanie wykorzystany do obsługi przełączania awaryjnego w klastrze o wysokiej dostępności. Należy pamiętać, że pływające adresy IP nie służą tylko do przełączania awaryjnego, mają kilka innych zastosowań. Musimy skonfigurować klaster w taki sposób, aby w danym momencie tylko aktywny członek klastra „posiadał” pływający adres IP lub na niego odpowiadał.

Dodamy dwa zasoby klastra: zasób pływającego adresu IP o nazwie „floating_ip” i zasób dla serwera WWW Nginx o nazwie „http_server”.

Najpierw zacznij od dodania float_ip w następujący sposób. W tym przykładzie nasz zmienny adres IP to 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

Gdzie :

  • floating_ip: to nazwa usługi.
  • „ocf:heartbeat:IPaddr2 ”: informuje Pacemakera, jakiego skryptu ma użyć, w tym przypadku IPaddr2, w jakiej przestrzeni nazw się znajduje (pacemaker) i z jakim standardem jest zgodny ocf.
  • op monitorinterval=60s”: instruuje Pacemakera, aby co minutę sprawdzał stan tej usługi, wywołując akcję monitorującą agenta.

Następnie dodaj drugi zasób o nazwie http_server. W tym przypadku agentem zasobów usługi jest ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Po dodaniu usług klastrowych wydaj następujące polecenie, aby sprawdzić stan zasobów.

sudo pcs status resources

Patrząc na wynik polecenia, na liście znajdują się dwa dodane zasoby: „floating_ip ” i „http_server ”. Usługa float_ip jest wyłączona, ponieważ węzeł podstawowy działa.

Jeśli masz włączoną zaporę sieciową w swoim systemie, musisz zezwolić na cały ruch do Nginx i wszystkich usług wysokiej dostępności przez zaporę, aby zapewnić prawidłową komunikację między węzłami:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Testowanie wysokiej dostępności/klastrowania

Ostatnim i ważnym krokiem jest sprawdzenie, czy nasza konfiguracja wysokiej dostępności działa. Otwórz przeglądarkę internetową i przejdź pod adres 192.168.10.20. Powinieneś zobaczyć domyślną stronę Nginx z node2.example.com, jak pokazano na zrzucie ekranu.

Aby zasymulować awarię, uruchom następujące polecenie, aby zatrzymać klaster w node2.example.com.

sudo pcs cluster stop http_server

Następnie załaduj ponownie stronę pod adresem 192.168.10.20. Powinieneś teraz uzyskać dostęp do domyślnej strony internetowej Nginx z node1.example.com.

Alternatywnie możesz zasymulować błąd, nakazując usłudze bezpośrednie zatrzymanie, bez zatrzymywania klastra w żadnym węźle, za pomocą następującego polecenia na jednym z węzłów:

 
sudo crm_resource --resource http_server --force-stop 

Następnie musisz uruchomić crm_mon w trybie interaktywnym (domyślnym). W odstępie monitorowania wynoszącym 2 minuty powinieneś zobaczyć klaster informujący o awarii http_server i przenieść go do innego węzła.

Aby usługi klastrowe działały wydajnie, może być konieczne ustawienie pewnych ograniczeń. Możesz zobaczyć stronę podręcznika pcs (man pcs), gdzie znajdziesz listę wszystkich poleceń użycia.

Więcej informacji na temat Corosync i Pacemaker można znaleźć na stronie: https://clusterlabs.org/

Streszczenie

W tym przewodniku pokazaliśmy podstawy wdrażania, konfigurowania i utrzymywania wysokiej dostępności/klastrowania/replikacji w Ubuntu 16.04/18.04 i CentOS 7. Pokazaliśmy, jak dodać usługę HTTP Nginx do klastra. Jeśli masz jakieś przemyślenia lub pytania, którymi chcesz się podzielić, skorzystaj z poniższego formularza opinii.