Kako konfigurirati i održavati visoku dostupnost/klasterizaciju u Linuxu


Visoka dostupnost (HA) jednostavno se odnosi na kvalitet sistema da radi kontinuirano bez kvara tokom dužeg vremenskog perioda. HA rješenja se mogu implementirati pomoću hardvera i/ili softvera, a jedno od uobičajenih rješenja za implementaciju HA je klasterizacija.

U računarstvu, klaster se sastoji od dva ili više računara (obično poznatih kao čvorovi ili članovi) koji rade zajedno kako bi izvršili zadatak. U takvoj postavci, samo jedan čvor pruža uslugu pri čemu sekundarni čvor(i) preuzima(ju) ako ne uspije.

Klasteri se dijele u četiri glavna tipa:

  • Skladištenje: obezbijedite konzistentnu sliku sistema datoteka na svim serverima u klasteru, omogućavajući serverima da istovremeno čitaju i pišu u jedan zajednički sistem datoteka.
  • Visoka dostupnost: eliminišite pojedinačne tačke kvara i prebacivanjem usluga od jednog čvora klastera do drugog u slučaju da čvor prestane da radi.
  • Uravnoteženje opterećenja: otpremite zahtjeve za mrežne usluge na više čvorova klastera kako biste uravnotežili opterećenje zahtjeva među čvorovima klastera.
  • Visoke performanse: vršite paralelnu ili istovremenu obradu, pomažući na taj način da poboljšate performanse aplikacija.

Još jedno široko korišteno rješenje za pružanje HA je replikacija (posebno replikacija podataka). Replikacija je proces kojim se jedna ili više (sekundarnih) baza podataka mogu održavati u sinhronizaciji s jednom primarnom (ili glavnom) bazom podataka.

Za postavljanje klastera potrebna su nam najmanje dva servera. Za potrebe ovog vodiča koristićemo dva Linux servera:

  • Čvor1: 192.168.10.10
  • Čvor 2: 192.168.10.11

U ovom članku ćemo demonstrirati osnove postavljanja, konfiguriranja i održavanja visoke dostupnosti/klastera u Ubuntu 16.04/18.04 i CentOS 7. Pokazat ćemo kako dodati Nginx HTTP uslugu u klaster.

Konfigurisanje lokalnih DNS postavki na svakom serveru

Da bi dva servera međusobno komunicirala, potrebno je da konfigurišemo odgovarajuće lokalne DNS postavke u datoteci /etc/hosts na oba servera.

Otvorite i uredite datoteku koristeći svoj omiljeni uređivač komandne linije.

sudo vim /etc/hosts  

Dodajte sljedeće unose sa stvarnim IP adresama vaših servera.

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

Sačuvajte promjene i zatvorite datoteku.

Instalacija Nginx web servera

Sada instalirajte Nginx web server koristeći sljedeće naredbe.

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

Kada se instalacija završi, za sada pokrenite Nginx servis i omogućite mu da se automatski pokrene pri pokretanju, a zatim provjerite da li je pokrenut i radi pomoću naredbe systemctl.
Na Ubuntu-u, usluga bi trebala biti pokrenuta automatski odmah nakon što se završi pre-konfiguracija paketa, možete je jednostavno omogućiti.

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

Nakon pokretanja Nginx servisa, moramo kreirati prilagođene web stranice za identifikaciju i testiranje operacija na oba servera. Izmijenit ćemo sadržaj zadane stranice Nginx indeksa kao što je prikazano.

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

Instalacija i konfiguracija Corosync i Pacemaker

Zatim moramo instalirati Pacemaker, Corosync i Pcs na svaki čvor na sljedeći način.

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

Kada se instalacija završi, provjerite daemon pcs radi na oba servera.

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

Kreiranje klastera

Tokom instalacije kreira se sistemski korisnik pod nazivom “hacluster ”. Dakle, moramo postaviti autentifikaciju potrebnu za kom. Počnimo kreiranjem nove lozinke za korisnika “hacluster ”, moramo koristiti istu lozinku na svim serverima:

sudo passwd hacluster

Zatim, na jednom od servera (čvor1), pokrenite sljedeću naredbu da postavite autentifikaciju potrebnu za kom.

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

Sada kreirajte klaster i popunite ga nekim čvorovima (ime klastera ne može biti duže od 15 znakova, u ovom primjeru smo koristili examplecluster) na Node1 serveru.

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

Sada omogućite klaster pri pokretanju i pokrenite uslugu.

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

Sada provjerite da li je usluga klastera pokrenuta i radi pomoću sljedeće naredbe.

sudo pcs status
OR
sudo crm_mon -1

Iz izlaza gornje naredbe, možete vidjeti da postoji upozorenje da nema STONITH uređaja, ali je STONITH još uvijek omogućen u klasteru. Osim toga, nisu konfigurirani resursi/usluge klastera.

Konfiguriranje opcija klastera

Prva opcija je da onemogućite STONITH (ili Shoot The Other Node In The Head), implementaciju ograde na Pacemakeru.

Ova komponenta pomaže u zaštiti vaših podataka od oštećenja istovremenim pristupom. Za potrebe ovog vodiča, onemogućit ćemo ga jer nismo konfigurirali nijedan uređaj.

Da isključite STONITH, pokrenite sljedeću naredbu:

sudo pcs property set stonith-enabled=false

Zatim, također zanemarite politiku Quorum tako što ćete pokrenuti sljedeću naredbu:

sudo pcs property set no-quorum-policy=ignore

Nakon postavljanja gornjih opcija, pokrenite sljedeću naredbu da vidite listu svojstava i uvjerite se da su gore navedene opcije, stonith i pravilo kvoruma onemogućene.

sudo pcs property list

Dodavanje usluge resursa/klastera

U ovom odeljku ćemo pogledati kako dodati resurs klastera. Konfigurirat ćemo plutajuću IP adresu koja je IP adresa koja se može trenutno premjestiti s jednog servera na drugi unutar iste mreže ili podatkovnog centra. Ukratko, plutajuća IP adresa je tehnički uobičajen izraz, koji se koristi za IP-ove koji nisu striktno vezani za jedan interfejs.

U ovom slučaju, koristit će se za podršku nadilaženja greške u klasteru visoke dostupnosti. Imajte na umu da plutajuće IP adrese nisu samo za situacije nadilaženja greške, već imaju i nekoliko drugih slučajeva upotrebe. Moramo konfigurirati klaster na takav način da samo aktivni član klastera "posjeduje" ili odgovara na plutajuću IP adresu u bilo kojem trenutku.

Dodaćemo dva resursa klastera: resurs plutajuće IP adrese pod nazivom “floating_ip” i resurs za Nginx web server pod nazivom “http_server”.

Prvo počnite dodavanjem floating_ip na sljedeći način. U ovom primjeru, naša plutajuća IP adresa je 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

gdje:

  • floating_ip: je naziv usluge.
  • “ocf:heartbeat:IPaddr2 ”: govori Pejsmejkeru koju skriptu da koristi, IPaddr2 u ovom slučaju, u kom se imenskom prostoru nalazi (pejsmejker) i kojem standardu odgovara ocf.
  • op monitor interval=60s ”: nalaže pejsmejkeru da provjerava ispravnost ove usluge svake minute pozivanjem agentove akcije monitora.

Zatim dodajte drugi resurs, pod nazivom http_server. Ovdje je agent resursa usluge ocf:heartbeat:nginx.

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

Nakon što ste dodali usluge klastera, izdajte sljedeću naredbu da provjerite status resursa.

sudo pcs status resources

Gledajući izlaz naredbe, dva dodana resursa: “floating_ip ” i “http_server ” su navedena. Usluga floating_ip je isključena jer je primarni čvor u funkciji.

Ako imate omogućen firewall na vašem sistemu, morate dozvoliti sav promet na Nginx i sve usluge visoke dostupnosti kroz firewall za pravilnu komunikaciju između čvorova:

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

Testiranje visoke dostupnosti/klasterizacije

Posljednji i važan korak je testirati funkcionira li naša postavka visoke dostupnosti. Otvorite web pretraživač i idite na adresu 192.168.10.20 i trebali biste vidjeti zadanu Nginx stranicu sa node2.example.com kao što je prikazano na snimku ekrana.

Da simulirate neuspjeh, pokrenite sljedeću naredbu da zaustavite klaster na node2.example.com.

sudo pcs cluster stop http_server

Zatim ponovo učitajte stranicu na 192.168.10.20, sada biste trebali pristupiti zadanoj Nginx web stranici sa node1.example.com.

Alternativno, možete simulirati grešku tako što ćete reći servisu da se zaustavi direktno, bez zaustavljanja klastera na bilo kojem čvoru, koristeći sljedeću naredbu na jednom od čvorova:

 
sudo crm_resource --resource http_server --force-stop 

Zatim morate pokrenuti crm_mon u interaktivnom načinu rada (podrazumevano), unutar intervala monitora od 2 minute, trebali biste moći vidjeti obavještenje klastera da http_server nije uspio i premjestiti se na drugi čvor.

Da bi vaše usluge klastera radile efikasno, možda ćete morati postaviti neka ograničenja. Možete vidjeti pcs man stranicu (man pcs) za listu svih naredbi za korištenje.

Za više informacija o Corosync i Pejsmejkeru, pogledajte: https://clusterlabs.org/

Sažetak

U ovom vodiču pokazali smo osnove kako da implementirate, konfigurišete i održavate visoku dostupnost/klasterizaciju/replikaciju u Ubuntu 16.04/18.04 i CentOS 7. Pokazali smo kako dodati Nginx HTTP uslugu u klaster. Ako imate bilo kakva razmišljanja ili pitanja, koristite obrazac za povratne informacije u nastavku.