Jinsi ya kutumia Nginx kama Usawazishaji wa Upakiaji wa HTTP kwenye Linux


Linapokuja suala la kusanidi seva nyingi za programu kwa ajili ya kupunguzwa kazi, kusawazisha mzigo ni utaratibu unaotumiwa sana wa kusambaza kwa ufanisi maombi ya huduma zinazoingia au trafiki ya mtandao kwenye kundi la seva za nyuma.

Kusawazisha mizigo kuna manufaa kadhaa ikiwa ni pamoja na kuongezeka kwa upatikanaji wa programu kupitia upunguzaji wa uwezo, kuegemea na kuongezeka kwa kasi (seva zaidi zinaweza kuongezwa kwenye mchanganyiko trafiki inapoongezeka). Pia huleta utendakazi ulioboreshwa wa programu na manufaa mengine mengi.

Imependekezwa Soma: Mwongozo wa Mwisho wa Kulinda, Kuimarisha na Kuboresha Utendaji wa Seva ya Wavuti ya Nginx

Nginx inaweza kutumwa kama kiweka sawa cha upakiaji wa HTTP ili kusambaza trafiki ya mtandao inayoingia na mzigo wa kazi kati ya kundi la seva za programu, katika kila hali kurudisha jibu kutoka kwa seva iliyochaguliwa hadi kwa mteja anayefaa.

Njia za kusawazisha mzigo zinazoungwa mkono na Nginx ni:

  • round-robin - ambayo inasambaza maombi kwa seva za programu kwa mtindo wa duara. Inatumiwa kwa chaguo-msingi wakati hakuna mbinu iliyobainishwa,
  • iliyounganishwa angalau - inapeana ombi linalofuata kwa seva isiyo na shughuli nyingi (seva iliyo na idadi ndogo ya miunganisho amilifu),
  • ip-hash - ambapo kipengele cha kukokotoa cha heshi kinatumiwa kubainisha ni seva gani inapaswa kuchaguliwa kwa ombi linalofuata kulingana na anwani ya IP ya mteja. Mbinu hii inaruhusu uendelevu wa kipindi (funga mteja kwa seva fulani ya programu).

Kando na hilo, unaweza kutumia uzani wa seva kushawishi algorithms ya kusawazisha upakiaji wa Nginx kwa kiwango cha juu zaidi. Nginx pia inasaidia ukaguzi wa afya ili kuashiria seva kuwa imeshindwa (kwa muda unaoweza kusanidiwa, chaguo-msingi ni sekunde 10) ikiwa jibu lake litashindwa na hitilafu, kwa hivyo huepuka kuchagua seva hiyo kwa maombi yanayokuja kwa muda fulani.

Mwongozo huu wa vitendo unaonyesha jinsi ya kutumia Nginx kama kisawazisha cha upakiaji wa HTTP kusambaza maombi ya mteja yanayoingia kati ya seva mbili kila moja ikiwa na mfano wa programu sawa.

Kwa madhumuni ya kujaribu, kila mfano wa programu umewekwa lebo (kwenye kiolesura cha mtumiaji) ili kuonyesha seva ambayo inawasha.

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Kwenye kila seva ya programu, kila mfano wa programu umesanidiwa kufikiwa kwa kutumia kikoa tecmintapp.lan. Kwa kuchukulia kuwa hiki ni kikoa kilichosajiliwa kikamilifu, tutaongeza yafuatayo katika mipangilio ya DNS.

A Record   		@   		192.168.58.7

Rekodi hii huambia maombi ya mteja ambapo kikoa kinapaswa kuelekeza kwa, katika kesi hii, sawazisha la mzigo (192.168.58.7). Rekodi za DNS A zinakubali tu thamani za IPv4. Vinginevyo, faili ya /etc/hosts kwenye mashine za mteja pia inaweza kutumika kwa madhumuni ya majaribio, na ingizo lifuatalo.

192.168.58.7  	tecmintapp.lan

Kuweka Usawazishaji wa Upakiaji wa Nginx katika Linux

Kabla ya kusanidi kusawazisha upakiaji wa Nginx, lazima usakinishe Nginx kwenye seva yako kwa kutumia kidhibiti chaguo-msingi cha kifurushi kwa usambazaji wako kama inavyoonyeshwa.

$ sudo apt install nginx   [On Debian/Ubuntu]
$ sudo yum install nginx   [On CentOS/RHEL]   

Kisha, unda faili ya kuzuia seva inayoitwa /etc/nginx/conf.d/loadbalalancer.conf (toa jina la chaguo lako).

$ sudo vi /etc/nginx/conf.d/loadbalancer.conf

Kisha nakili na ubandike usanidi ufuatao ndani yake. Mipangilio hii ni chaguomsingi kwa robin ya pande zote kwani hakuna mbinu ya kusawazisha mizigo iliyofafanuliwa.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Katika usanidi ulio hapo juu, maagizo ya proxy_pass (ambayo yanapaswa kubainishwa ndani ya eneo, / katika hali hii) yanatumika kupitisha ombi kwa seva mbadala za HTTP zinazorejelewa kwa kutumia neno backend, katika maelekezo ya juu (hutumika kufafanua kundi la seva). Pia, maombi yatasambazwa kati ya seva kwa kutumia utaratibu wa kusawazisha wa robini wenye uzani.

Ili kutumia utaratibu mdogo wa uunganisho, tumia usanidi ufuatao

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Na kuwezesha ip_hash utaratibu wa kudumu wa kipindi, tumia:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Unaweza pia kushawishi uamuzi wa kusawazisha mzigo kwa kutumia uzani wa seva. Kutumia usanidi ufuatao, ikiwa kuna maombi sita kutoka kwa wateja, seva ya maombi 192.168.58.5 itapewa maombi 4 na 2 itaenda 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Hifadhi faili na uiondoe. Kisha hakikisha muundo wa usanidi wa Nginx ni sawa baada ya kuongeza mabadiliko ya hivi karibuni, kwa kutekeleza amri ifuatayo.

$ sudo nginx -t

Ikiwa usanidi ni sawa, anzisha upya na uwashe huduma ya Nginx kutumia mabadiliko.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

Kujaribu Usawazishaji wa Mzigo wa Nginx katika Linux

Ili kujaribu kusawazisha upakiaji wa Nginx, fungua kivinjari cha wavuti na utumie anwani ifuatayo kusogeza.

http://tecmintapp.lan

Mara tu kiolesura cha tovuti kinapakia, kumbuka mfano wa programu ambayo imepakia. Kisha onyesha upya ukurasa kila wakati. Wakati fulani, programu inapaswa kupakiwa kutoka kwa seva ya pili inayoonyesha kusawazisha mzigo.

Umejifunza jinsi ya kusanidi Nginx kama kisawazisha cha upakiaji wa HTTP katika Linux. Tungependa kujua mawazo yako kuhusu mwongozo huu, na hasa kuhusu kuajiri Nginx kama kiweka sawa cha mizigo, kupitia fomu ya maoni iliyo hapa chini. Kwa habari zaidi, angalia hati za Nginx kuhusu kutumia Nginx kama kibawazisha cha upakiaji wa HTTP.