Kako konfigurirati in vzdrževati visoko razpoložljivost/združevanje v gruče v sistemu Linux


Visoka razpoložljivost (HA) se preprosto nanaša na kakovost sistema, ki neprekinjeno deluje brez okvar dlje časa. Rešitve HA se lahko izvajajo s strojno in/ali programsko opremo, ena od pogostih rešitev za implementacijo HA pa je združevanje v gruče.

V računalništvu je grozd sestavljen iz dveh ali več računalnikov (splošno znanih kot vozlišča ali člani), ki skupaj opravljajo nalogo. V takšni nastavitvi samo eno vozlišče zagotavlja storitev, pri kateri sekundarna vozlišča prevzamejo, če ne uspe.

Grozdi so razdeljeni v štiri glavne vrste:

  • Shramba: zagotovite dosledno sliko datotečnega sistema na vseh strežnikih v gruči, kar strežnikom omogoča hkratno branje in pisanje v en sam datotečni sistem v skupni rabi.
  • Visoka razpoložljivost: odpravite posamezne točke okvare in neuspeh pri storitvah iz enega vozlišča gruče v drugo, če vozlišče preneha delovati.
  • Uravnavanje nalaganja: pošiljanje zahtev omrežnih storitev na več vozlišč gruče za uravnoteženje obremenitve zahtev med vozlišči gruče.
  • Visoka zmogljivost: izvajajte vzporedno ali sočasno obdelavo in tako pomagajte izboljšati zmogljivost aplikacij.

Druga široko uporabljena rešitev za zagotavljanje HA je podvajanje (zlasti podvajanje podatkov). Podvajanje je postopek, s katerim je mogoče eno ali več (sekundarnih) baz podatkov hraniti v sinhronizaciji z eno samo primarno (ali glavno) bazo podatkov.

Za nastavitev gruče potrebujemo vsaj dva strežnika. V tem priročniku bomo uporabili dva strežnika Linux:

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

V tem članku bomo pokazali osnove, kako razmestiti, konfigurirati in vzdrževati visoko razpoložljivost/združevanje v gruče v Ubuntu 16.04/18.04 in CentOS 7. Pokazali bomo, kako v gručo dodati storitev Nginx HTTP.

Konfiguriranje lokalnih nastavitev DNS na vsakem strežniku

Če želite strežnika medsebojno komunicirati, moramo v datoteki /etc /hosts na obeh strežnikih konfigurirati ustrezne lokalne nastavitve DNS.

Odprite in uredite datoteko s svojim priljubljenim urejevalnikom ukazne vrstice.

$ sudo vim /etc/hosts  

Dodajte naslednje vnose z dejanskimi naslovi IP vaših strežnikov.

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

Shranite spremembe in zaprite datoteko.

Namestitev spletnega strežnika Nginx

Zdaj namestite spletni strežnik Nginx z naslednjimi ukazi.

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

Ko je namestitev končana, zaenkrat zaženite storitev Nginx in ji omogočite samodejni zagon ob zagonu, nato pa z ukazom systemctl preverite, ali deluje in deluje.
V Ubuntuju je treba storitev samodejno zagnati takoj po končani predkonfiguraciji paketa, preprosto jo lahko omogočite.

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

Po zagonu storitve Nginx moramo ustvariti spletne strani po meri za identifikacijo in preizkušanje operacij na obeh strežnikih. Vsebino privzete indeksne strani Nginx bomo spremenili, kot 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

Namestitev in konfiguriranje programa Corosync in Pacemaker

Nato moramo na vsako vozlišče namestiti Pacemaker, Corosync in Pcs, kot sledi.

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

Ko je namestitev končana, se prepričajte, da se demon pcs izvaja na obeh strežnikih.

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

Med namestitvijo se ustvari sistemski uporabnik, imenovan\"hacluster". Zato moramo nastaviti preverjanje pristnosti za računalnike. Začnimo z ustvarjanjem novega gesla za uporabnika\"hacluster", isto geslo moramo uporabiti na vsi strežniki:

$ sudo passwd hacluster

Nato na enem od strežnikov (Node1) zaženite naslednji ukaz, da nastavite preverjanje pristnosti za računalnike.

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

Zdaj ustvarite gručo in jo napolnite z nekaterimi vozlišči (ime gruče ne sme presegati 15 znakov, v tem primeru smo uporabili examplecluster) na strežniku Node1.

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

Zdaj omogočite gručo ob zagonu in zaženite storitev.

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

Sedaj preverite, ali je storitev gruče vzpostavljena in deluje z naslednjim ukazom.

$ sudo pcs status
OR
$ sudo crm_mon -1

Iz rezultatov zgornjega ukaza lahko vidite, da obstaja opozorilo, da ni naprav STONITH, vendar je STONITH še vedno omogočen v gruči. Poleg tega niso bili konfigurirani viri/storitve grozdov.

Prva možnost je onemogočiti STONITH (ali ustreli drugo vozlišče v glavi), izvedbo ograje na Srčnem spodbujevalniku.

Ta komponenta ščiti vaše podatke pred poškodbami zaradi hkratnega dostopa. V tem priročniku ga bomo onemogočili, ker nismo konfigurirali nobene naprave.

Če želite izklopiti STONITH, zaženite naslednji ukaz:

$ sudo pcs property set stonith-enabled=false

Nato prezrite pravilnik Quorum tako, da zaženete naslednji ukaz:

$ sudo pcs property set no-quorum-policy=ignore

Ko nastavite zgornje možnosti, zaženite naslednji ukaz, da si ogledate seznam lastnosti in zagotovite, da so zgornje možnosti, stonith in pravil sklepčnosti onemogočeni.

$ sudo pcs property list

V tem razdelku bomo pogledali, kako dodati vir gruče. Konfigurirali bomo plavajoči IP, ki je naslov IP, ki ga je mogoče takoj premakniti z enega strežnika na drugega v istem omrežju ali podatkovnem centru. Skratka, plavajoči IP je tehnični skupni izraz, ki se uporablja za IP -je, ki niso vezani le na en sam vmesnik.

V tem primeru se bo uporabljal za podporo pri samodejnem preklopu v gruči z visoko razpoložljivostjo. Ne pozabite, da plavajoči IP -ji niso samo za primere napak, ampak imajo še nekaj drugih primerov uporabe. Gručo moramo konfigurirati tako, da je samo aktivni član gruče "lastnik" ali se odzove na plavajoči IP v določenem trenutku.

Dodali bomo dva vira gruče: vir plavajočega naslova IP, imenovan\"floating_ip", in vir za spletni strežnik Nginx, imenovan\"http_server".

Najprej začnite z dodajanjem floating_ip na naslednji način. V tem primeru je naš plavajoči naslov IP 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

kje:

  • floating_ip: je ime storitve.
  • \"ocf: heartbeat: IPaddr2": pove Pacemakerju, kateri skript naj uporabi, v tem primeru IPaddr2, v katerem imenskem prostoru je (srčni spodbujevalnik) in kateremu standardu ustreza ocf.
  • »interval spremljanja operacijskega sistema = 60 s«: naroči srčnemu spodbujevalniku, da vsako minuto preveri stanje te storitve tako, da pokliče dejanje monitorjevega agenta.

Nato dodajte drugi vir, imenovan http_server. Zastopnik vira storitve je ocf: heartbeat: nginx.

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

Ko dodate storitve gruče, izdajte naslednji ukaz, da preverite stanje virov.

$ sudo pcs status resources

Če pogledamo rezultat ukaza, sta navedena dva dodana vira:\"floating_ip" in\"http_server". Storitev floating_ip je izklopljena, ker deluje primarno vozlišče.

Če imate v sistemu omogočen požarni zid, morate za pošteno komunikacijo med vozlišči dovoliti ves promet v Nginx in vse storitve z visoko razpoložljivostjo prek požarnega zidu:

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

Zadnji in pomemben korak je preveriti, ali naša nastavitev visoke razpoložljivosti deluje. Odprite spletni brskalnik in se pomaknite do naslova 192.168.10.20, na node2.example.com bi morali videti privzeto stran Nginx, kot je prikazano na posnetku zaslona.

Če želite simulirati napako, zaženite naslednji ukaz, da ustavite gručo na node2.example.com.

$ sudo pcs cluster stop http_server

Nato znova naložite stran na 192.168.10.20, zdaj bi morali dostopati do privzete spletne strani Nginx z node1.example.com.

Druga možnost je, da simulirate napako tako, da storitvi poveste, naj se ustavi neposredno, ne da bi ustavila gručo na katerem koli vozlišču, z naslednjim ukazom na enem od vozlišč:

 
$ sudo crm_resource --resource http_server --force-stop 

Nato morate zagnati crm_mon v interaktivnem načinu (privzeto), v intervalu monitorja, ki traja 2 minuti, bi morali videti obvestilo gruče, da strežnik http_server ni uspel, in ga premakniti v drugo vozlišče.

Če želite, da bodo vaše storitve gruče učinkovite, boste morali nastaviti nekaj omejitev. Na seznamu vseh ukazov za uporabo si lahko ogledate man stran pcs (man pcs).

Za več informacij o Corosync -u in srčnem spodbujevalniku si oglejte: https://clusterlabs.org/

V tem priročniku smo pokazali osnove, kako razmestiti, konfigurirati in vzdrževati visoko razpoložljivost/združevanje v skupine/podvajanje v Ubuntu 16.04/18.04 in CentOS 7. Pokazali smo, kako v gručo dodati storitev Nginx HTTP. Če imate kakršne koli misli ali vprašanja, uporabite spodnji obrazec za povratne informacije.