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


Visoka dostupnost (HA) jednostavno se odnosi na kvalitetu sustava da kontinuirano radi bez kvarova tijekom dugog vremenskog razdoblja. HA rješenja mogu se implementirati pomoću hardvera i/ili softvera, a jedno od uobičajenih rješenja za implementaciju HA je klasteriranje.

U računalstvu, klaster se sastoji od dva ili više računala (obično poznatih kao čvorovi ili članovi) koji rade zajedno kako bi izvršili zadatak. U takvoj postavci samo jedan čvor pruža uslugu, a sekundarni čvor(ovi) preuzimaju ako zakaže.

Klasteri se mogu podijeliti u četiri glavne vrste:

  • Pohrana: osigurajte dosljednu sliku datotečnog sustava na svim poslužiteljima u klasteru, omogućujući poslužiteljima da istovremeno čitaju i pišu u jedan zajednički datotečni sustav.
  • Visoka dostupnost: eliminirajte pojedinačne točke kvara i neuspjehom preko usluga s jednog čvora klastera na drugi u slučaju da čvor prestane raditi.
  • Ravnoteža opterećenja: otpremite zahtjeve za mrežnim uslugama na više čvorova klastera kako biste uravnotežili opterećenje zahtjeva između čvorova klastera.
  • Visoka izvedba: provodite paralelnu ili istovremenu obradu, čime pomažete u poboljšanju izvedbe aplikacija.

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

Za postavljanje klastera potrebna su nam najmanje dva poslužitelja. Za potrebe ovog vodiča koristit ćemo dva Linux poslužitelja:

  • Čvor 1: 192.168.10.10
  • Čvor 2: 192.168.10.11

U ovom članku ćemo pokazati osnove kako implementirati, konfigurirati i održavati visoku dostupnost/klasteriranje u Ubuntu 16.04/18.04 i CentOS 7. Pokazat ćemo kako dodati Nginx HTTP uslugu u klaster.

Konfiguriranje lokalnih DNS postavki na svakom poslužitelju

Kako bi dva poslužitelja međusobno komunicirala, moramo konfigurirati odgovarajuće lokalne DNS postavke u datoteci /etc/hosts na oba poslužitelja.

Otvorite i uredite datoteku koristeći svoj omiljeni uređivač naredbenog retka.

sudo vim /etc/hosts  

Dodajte sljedeće unose sa stvarnim IP adresama vaših poslužitelja.

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

Spremite promjene i zatvorite datoteku.

Instaliranje Nginx web poslužitelja

Sada instalirajte Nginx web poslužitelj pomoću sljedećih naredbi.

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

Nakon dovršetka instalacije, pokrenite uslugu Nginx za sada i omogućite joj automatsko pokretanje prilikom podizanja sustava, zatim provjerite je li pokrenuta i radi pomoću naredbe systemctl.
U Ubuntuu bi se usluga trebala pokrenuti automatski odmah nakon dovršetka predkonfiguracije paketa, možete je jednostavno omogućiti.

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

Nakon pokretanja usluge Nginx, moramo izraditi prilagođene web stranice za identifikaciju i testiranje operacija na oba poslužitelja. Mi ćemo izmijeniti sadržaj zadane Nginx indeksne stranice 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

Instaliranje i konfiguriranje Corosync i Pacemakera

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 instalacija završi, provjerite radi li demon pcs na oba poslužitelja.

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

Stvaranje klastera

Tijekom instalacije stvara se korisnik sustava pod nazivom “hacluster”. Dakle, moramo postaviti autentifikaciju potrebnu za računala. Započnimo kreiranjem nove lozinke za korisnika “hacluster”, moramo koristiti istu lozinku na svim poslužiteljima:

sudo passwd hacluster

Zatim, na jednom od poslužitelja (Čvor 1), pokrenite sljedeću naredbu za postavljanje provjere autentičnosti potrebne za kompane.

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

Sada stvorite klaster i napunite ga nekim čvorovima (ime klastera ne smije premašiti 15 znakova, u ovom smo primjeru upotrijebili examplecluster) na poslužitelju Node1.

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

Sada omogućite klaster pri dizanju i pokrenite uslugu.

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

Sada provjerite je li 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 onemogućiti STONITH (ili Shoot The Other Node In The Head), implementaciju ograde na Pacemaker-u.

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

Da biste isključili STONITH, pokrenite sljedeću naredbu:

sudo pcs property set stonith-enabled=false

Zatim također zanemarite pravilo Kvorum pokretanjem sljedeće naredbe:

sudo pcs property set no-quorum-policy=ignore

Nakon postavljanja gornjih opcija, pokrenite sljedeću naredbu da biste vidjeli popis svojstava i osigurali da su gornje opcije, stonith i pravilo kvoruma onemogućeni.

sudo pcs property list

Dodavanje usluge resursa/klastera

U ovom odjeljku ćemo pogledati kako dodati resurs klastera. Konfigurirat ćemo plutajući IP koji je IP adresa koja se može odmah premjestiti s jednog poslužitelja na drugi unutar iste mreže ili podatkovnog centra. Ukratko, plutajući IP je tehnički zajednički izraz, koji se koristi za IP-ove koji nisu striktno vezani za jedno jedino sučelje.

U ovom slučaju, koristit će se za podršku failoveru u klasteru visoke dostupnosti. Imajte na umu da pomični IP-ovi nisu samo za situacije prelaska u grešku, 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ći IP u bilo kojem trenutku.

Dodat ćemo dva resursa klastera: resurs plutajuće IP adrese pod nazivom “floating_ip” i resurs za Nginx web poslužitelj pod nazivom “http_server”.

Prvo započ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: naziv je usluge.
  • “ocf:heartbeat:IPaddr2 ”: govori Pacemakeru koju skriptu treba koristiti, IPaddr2 u ovom slučaju, u kojem se prostoru imena nalazi (pacemaker) i kojem je standardu u skladu s ocf.
  • op monitor interval=60s ”: naređuje Pacemakeru da provjerava ispravnost ove usluge svake minute pozivanjem agentove radnje nadzora.

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, navedena su dva dodana resursa: “floating_ip ” i “http_server ”. Usluga floating_ip je isključena jer primarni čvor radi.

Ako imate vatrozid omogućen na vašem sustavu, trebate dopustiti sav promet prema Nginxu i svim uslugama visoke dostupnosti kroz vatrozid 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/klasteriranja

Posljednji i važan korak jest testirati funkcionira li naša postavka visoke dostupnosti. Otvorite web preglednik i idite na adresu 192.168.10.20 i trebali biste vidjeti zadanu Nginx stranicu s node2.example.com kao što je prikazano na snimci zaslona.

Da biste simulirali kvar, pokrenite sljedeću naredbu da zaustavite klaster na node2.example.com.

sudo pcs cluster stop http_server

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

Alternativno, možete simulirati pogrešku govoreći usluzi da se izravno zaustavi, 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 trebate pokrenuti crm_mon u interaktivnom načinu rada (zadano), unutar intervala nadzora od 2 minute, trebali biste moći vidjeti obavijest klastera da http_server nije uspio i premjestiti na drugi čvor.

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

Za više informacija o Corosync i Pacemaker, provjerite: https://clusterlabs.org/

Sažetak

U ovom smo vodiču pokazali osnove kako implementirati, konfigurirati i održavati visoku dostupnost/klasteriranje/replikaciju u Ubuntu 16.04/18.04 i CentOS 7. Pokazali smo kako dodati Nginx HTTP uslugu u klaster. Ako želite podijeliti bilo kakva pitanja ili pitanja, upotrijebite obrazac za povratne informacije u nastavku.