Otu esi ahazi yana jikwaa nnweta dị elu/nchịkọta na Linux


Nnweta dị elu (HA) na-ezo aka naanị n'ịdị mma nke sistemụ na-arụ ọrụ na-aga n'ihu na-enweghị ọdịda ruo ogologo oge. Enwere ike ime ihe ngwọta HA site na iji ngwaike na/ma ọ bụ ngwanrọ, na otu n'ime ihe ngwọta a na-emekarị iji mejuputa HA bụ nchịkọta.

Na kọmpụta, otu ụyọkọ bụ kọmpụta abụọ ma ọ bụ karịa (nke a na-akpọkarị ọnụ ma ọ bụ ndị otu) na-arụkọ ọrụ ọnụ iji rụọ ọrụ. N'ụdị ntọlite dị otu a, naanị otu ọnụ na-enye ọrụ ahụ ọnụ(s) nke abụọ na-eweghara ma ọ bụrụ na ọ daa.

Ụyọkọ dabara n'ụdị anọ bụ isi:

  • Nchekwa: wepụta onyonyo sistemụ faịlụ na-agbanwe agbanwe n'ofe sava dị na ụyọkọ, na-enye ohere ka sava ahụ gụọ ma dee n'otu sistemụ faịlụ ekekọrịtara n'otu oge.
  • Nnweta dị elu: wepụ otu isi ihe ọdịda yana site na ịghara ọrụ site na otu ụyọkọ ọnụ gaa na nke ọzọ ma ọ bụrụ na ọnụ na-aga agaghị arụ ọrụ.
  • Idozi ibu: zipu arịrịọ ọrụ netwọk n'ọtụtụ ụyọkọ ọnụ iji dozie ibu arịrịọ n'etiti ọnụ ụyọkọ.
  • Arụmọrụ dị elu: mee nhazi n'otu oge ma ọ bụ n'otu oge, si otú a na-enyere aka melite arụmọrụ nke ngwa.

Ihe ngwọta ọzọ a na-ejikarị eme ihe iji nye HA bụ ntụgharị (kpọmkwem data ntụgharị). Ntugharị bụ usoro nke enwere ike idobe otu nchekwa data ma ọ bụ karịa (secondary) yana otu nchekwa data isi (ma ọ bụ nna ukwu).

Iji hazie ụyọkọ, anyị chọrọ opekata mpe sava abụọ. Maka ebumnuche ntuziaka a, anyị ga-eji sava Linux abụọ:

  • Ọnụ 1: 192.168.10.10
  • Ọnụ 2: 192.168.10.11

N'isiokwu a, anyị ga-egosipụta ihe ndị bụ isi nke otu esi ebuga, hazie ma nọgide na-enwe nnukwu nnweta/nchịkọta na Ubuntu 16.04/18.04 na CentOS 7. Anyị ga-egosipụta otu esi etinye Nginx HTTP ọrụ na ụyọkọ.

Na-ahazi Ntọala DNS mpaghara na sava ọ bụla

Ka sava abụọ ahụ nwee ike ịkparịta ụka n'etiti onwe anyị, anyị kwesịrị ịhazi ntọala DNS mpaghara kwesịrị ekwesị na faịlụ /etc/hosts na sava abụọ ahụ.

Mepee wee dezie faịlụ ahụ site na iji onye ndezi ahịrị iwu ọkacha mmasị gị.

$ sudo vim /etc/hosts  

Tinye adreesị IP nke sava gị n'ezie ndenye ndị a.

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

Chekwaa mgbanwe ndị ahụ wee mechie faịlụ ahụ.

Ịwụnye Nginx sava weebụ

Ugbu a wụnye sava weebụ Nginx site na iji iwu ndị a.

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

Ozugbo echichi ahụ mechara, malite ọrụ Nginx ugbu a wee mee ka ọ malite na akpaghị aka n'oge buut, wee lelee ma ọ na-agba ọsọ ma na-eji usoro systemctl.
Na Ubuntu, a ga-amalite ọrụ ahụ ozugbo ozugbo nhazi ngwugwu zuru ezu, ị nwere ike ịme ya naanị.

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

Mgbe ịmalitere ọrụ Nginx, anyị kwesịrị ịmepụta ibe weebụ omenala maka ịchọpụta na ịnwale ọrụ na sava abụọ ahụ. Anyị ga-agbanwe ọdịnaya nke ibe ndeksi Nginx ndabara dị ka egosiri.

$ 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

Ịwụnye na ịhazi Corosync na Pacemaker

Ọzọ, anyị ga-etinye Pacemaker, Corosync, na PC na ọnụ nke ọ bụla dị ka ndị a.

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

Ozugbo echichi mechara, gbaa mbọ hụ na pcs daemon na-agba ọsọ na sava abụọ ahụ.

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

N'oge echichi, a na-emepụta onye ọrụ nke a na-akpọ \hacluster Ya mere, anyị kwesịrị ịmepụta nkwenye dị mkpa maka pcs, ka anyị malite site na ịmepụta paswọọdụ ọhụrụ maka onye ọrụ \hacluster, anyị kwesịrị iji otu paswọọdụ ahụ. sava niile:

$ sudo passwd hacluster

Na-esote, na otu n'ime sava (Node1), mee iwu na-esonụ ka ịtọlite nnwale dị mkpa maka pcs.

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

Ugbu a mepụta ụyọkọ ma mejupụta ya na ụfọdụ ọnụ (aha ụyọkọ enweghị ike ịfe mkpụrụedemede 15, na ọmụmaatụ a, anyị ejirila ụyọkọ ihe atụ) na sava Node1.

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

Ugbu a gbanye ụyọkọ na buut wee malite ọrụ ahụ.

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

Ugbu a lelee ma ọrụ ụyọkọ a na-arụ ọrụ site na iji iwu a.

$ sudo pcs status
OR
$ sudo crm_mon -1

Site na mmepụta nke iwu dị n'elu, ị nwere ike ịhụ na enwere ịdọ aka ná ntị banyere enweghị ngwaọrụ STONITH ma STONITH ka na-arụ ọrụ na ụyọkọ. Na mgbakwunye, ọ nweghị akụrụngwa/ọrụ ụyọkọ ahaziri.

Nhọrọ nke mbụ bụ gbanyụọ STONITH (ma ọ bụ gbaa The Node Node In the Head), mmejuputa fencing na Pacemaker.

Akụkụ a na-enyere aka ichekwa data gị ka emebie site na ịnweta otu oge. Maka ebumnuche ntuziaka a, anyị ga-ewepụ ya ebe ọ bụ na anyị ahazibeghị ngwaọrụ ọ bụla.

Iji gbanyụọ STONITH, mee iwu a:

$ sudo pcs property set stonith-enabled=false

Na-esote, legharakwa amụma Quorum anya site n'ịgba iwu a:

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

Mgbe ịtọchara nhọrọ ndị a dị n'elu, mee iwu a ka ịhụ ndepụta akụrụngwa wee hụ na nhọrọ ndị dị n'elu, stonith na amụma quorum enweghị nkwarụ.

$ sudo pcs property list

Na ngalaba a, anyị ga-eleba anya ka esi etinye akụrụngwa ụyọkọ. Anyị ga-ahazi IP na-ese n'elu mmiri nke bụ adreesị IP nke enwere ike ibugharị ozugbo site n'otu ihe nkesa gaa na nke ọzọ n'ime otu netwọkụ ma ọ bụ ebe data. Na nkenke, IP na-ese n'elu mmiri bụ okwu a na-ejikarị eme ihe maka IP nke na-ejikọtaghị ya na otu interface.

N'okwu a, a ga-eji ya kwado ọdịda ọdịda na ụyọkọ nnweta dị elu. Buru n'uche na IP na-ese n'elu mmiri abụghị naanị maka ọnọdụ ọdịda, ha nwere ikpe ole na ole ndị ọzọ. Anyị kwesịrị ịhazi ụyọkọ ahụ n'ụzọ na ọ bụ naanị onye nọ n'ọrụ nke ụyọkọ ahụ nwere ma ọ bụ zaghachi IP na-ese n'elu mmiri n'oge ọ bụla.

Anyị ga-agbakwunye akụrụngwa abụọ: adreesị IP na-ese n'elu mmiri a na-akpọ \floating_ip yana akụrụngwa maka sava weebụ Nginx a na-akpọ \http_server.

Buru ụzọ malite site na ịgbakwunye floating_ip dị ka ndị a. N'ihe atụ a, adreesị IP anyị na-ese n'elu mmiri bụ 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

ebe:

  • floating_ip: bụ aha ọrụ.
  • \ocf:heartbeat:IPaddr2: na-agwa Pacemaker nke script ọ ga-eji, IPaddr2 na nke a, aha oghere ọ dị na (pacemaker) na ụdị ọkọlọtọ ọ dabara na ocf.
  • “op monitor interval=60s”: na-agwa onye na-eme ihe na-eme ihe ka o lelee ahụike nke ọrụ a kwa nkeji ọ bụla site n'ịkpọ onye ọrụ nlekota ihe.

Wee tinye akụ nke abụọ, aha ya bụ http_server. N'ebe a, onye ọrụ enyemaka nke ọrụ bụ ocf:heartbeat:nginx.

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

Ozugbo ị gbakwunyere ọrụ ụyọkọ, nye iwu a ka ịlele ọnọdụ akụrụngwa.

$ sudo pcs status resources

N'ileghachi anya na mmepụta nke iwu ahụ, akụrụngwa abụọ agbakwunyere: \floating_ip na \http_server ka edepụtala. Apụọla ọrụ floating_ip n'ihi na ọnụ ụzọ na-arụ ọrụ.

Ọ bụrụ na ị nwere firewall na sistemụ gị, ịkwesịrị ikwe ka okporo ụzọ niile gaa na Nginx yana ọrụ niile dị elu site na firewall maka nkwurịta okwu kwesịrị ekwesị n'etiti ọnụ:

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

Nzọụkwụ ikpeazụ ma dị mkpa bụ ịnwale na nhazi nnweta dị elu anyị na-arụ ọrụ. Mepee ihe nchọgharị weebụ wee gaa na adreesị 192.168.10.20 ị ga-ahụ ibe Nginx ndabara site na node2.example.com dị ka egosiri na nseta ihuenyo.

Ka ịmee ọdịda, gbaa iwu a ka ịkwụsị ụyọkọ na node2.example.com.

$ sudo pcs cluster stop http_server

Weghachite ibe ahụ na 192.168.10.20, ị ga-abanye ugbu a na ibe weebụ Nginx ndabara site na node1.example.com.

N'aka nke ọzọ, ịnwere ike ịmegharị njehie site n'ịgwa ọrụ ahụ ka ọ kwụsị ozugbo, na-akwụsịghị ụyọkọ ahụ na ọnụ ọ bụla, na-eji iwu na-esonụ n'otu n'ime ọnụ:

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

Mgbe ahụ ịkwesịrị ịgba ọsọ crm_mon na ọnọdụ mmekọrịta (nke ndabara), n'ime oge nyocha nke nkeji 2, ị ga-enwe ike ịhụ ọkwa ụyọkọ na http_server dara wee bugharịa ya na oghere ọzọ.

Ka ọrụ ụyọkọ gị wee na-aga nke ọma, ị nwere ike ịtọ ihe mgbochi. Ị nwere ike ịhụ ibe mmadụ pcs (man pcs) maka ndepụta iwu ojiji niile.

Maka ozi ndị ọzọ na Corosync na Pacemaker, lelee: https://clusterlabs.org/

N'ime ntuziaka a, anyị egosila ihe ndị bụ isi nke otu esi ebuga, hazie ma jikwaa nnukwu nnweta/nchịkọta/mmeghari na Ubuntu 16.04/18.04 na CentOS 7. Anyị gosipụtara otu esi etinye Nginx HTTP ọrụ na ụyọkọ. Ọ bụrụ na ị nwere echiche ọ bụla iji kesaa ma ọ bụ ajụjụ, jiri ụdị nzaghachi dị n'okpuru.