Cum să configurați și să mențineți disponibilitatea ridicată/gruparea în cluster în Linux


Disponibilitate ridicată (HA) se referă pur și simplu la calitatea unui sistem de a funcționa continuu fără defecțiuni pentru o perioadă lungă de timp. Soluțiile HA pot fi implementate folosind hardware și/sau software, iar una dintre soluțiile comune pentru implementarea HA este clustering.

În calcul, un cluster este format din două sau mai multe computere (cunoscute în mod obișnuit ca noduri sau membri) care lucrează împreună pentru a îndeplini o sarcină. Într-o astfel de configurare, un singur nod furnizează serviciul, nodul(ele) secundar preluând controlul dacă acesta eșuează.

Clusterele se împart în patru tipuri majore:

  • Stocare: oferă o imagine consecventă a sistemului de fișiere pe serverele dintr-un cluster, permițând serverelor să citească și să scrie simultan într-un singur sistem de fișiere partajat.
  • Disponibilitate ridicată: eliminați punctele de eșec unice și prin transferarea serviciilor de la un nod de cluster la altul în cazul în care un nod devine inoperant.
  • Echilibrarea încărcăturii: trimiteți cererile de servicii de rețea către mai multe noduri de cluster pentru a echilibra sarcina de solicitare între nodurile de cluster.
  • Performanță ridicată: efectuați procesare paralelă sau concomitentă, contribuind astfel la îmbunătățirea performanței aplicațiilor.

O altă soluție utilizată pe scară largă pentru furnizarea de HA este replicarea (în special replicările de date). Replicarea este procesul prin care una sau mai multe baze de date (secundare) pot fi menținute sincronizate cu o singură bază de date primară (sau master).

Pentru a configura un cluster, avem nevoie de cel puțin două servere. În scopul acestui ghid, vom folosi două servere Linux:

  • Nodul 1: 192.168.10.10
  • Nodul 2: 192.168.10.11

În acest articol, vom demonstra elementele de bază ale modului de implementare, configurare și menținere a disponibilității ridicate/clustering în Ubuntu 16.04/18.04 și CentOS 7. Vom demonstra cum să adăugați serviciul HTTP Nginx la cluster.

Configurarea setărilor DNS locale pe fiecare server

Pentru ca cele două servere să comunice între ele, trebuie să configuram setările DNS locale corespunzătoare în fișierul /etc/hosts de pe ambele servere.

Deschideți și editați fișierul folosind editorul preferat de linie de comandă.

sudo vim /etc/hosts  

Adăugați următoarele intrări cu adrese IP reale ale serverelor dvs.

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

Salvați modificările și închideți fișierul.

Instalarea serverului web Nginx

Acum instalați serverul web Nginx utilizând următoarele comenzi.

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

Odată ce instalarea este finalizată, porniți serviciul Nginx deocamdată și activați-l să pornească automat la momentul pornirii, apoi verificați dacă este activ și rulează folosind comanda systemctl.
Pe Ubuntu, serviciul ar trebui să fie pornit automat imediat după finalizarea preconfigurarii pachetului, pur și simplu îl puteți activa.

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

După pornirea serviciului Nginx, trebuie să creăm pagini web personalizate pentru identificarea și testarea operațiunilor pe ambele servere. Vom modifica conținutul paginii implicite de index Nginx, așa cum se arată.

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

Instalarea și configurarea Corosync și Pacemaker

Apoi, trebuie să instalăm Pacemaker, Corosync și Pcs pe fiecare nod, după cum urmează.

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

După finalizarea instalării, asigurați-vă că demonul pcs rulează pe ambele servere.

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

Crearea Clusterului

În timpul instalării, este creat un utilizator de sistem numit „hacluster ”. Așa că trebuie să setăm autentificarea necesară pentru bucăți. Să începem prin a crea o nouă parolă pentru utilizatorul „hacluster”, trebuie să folosim aceeași parolă pe toate serverele:

sudo passwd hacluster

Apoi, pe unul dintre servere (Node1), rulați următoarea comandă pentru a configura autentificarea necesară pentru bucăți.

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

Acum creați un cluster și populați-l cu câteva noduri (numele clusterului nu poate depăși 15 caractere, în acest exemplu, am folosit examplecluster) pe serverul Node1.

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

Acum activați clusterul la pornire și porniți serviciul.

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

Acum verificați dacă serviciul cluster este activ și rulează folosind următoarea comandă.

sudo pcs status
OR
sudo crm_mon -1

Din rezultatul comenzii de mai sus, puteți vedea că există un avertisment despre niciun dispozitiv STONITH, dar STONITH este încă activat în cluster. În plus, nu au fost configurate resurse/servicii cluster.

Configurarea opțiunilor de cluster

Prima opțiune este să dezactivați STONITH (sau Shoot The Other Node In The Head), implementarea de gard pe Pacemaker.

Această componentă vă ajută să vă protejați datele de a fi corupte de accesul simultan. În scopul acestui ghid, îl vom dezactiva, deoarece nu am configurat niciun dispozitiv.

Pentru a dezactiva STONITH, rulați următoarea comandă:

sudo pcs property set stonith-enabled=false

Apoi, ignorați și politica Quorum rulând următoarea comandă:

sudo pcs property set no-quorum-policy=ignore

După ce setați opțiunile de mai sus, executați următoarea comandă pentru a vedea lista de proprietăți și asigurați-vă că opțiunile de mai sus, stonith și politica de cvorum sunt dezactivate.

sudo pcs property list

Adăugarea unui serviciu de resurse/cluster

În această secțiune, vom analiza cum să adăugați o resursă cluster. Vom configura un IP flotant care este adresa IP care poate fi mutată instantaneu de la un server la altul în cadrul aceleiași rețele sau centru de date. Pe scurt, un IP flotant este un termen tehnic comun, folosit pentru IP-uri care nu sunt legate strict de o singură interfață.

În acest caz, va fi utilizat pentru a susține failover-ul într-un cluster de înaltă disponibilitate. Rețineți că IP-urile flotante nu sunt doar pentru situații de failover, ele au alte câteva cazuri de utilizare. Trebuie să configuram clusterul în așa fel încât numai membrul activ al clusterului „deține” sau să răspundă la IP-ul plutitor la un moment dat.

Vom adăuga două resurse de cluster: resursa de adresă IP plutitoare numită „floating_ip ” și o resursă pentru serverul web Nginx numită „http_server”.

Mai întâi începeți prin adăugarea floating_ip după cum urmează. În acest exemplu, adresa noastră IP flotantă este 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

Unde :

  • floating_ip: este numele serviciului.
  • „ocf:heartbeat:IPaddr2 ”: îi spune Pacemaker-ului ce script să folosească, IPaddr2 în acest caz, în ce spațiu de nume se află (pacemaker) și cu ce standard se conformează ocf.
  • op monitor interval=60s ”: indică Pacemaker să verifice starea de sănătate a acestui serviciu la fiecare minut, apelând acțiunea de monitorizare a agentului.

Apoi adăugați a doua resursă, numită http_server. Aici, agentul de resurse al serviciului este ocf:heartbeat:nginx.

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

După ce ați adăugat serviciile cluster, lansați următoarea comandă pentru a verifica starea resurselor.

sudo pcs status resources

Privind rezultatul comenzii, au fost enumerate cele două resurse adăugate: „floating_ip ” și „http_server ”. Serviciul floating_ip este dezactivat deoarece nodul primar este în funcțiune.

Dacă aveți firewall activat pe sistemul dvs., trebuie să permiteți tot traficul către Nginx și toate serviciile de înaltă disponibilitate prin firewall pentru o comunicare adecvată între noduri:

-------------- 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 

Testarea înaltă disponibilitate/grupare

Pasul final și important este să testăm dacă setarea noastră de înaltă disponibilitate funcționează. Deschideți un browser web și navigați la adresa 192.168.10.20, ar trebui să vedeți pagina Nginx implicită din node2.example.com, așa cum se arată în captură de ecran.

Pentru a simula o eroare, executați următoarea comandă pentru a opri clusterul de pe node2.example.com.

sudo pcs cluster stop http_server

Apoi reîncărcați pagina la 192.168.10.20, acum ar trebui să accesați pagina web Nginx implicită din node1.example.com.

Alternativ, puteți simula o eroare spunând serviciului să se oprească direct, fără a opri clusterul pe niciun nod, folosind următoarea comandă pe unul dintre noduri:

 
sudo crm_resource --resource http_server --force-stop 

Apoi, trebuie să rulați crm_mon în modul interactiv (implicit), în intervalul de monitorizare de 2 minute, ar trebui să puteți vedea anunțul de cluster că http_server a eșuat și mutați acesta la alt nod.

Pentru ca serviciile dvs. de cluster să ruleze eficient, poate fi necesar să setați anumite constrângeri. Puteți vedea pagina de manual pcs (man pcs) pentru o listă a tuturor comenzilor de utilizare.

Pentru mai multe informații despre Corosync și Pacemaker, consultați: https://clusterlabs.org/

rezumat

În acest ghid, am arătat elementele de bază ale modului de implementare, configurare și menținere a disponibilității ridicate/clustering/replicare în Ubuntu 16.04/18.04 și CentOS 7. Am demonstrat cum să adăugați serviciul HTTP Nginx la un cluster. Dacă aveți gânduri de împărtășit sau întrebări, utilizați formularul de feedback de mai jos.