Jinsi ya Kusanidi na Kudumisha Upatikanaji wa Juu/Mkusanyiko katika Linux


Upatikanaji wa Juu (HA) inarejelea tu ubora wa mfumo kufanya kazi bila kushindwa kwa muda mrefu. Suluhu za HA zinaweza kutekelezwa kwa kutumia maunzi na/au programu, na mojawapo ya suluhu za kawaida za kutekeleza HA ni kuunganisha.

Katika kompyuta, kikundi kinaundwa na kompyuta mbili au zaidi (zinazojulikana kama nodi au washiriki) ambazo hufanya kazi pamoja kutekeleza kazi. Katika usanidi kama huo, nodi moja tu hutoa huduma na nodi za sekondari kuchukua ikiwa itashindwa.

Makundi yamegawanywa katika aina nne kuu:

  • Hifadhi: toa picha thabiti ya mfumo wa faili kwenye seva katika kundi, ikiruhusu seva kusoma na kuandika kwa wakati mmoja kwa mfumo mmoja wa faili ulioshirikiwa.
  • Upatikanaji wa Juu: ondoa nukta moja ya kutofaulu na kwa kukosa huduma kutoka kwa nodi moja ya nguzo hadi nyingine ikiwa nodi itaenda haifanyi kazi.
  • Kusawazisha Mizigo: kutuma maombi ya huduma ya mtandao kwa nodi nyingi za vishada ili kusawazisha mzigo wa ombi kati ya nodi za nguzo.
  • Utendaji wa Juu: kutekeleza uchakataji sambamba au kwa wakati mmoja, hivyo kusaidia kuboresha utendakazi wa programu.

Suluhisho lingine linalotumika sana kutoa HA ni replication (haswa replications za data). Uigaji ni mchakato ambao hifadhidata moja au zaidi (ya pili) inaweza kuwekwa katika usawazishaji na hifadhidata moja ya msingi (au bwana).

Ili kusanidi kikundi, tunahitaji angalau seva mbili. Kwa madhumuni ya mwongozo huu, tutatumia seva mbili za Linux:

  • Njia1: 192.168.10.10
  • Njia2: 192.168.10.11

Katika makala haya, tutaonyesha misingi ya jinsi ya kupeleka, kusanidi na kudumisha upatikanaji wa juu/mkusanyiko katika Ubuntu 16.04/18.04 na CentOS 7. Tutaonyesha jinsi ya kuongeza huduma ya Nginx HTTP kwenye nguzo.

Inasanidi Mipangilio ya Ndani ya DNS kwenye Kila Seva

Ili seva mbili ziwasiliane, tunahitaji kusanidi mipangilio inayofaa ya ndani ya DNS katika faili ya /etc/hosts kwenye seva zote mbili.

Fungua na uhariri faili kwa kutumia kihariri chako cha mstari wa amri unachopenda.

$ sudo vim /etc/hosts  

Ongeza maingizo yafuatayo na anwani halisi za IP za seva zako.

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

Hifadhi mabadiliko na funga faili.

Inasakinisha Seva ya Wavuti ya Nginx

Sasa sakinisha seva ya wavuti ya Nginx kwa kutumia amri zifuatazo.

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

Baada ya usakinishaji kukamilika, anzisha huduma ya Nginx kwa sasa na uiwezeshe iwashe kiotomatiki wakati wa kuwasha, kisha uangalie ikiwa iko na inafanya kazi kwa kutumia amri ya systemctl.
Kwenye Ubuntu, huduma inapaswa kuanza kiotomatiki mara baada ya usanidi wa kifurushi kukamilika, unaweza kuiwezesha tu.

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

Baada ya kuanzisha huduma ya Nginx, tunahitaji kuunda kurasa za tovuti maalum kwa ajili ya kutambua na kujaribu utendakazi kwenye seva zote mbili. Tutarekebisha yaliyomo kwenye ukurasa wa faharasa wa Nginx kama inavyoonyeshwa.

$ 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

Kufunga na Kusanidi Corosync na Pacemaker

Ifuatayo, tunapaswa kusakinisha Pacemaker, Corosync, na Pcs kwenye kila nodi kama ifuatavyo.

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

Mara usakinishaji utakapokamilika, hakikisha kuwa pcs daemon inaendesha kwenye seva zote mbili.

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

Wakati wa usakinishaji, mtumiaji wa mfumo anayeitwa \hacluster huundwa. Kwa hivyo tunahitaji kusanidi uthibitishaji unaohitajika kwa pcs. Hebu tuanze kwa kuunda nenosiri jipya la mtumiaji wa \hacluster, tunahitaji kutumia nenosiri sawa kuwasha. seva zote:

$ sudo passwd hacluster

Ifuatayo, kwenye seva moja (Node1), endesha amri ifuatayo ili kusanidi uthibitishaji unaohitajika kwa pcs.

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

Sasa unda nguzo na uijaze na nodi kadhaa (jina la nguzo haliwezi kuzidi herufi 15, katika mfano huu, tumetumia nguzo ya mfano) kwenye seva ya Node1.

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

Sasa wezesha nguzo kwenye buti na uanze huduma.

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

Sasa angalia ikiwa huduma ya nguzo iko juu na inaendelea kwa kutumia amri ifuatayo.

$ sudo pcs status
OR
$ sudo crm_mon -1

Kutoka kwa matokeo ya amri iliyo hapo juu, unaweza kuona kwamba kuna onyo kuhusu hakuna vifaa vya STONITH bado STONITH bado imewezeshwa kwenye nguzo. Kwa kuongeza, hakuna rasilimali/huduma za nguzo ambazo zimesanidiwa.

Chaguo la kwanza ni kulemaza STONITH (au Piga Njia Nyingine Kichwani), utekelezaji wa uzio kwenye Kisaidia Moyo.

Kipengele hiki husaidia kulinda data yako dhidi ya kuharibiwa na ufikiaji kwa wakati mmoja. Kwa madhumuni ya mwongozo huu, tutauzima kwa kuwa hatujasanidi kifaa chochote.

Ili kuzima STONITH, endesha amri ifuatayo:

$ sudo pcs property set stonith-enabled=false

Ifuatayo, pia puuza sera ya Akidi kwa kutekeleza amri ifuatayo:

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

Baada ya kuweka chaguo zilizo hapo juu, endesha amri ifuatayo ili kuona orodha ya mali na uhakikishe kuwa chaguo zilizo hapo juu, stonith na sera ya akidi zimezimwa.

$ sudo pcs property list

Katika sehemu hii, tutaangalia jinsi ya kuongeza rasilimali ya nguzo. Tutasanidi IP inayoelea ambayo ni anwani ya IP inayoweza kuhamishwa papo hapo kutoka kwa seva moja hadi nyingine ndani ya mtandao sawa au kituo cha data. Kwa kifupi, IP inayoelea ni neno la kitaalamu la kawaida, linalotumika kwa IP ambazo hazifungwi kabisa na kiolesura kimoja.

Katika kesi hii, itatumika kusaidia kushindwa katika nguzo ya upatikanaji wa juu. Kumbuka kwamba IP zinazoelea sio tu za hali ya kushindwa, zina kesi zingine chache za utumiaji. Tunahitaji kusanidi nguzo kwa njia ambayo ni mwanachama amilifu pekee wa kundi anayemiliki au kujibu IP inayoelea wakati wowote.

Tutaongeza nyenzo mbili za nguzo: rasilimali ya anwani ya IP inayoelea inayoitwa \floating_ip na nyenzo ya seva ya wavuti ya Nginx iitwayo \http_server.

Kwanza anza kwa kuongeza floating_ip kama ifuatavyo. Katika mfano huu, anwani yetu ya IP inayoelea ni 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

wapi:

  • floating_ip: ndilo jina la huduma.
  • \ocf:heartbeat:IPaddr2: inaiambia Pacemaker ni hati gani ya kutumia, IPaddr2 katika hali hii, iko katika nafasi ya jina (kipimo cha moyo) na inalingana na kiwango gani ocf.
  • “op monitor interval=60s”: inaagiza Kisaidia Moyo kuangalia afya ya huduma hii kila baada ya dakika moja kwa kupiga simu ya mfuatiliaji wa wakala.

Kisha ongeza rasilimali ya pili, inayoitwa http_server. Hapa, wakala wa rasilimali wa huduma ni ocf:heartbeat:nginx.

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

Mara tu unapoongeza huduma za nguzo, toa amri ifuatayo ili kuangalia hali ya rasilimali.

$ sudo pcs status resources

Kwa kuangalia matokeo ya amri, nyenzo mbili zilizoongezwa: \floating_ip na \http_server zimeorodheshwa. Huduma ya floating_ip imezimwa kwa sababu nodi msingi inafanya kazi.

Ikiwa umewasha ngome kwenye mfumo wako, unahitaji kuruhusu trafiki yote kwa Nginx na huduma zote za upatikanaji wa juu kupitia ngome kwa mawasiliano sahihi kati ya nodi:

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

Hatua ya mwisho na muhimu ni kujaribu usanidi wetu wa upatikanaji wa juu unafanya kazi. Fungua kivinjari cha wavuti na uende kwa anwani 192.168.10.20 unapaswa kuona ukurasa chaguo-msingi wa Nginx kutoka node2.example.com kama inavyoonyeshwa kwenye picha ya skrini.

Ili kuiga kutofaulu, endesha amri ifuatayo ili kusimamisha nguzo kwenye node2.example.com.

$ sudo pcs cluster stop http_server

Kisha pakia upya ukurasa kwa 192.168.10.20, unapaswa kufikia ukurasa wa wavuti wa Nginx kutoka kwa node1.example.com.

Vinginevyo, unaweza kuiga kosa kwa kuwaambia huduma kuacha moja kwa moja, bila kusimamisha nguzo kwenye nodi yoyote, kwa kutumia amri ifuatayo kwenye moja ya nodi:

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

Kisha unahitaji kuendesha crm_mon katika hali ya maingiliano (chaguo-msingi), ndani ya muda wa kufuatilia wa dakika 2, unapaswa kuwa na uwezo wa kuona taarifa ya nguzo kwamba http_server imeshindwa na kuipeleka kwenye nodi nyingine.

Ili huduma zako za nguzo zifanye kazi kwa ufanisi, huenda ukahitaji kuweka vikwazo fulani. Unaweza kuona pcs man page (man pcs) kwa orodha ya amri zote za matumizi.

Kwa habari zaidi juu ya Corosync na Pacemaker, angalia: https://clusterlabs.org/

Katika mwongozo huu, tumeonyesha misingi ya jinsi ya kusambaza, kusanidi na kudumisha upatikanaji wa juu/mkusanyiko/rudufishaji katika Ubuntu 16.04/18.04 na CentOS 7. Tulionyesha jinsi ya kuongeza huduma ya Nginx HTTP kwenye kundi. Ikiwa una maoni yoyote ya kushiriki au maswali, tumia fomu ya maoni iliyo hapa chini.