Kaip sukonfigūruoti ir išlaikyti aukštą prieinamumą/grupavimą sistemoje „Linux“.


Aukštas prieinamumas (HA) paprasčiausiai reiškia sistemos kokybę, kad ji veiktų nuolat be gedimų ilgą laiką. HA sprendimai gali būti diegiami naudojant techninę ir (arba) programinę įrangą, o vienas iš įprastų HA diegimo sprendimų yra klasterizavimas.

Skaičiuojant klasterį sudaro du ar daugiau kompiuterių (paprastai žinomų kaip mazgai arba nariai), kurie kartu atlieka užduotį. Esant tokiai sąrankai, paslaugą teikia tik vienas mazgas, o antrinis (-iai) mazgas (-iai) perima, jei jis sugenda.

Klasteriai skirstomi į keturis pagrindinius tipus:

  • Saugykla: pateikite nuoseklų failų sistemos vaizdą visuose klasteryje esančiuose serveriuose, kad serveriai galėtų vienu metu skaityti ir rašyti į vieną bendrinamą failų sistemą.
  • Aukštas prieinamumas: pašalinkite atskirus gedimo taškus ir perkelkite paslaugas iš vieno klasterio mazgo į kitą, jei mazgas pradėtų veikti.
  • Apkrovos balansavimas: siųskite tinklo paslaugų užklausas į kelis klasterio mazgus, kad subalansuotų užklausų apkrovą tarp klasterio mazgų.
  • Didelis našumas: apdorokite lygiagrečiai arba vienu metu, taip pagerindami programų našumą.

Kitas plačiai naudojamas sprendimas teikiant HA yra replikacija (ypač duomenų replikacijos). Replikacija yra procesas, kurio metu viena ar daugiau (antrinių) duomenų bazių gali būti sinchronizuojamos su viena pirmine (arba pagrindine) duomenų baze.

Norint nustatyti klasterį, mums reikia mažiausiai dviejų serverių. Šiame vadove naudosime du „Linux“ serverius:

  • 1 mazgas: 192.168.10.10
  • 2 mazgas: 192.168.10.11

Šiame straipsnyje parodysime pagrindus, kaip diegti, konfigūruoti ir palaikyti aukštą pasiekiamumą/grupavimą Ubuntu 16.04/18.04 ir CentOS 7. Parodysime, kaip prie klasterio pridėti Nginx HTTP paslaugą.

Vietinių DNS nustatymų konfigūravimas kiekviename serveryje

Kad du serveriai susisiektų vienas su kitu, turime sukonfigūruoti atitinkamus vietinius DNS nustatymus faile /etc/hosts abiejuose serveriuose.

Atidarykite ir redaguokite failą naudodami mėgstamą komandų eilutės rengyklę.

sudo vim /etc/hosts  

Pridėkite šiuos įrašus su faktiniais savo serverių IP adresais.

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

Išsaugokite pakeitimus ir uždarykite failą.

Nginx žiniatinklio serverio diegimas

Dabar įdiekite „Nginx“ žiniatinklio serverį naudodami šias komandas.

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

Baigę diegti, paleiskite „Nginx“ paslaugą ir įgalinkite ją automatiškai paleisti įkrovos metu, tada patikrinkite, ar ji veikia, naudodami komandą systemctl.
„Ubuntu“ paslauga turėtų būti paleista automatiškai iš karto, kai baigsite išankstinę paketo konfigūraciją, galite tiesiog ją įjungti.

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

Pradėję „Nginx“ paslaugą, turime sukurti tinkintus tinklalapius, skirtus abiejų serverių operacijoms nustatyti ir išbandyti. Mes pakeisime numatytojo „Nginx“ rodyklės puslapio turinį, kaip parodyta.

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

Corosync ir širdies stimuliatoriaus diegimas ir konfigūravimas

Tada kiekviename mazge turime įdiegti širdies stimuliatorių, Corosync ir PC, kaip nurodyta toliau.

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

Kai diegimas bus baigtas, įsitikinkite, kad pcs demonas veikia abiejuose serveriuose.

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

Klasterio kūrimas

Diegimo metu sukuriamas sistemos vartotojas, vadinamas „hacluster“. Taigi turime nustatyti kompiuteriams reikalingą autentifikavimą. Pradėkime sukurdami naują slaptažodį „hacluster“ vartotojui. Visuose serveriuose turime naudoti tą patį slaptažodį:

sudo passwd hacluster

Tada viename iš serverių (1 mazgas) paleiskite šią komandą, kad nustatytumėte kompiuteriams reikalingą autentifikavimą.

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

Dabar sukurkite klasterį ir užpildykite jį kai kuriais mazgais (klasterio pavadinimas negali būti ilgesnis nei 15 simbolių, šiame pavyzdyje naudojome pavyzdinį klasterį) 1 mazgo serveryje.

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

Dabar įgalinkite klasterį įkrovos metu ir paleiskite paslaugą.

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

Dabar patikrinkite, ar klasterio paslauga veikia ir veikia, naudodami šią komandą.

sudo pcs status
OR
sudo crm_mon -1

Iš anksčiau pateiktos komandos išvesties matote, kad yra įspėjimas, kad nėra STONITH įrenginių, tačiau STONITH vis dar įjungtas grupėje. Be to, nebuvo sukonfigūruoti jokie klasterio ištekliai/paslaugos.

Klasterio parinkčių konfigūravimas

Pirmoji parinktis yra išjungti STONITH (arba Shoot The Other Node In The Head), tvoros įgyvendinimą širdies stimuliatoriuje.

Šis komponentas padeda apsaugoti jūsų duomenis nuo sugadinimo dėl lygiagrečios prieigos. Šiame vadove mes jį išjungsime, nes nesukonfigūravome jokių įrenginių.

Norėdami išjungti STONITH, vykdykite šią komandą:

sudo pcs property set stonith-enabled=false

Tada taip pat nepaisykite kvorumo politikos vykdydami šią komandą:

sudo pcs property set no-quorum-policy=ignore

Nustatę aukščiau pateiktas parinktis, paleiskite šią komandą, kad pamatytumėte ypatybių sąrašą ir įsitikintumėte, kad anksčiau nurodytos parinktys stonith ir kvorumo politika yra išjungti.

sudo pcs property list

Išteklių/klasterio paslaugos pridėjimas

Šiame skyriuje apžvelgsime, kaip pridėti klasterio išteklius. Mes sukonfigūruosime slankųjį IP adresą, kuris yra IP adresas, kurį galima akimirksniu perkelti iš vieno serverio į kitą tame pačiame tinkle arba duomenų centre. Trumpai tariant, plaukiojantis IP yra bendras techninis terminas, vartojamas IP adresams, kurie nėra griežtai susieti su viena sąsaja.

Tokiu atveju jis bus naudojamas perjungimui palaikyti didelio pasiekiamumo klasteryje. Nepamirškite, kad slankiojantys IP skirti ne tik nesėkmingoms situacijoms, jie turi keletą kitų naudojimo atvejų. Turime sukonfigūruoti klasterį taip, kad tik aktyvus klasterio narys bet kuriuo metu „turėtų“ arba atsakytų į jį.

Pridėsime du klasterio išteklius: slankiojo IP adreso išteklius, pavadintus „floating_ip“, ir „Nginx“ žiniatinklio serverio išteklius „http_serveris“.

Pirmiausia pradėkite pridėdami floating_ip taip. Šiame pavyzdyje mūsų slankusis IP adresas yra 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

kur:

  • floating_ip: yra paslaugos pavadinimas.
  • „ocf:heartbeat:IPaddr2“: nurodo širdies stimuliatoriui, kurį scenarijų naudoti, šiuo atveju IPaddr2, kurioje vardų srityje jis yra (širdies stimuliatorius) ir kokį standartą atitinka ocf.
  • Op monitor interval=60s“: nurodo širdies stimuliatoriui kas minutę patikrinti šios paslaugos būklę, paskambinus agento monitoriui.

Tada pridėkite antrąjį šaltinį, pavadintą http_serveris. Čia paslaugos išteklių agentas yra ocf:heartbeat:nginx.

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

Pridėję klasterio paslaugas, išduokite šią komandą, kad patikrintumėte išteklių būseną.

sudo pcs status resources

Žvelgiant į komandos išvestį, buvo pateikti du pridėti ištekliai: „floating_ip“ ir “http_server“. „Floating_ip“ paslauga išjungta, nes veikia pirminis mazgas.

Jei sistemoje įgalinta užkarda, turite leisti visą srautą į Nginx ir visas aukšto pasiekiamumo paslaugas per užkardą, kad būtų galima tinkamai bendrauti tarp mazgų:

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

Aukšto prieinamumo/grupavimo testavimas

Paskutinis ir svarbus žingsnis yra patikrinti, ar mūsų didelio pasiekiamumo sąranka veikia. Atidarykite žiniatinklio naršyklę ir eikite į adresą 192.168.10.20. Turėtumėte matyti numatytąjį Nginx puslapį iš node2.example.com, kaip parodyta ekrano kopijoje.

Norėdami imituoti gedimą, vykdykite šią komandą, kad sustabdytumėte klasterį node2.example.com.

sudo pcs cluster stop http_server

Tada iš naujo įkelkite puslapį adresu 192.168.10.20. Dabar turėtumėte pasiekti numatytąjį Nginx tinklalapį iš node1.example.com.

Arba galite imituoti klaidą, liepdami paslaugai sustoti tiesiogiai, nestabdant klasterio jokiame mazge, naudodami šią komandą viename iš mazgų:

 
sudo crm_resource --resource http_server --force-stop 

Tada turite paleisti crm_mon interaktyviu režimu (numatytasis), per 2 minučių stebėjimo intervalą turėtumėte matyti klasterio pranešimą, kad http_serveris nepavyko, ir perkelti jį į kitą mazgą.

Kad jūsų klasterio paslaugos veiktų efektyviai, gali tekti nustatyti tam tikrus apribojimus. Visų naudojimo komandų sąrašą galite pamatyti vnt. vadovo puslapyje (man vnt.).

Daugiau informacijos apie Corosync ir širdies stimuliatorių rasite adresu https://clusterlabs.org/

Santrauka

Šiame vadove mes parodėme pagrindus, kaip įdiegti, konfigūruoti ir palaikyti aukštą pasiekiamumą/grupavimą/replikaciją Ubuntu 16.04/18.04 ir CentOS 7. Parodėme, kaip pridėti Nginx HTTP paslaugą prie klasterio. Jei turite kokių nors minčių, kuriomis norite pasidalinti, ar turite klausimų, naudokite toliau pateiktą atsiliepimų formą.