ലിനക്സിൽ ഒരു HTTP ലോഡ് ബാലൻസറായി Nginx എങ്ങനെ ഉപയോഗിക്കാം


ആവർത്തനത്തിനായി ഒന്നിലധികം ആപ്ലിക്കേഷൻ സെർവറുകൾ സജ്ജീകരിക്കുമ്പോൾ, ഒരു കൂട്ടം ബാക്ക്-എൻഡ് സെർവറുകളിലുടനീളം ഇൻകമിംഗ് സേവന അഭ്യർത്ഥനകളോ നെറ്റ്uവർക്ക് ട്രാഫിക്കുകളോ കാര്യക്ഷമമായി വിതരണം ചെയ്യുന്നതിന് സാധാരണയായി ഉപയോഗിക്കുന്ന ഒരു സംവിധാനമാണ് ലോഡ് ബാലൻസിംഗ്.

റിഡൻഡൻസി വഴി വർദ്ധിച്ച ആപ്ലിക്കേഷൻ ലഭ്യത, വർദ്ധിച്ച വിശ്വാസ്യത, സ്കേലബിളിറ്റി (ട്രാഫിക്ക് കൂടുമ്പോൾ കൂടുതൽ സെർവറുകൾ മിക്സിൽ ചേർക്കാം) എന്നിവ ഉൾപ്പെടെ ലോഡ് ബാലൻസിന് നിരവധി ഗുണങ്ങളുണ്ട്. ഇത് മെച്ചപ്പെട്ട ആപ്ലിക്കേഷൻ പ്രകടനവും മറ്റ് നിരവധി ആനുകൂല്യങ്ങളും നൽകുന്നു.

ശുപാർശ ചെയ്uത വായന: Nginx വെബ് സെർവറിന്റെ പ്രകടനം സുരക്ഷിതമാക്കാനും കഠിനമാക്കാനും മെച്ചപ്പെടുത്താനുമുള്ള ആത്യന്തിക ഗൈഡ്

ഒരു കൂട്ടം ആപ്ലിക്കേഷൻ സെർവറുകൾക്കിടയിൽ ഇൻകമിംഗ് നെറ്റ്uവർക്ക് ട്രാഫിക്കും ജോലിഭാരവും വിതരണം ചെയ്യുന്നതിനുള്ള കാര്യക്ഷമമായ HTTP ലോഡ് ബാലൻസറായി Nginx-നെ വിന്യസിക്കാൻ കഴിയും, ഓരോ സാഹചര്യത്തിലും തിരഞ്ഞെടുത്ത സെർവറിൽ നിന്നുള്ള പ്രതികരണം ഉചിതമായ ക്ലയന്റിലേക്ക് തിരികെ നൽകുന്നു.

Nginx പിന്തുണയ്ക്കുന്ന ലോഡ് ബാലൻസിങ് രീതികൾ ഇവയാണ്:

  • റൗണ്ട്-റോബിൻ - ഇത് ഒരു റൗണ്ട്-റോബിൻ രീതിയിൽ ആപ്ലിക്കേഷൻ സെർവറുകളിലേക്ക് അഭ്യർത്ഥനകൾ വിതരണം ചെയ്യുന്നു. ഒരു രീതിയും വ്യക്തമാക്കാത്തപ്പോൾ ഇത് സ്ഥിരസ്ഥിതിയായി ഉപയോഗിക്കുന്നു,
  • കുറവ് കണക്റ്റുചെയ്uതത് - തിരക്ക് കുറഞ്ഞ സെർവറിലേക്ക് അടുത്ത അഭ്യർത്ഥന അസൈൻ ചെയ്യുന്നു (ഏറ്റവും കുറഞ്ഞ സജീവ കണക്ഷനുകളുള്ള സെർവർ),
  • ip-hash – ക്ലയന്റിന്റെ IP വിലാസത്തെ അടിസ്ഥാനമാക്കി അടുത്ത അഭ്യർത്ഥനയ്ക്കായി ഏത് സെർവർ തിരഞ്ഞെടുക്കണമെന്ന് നിർണ്ണയിക്കാൻ ഒരു ഹാഷ് ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു. ഈ രീതി സെഷൻ പെർസിസ്റ്റൻസ് അനുവദിക്കുന്നു (ഒരു പ്രത്യേക ആപ്ലിക്കേഷൻ സെർവറുമായി ഒരു ക്ലയന്റ് ബന്ധിപ്പിക്കുക).

കൂടാതെ, കൂടുതൽ വിപുലമായ തലത്തിൽ Nginx ലോഡ് ബാലൻസിംഗ് അൽഗോരിതങ്ങളെ സ്വാധീനിക്കാൻ നിങ്ങൾക്ക് സെർവർ വെയ്റ്റുകൾ ഉപയോഗിക്കാം. ഒരു സെർവർ പരാജയപ്പെട്ടതായി അടയാളപ്പെടുത്തുന്നതിനുള്ള ആരോഗ്യ പരിശോധനകളും Nginx പിന്തുണയ്ക്കുന്നു (കോൺഫിഗർ ചെയ്യാവുന്ന സമയത്തിന്, സ്ഥിരസ്ഥിതി 10 സെക്കൻഡ് ആണ്) അതിന്റെ പ്രതികരണം ഒരു പിശകിനാൽ പരാജയപ്പെടുകയാണെങ്കിൽ, തുടർന്നുള്ള ഇൻകമിംഗ് അഭ്യർത്ഥനകൾക്കായി ആ സെർവർ തിരഞ്ഞെടുക്കുന്നത് ഒഴിവാക്കുന്നു.

ഒരേ ആപ്ലിക്കേഷന്റെ ഉദാഹരണമുള്ള രണ്ട് സെർവറുകൾക്കിടയിൽ ഇൻകമിംഗ് ക്ലയന്റ് അഭ്യർത്ഥനകൾ വിതരണം ചെയ്യുന്നതിന് ഒരു HTTP ലോഡ് ബാലൻസറായി Nginx എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ഈ പ്രായോഗിക ഗൈഡ് കാണിക്കുന്നു.

ടെസ്റ്റിംഗ് ആവശ്യങ്ങൾക്കായി, ഓരോ ആപ്ലിക്കേഷൻ ഇൻസ്റ്റൻസും അത് പ്രവർത്തിക്കുന്ന സെർവറിനെ സൂചിപ്പിക്കാൻ (ഉപയോക്തൃ ഇന്റർഫേസിൽ) ലേബൽ ചെയ്തിരിക്കുന്നു.

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

ഓരോ ആപ്ലിക്കേഷൻ സെർവറിലും, ഓരോ ആപ്ലിക്കേഷൻ ഇൻസ്റ്റൻസും tecmintapp.lan എന്ന ഡൊമെയ്ൻ ഉപയോഗിച്ച് ആക്സസ് ചെയ്യാൻ ക്രമീകരിച്ചിരിക്കുന്നു. ഇതൊരു പൂർണ്ണമായി രജിസ്റ്റർ ചെയ്ത ഡൊമെയ്uനാണെന്ന് കരുതുക, ഞങ്ങൾ DNS ക്രമീകരണങ്ങളിൽ ഇനിപ്പറയുന്നവ ചേർക്കും.

A Record   		@   		192.168.58.7

ഈ സാഹചര്യത്തിൽ, ലോഡ് ബാലൻസറിലേക്ക് (192.168.58.7) ഡൊമെയ്ൻ എവിടേക്കാണ് നയിക്കേണ്ടതെന്ന് ക്ലയന്റ് അഭ്യർത്ഥനകൾ ഈ റെക്കോർഡ് പറയുന്നു. DNS A റെക്കോർഡുകൾ IPv4 മൂല്യങ്ങൾ മാത്രമേ സ്വീകരിക്കുകയുള്ളൂ. പകരമായി, ക്ലയന്റ് മെഷീനുകളിലെ /etc/hosts ഫയലും ഇനിപ്പറയുന്ന എൻട്രി ഉപയോഗിച്ച് ടെസ്റ്റിംഗ് ആവശ്യങ്ങൾക്കായി ഉപയോഗിക്കാം.

192.168.58.7  	tecmintapp.lan

Linux-ൽ Nginx ലോഡ് ബാലൻസിംഗ് സജ്ജീകരിക്കുന്നു

Nginx ലോഡ് ബാലൻസിംഗ് സജ്ജീകരിക്കുന്നതിന് മുമ്പ്, കാണിച്ചിരിക്കുന്നതുപോലെ നിങ്ങളുടെ വിതരണത്തിനായുള്ള ഡിഫോൾട്ട് പാക്കേജ് മാനേജർ ഉപയോഗിച്ച് നിങ്ങളുടെ സെർവറിൽ Nginx ഇൻസ്റ്റാൾ ചെയ്യണം.

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

അടുത്തതായി, /etc/nginx/conf.d/loadbalancer.conf എന്ന പേരിൽ ഒരു സെർവർ ബ്ലോക്ക് ഫയൽ സൃഷ്ടിക്കുക (നിങ്ങൾക്ക് ഇഷ്ടമുള്ള ഒരു പേര് നൽകുക).

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

അതിനുശേഷം ഇനിപ്പറയുന്ന കോൺഫിഗറേഷൻ അതിൽ പകർത്തി ഒട്ടിക്കുക. ലോഡ് ബാലൻസിംഗ് രീതി നിർവചിച്ചിട്ടില്ലാത്തതിനാൽ ഈ കോൺഫിഗറേഷൻ റൗണ്ട് റോബിനിലേക്ക് ഡിഫോൾട്ട് ചെയ്യുന്നു.

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

മുകളിലെ കോൺഫിഗറേഷനിൽ, proxy_pass നിർദ്ദേശം (ഇത് ഒരു ലൊക്കേഷനിൽ വ്യക്തമാക്കിയിരിക്കണം, ഈ സാഹചര്യത്തിൽ /) ഇത് ഉപയോഗിച്ച് പരാമർശിച്ചിരിക്കുന്ന HTTP പ്രോക്സിഡ് സെർവറുകളിലേക്ക് ഒരു അഭ്യർത്ഥന കൈമാറാൻ ഉപയോഗിക്കുന്നു. വേഡ് ബാക്കെൻഡ്, അപ്uസ്ട്രീം നിർദ്ദേശത്തിൽ (ഒരു കൂട്ടം സെർവറുകളെ നിർവചിക്കാൻ ഉപയോഗിക്കുന്നു). കൂടാതെ, വെയ്റ്റഡ് റൗണ്ട് റോബിൻ ബാലൻസിങ് മെക്കാനിസം ഉപയോഗിച്ച് സെർവറുകൾക്കിടയിൽ അഭ്യർത്ഥനകൾ വിതരണം ചെയ്യും.

ഏറ്റവും കുറഞ്ഞ കണക്ഷൻ മെക്കാനിസം ഉപയോഗിക്കുന്നതിന്, ഇനിപ്പറയുന്ന കോൺഫിഗറേഷൻ ഉപയോഗിക്കുക

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

കൂടാതെ ip_hash സെഷൻ പെർസിസ്റ്റൻസ് മെക്കാനിസം പ്രവർത്തനക്ഷമമാക്കാൻ, ഉപയോഗിക്കുക:

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

സെർവർ വെയ്റ്റുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ലോഡ് ബാലൻസിങ് തീരുമാനത്തെ സ്വാധീനിക്കാനും കഴിയും. ഇനിപ്പറയുന്ന കോൺഫിഗറേഷൻ ഉപയോഗിച്ച്, ക്ലയന്റുകളിൽ നിന്ന് ആറ് അഭ്യർത്ഥനകൾ ഉണ്ടെങ്കിൽ, ആപ്ലിക്കേഷൻ സെർവർ 192.168.58.5-ന് 4 അഭ്യർത്ഥനകൾ നൽകും, 2 എണ്ണം 192.168.58.8-ലേക്ക് പോകും.

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

ഫയൽ സംരക്ഷിച്ച് അതിൽ നിന്ന് പുറത്തുകടക്കുക. ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിച്ച് സമീപകാല മാറ്റങ്ങൾ ചേർത്തതിന് ശേഷം Nginx കോൺഫിഗറേഷൻ ഘടന ശരിയാണെന്ന് ഉറപ്പാക്കുക.

$ sudo nginx -t

കോൺഫിഗറേഷൻ ശരിയാണെങ്കിൽ, മാറ്റങ്ങൾ പ്രയോഗിക്കുന്നതിന് പുനരാരംഭിച്ച് Nginx സേവനം പ്രവർത്തനക്ഷമമാക്കുക.

$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

ലിനക്സിൽ Nginx ലോഡ് ബാലൻസിംഗ് പരിശോധിക്കുന്നു

Nginx ലോഡ് ബാലൻസിംഗ് പരിശോധിക്കുന്നതിന്, ഒരു വെബ് ബ്രൗസർ തുറന്ന് നാവിഗേറ്റ് ചെയ്യാൻ ഇനിപ്പറയുന്ന വിലാസം ഉപയോഗിക്കുക.

http://tecmintapp.lan

വെബ്uസൈറ്റ് ഇന്റർഫേസ് ലോഡുചെയ്uതുകഴിഞ്ഞാൽ, ലോഡുചെയ്uത അപ്ലിക്കേഷൻ ഉദാഹരണം ശ്രദ്ധിക്കുക. തുടർന്ന് തുടർച്ചയായി പേജ് പുതുക്കുക. ചില ഘട്ടങ്ങളിൽ, ലോഡ് ബാലൻസിംഗ് സൂചിപ്പിക്കുന്ന രണ്ടാമത്തെ സെർവറിൽ നിന്ന് ആപ്പ് ലോഡ് ചെയ്യണം.

Linux-ൽ ഒരു HTTP ലോഡ് ബാലൻസറായി Nginx എങ്ങനെ സജ്ജീകരിക്കാമെന്ന് നിങ്ങൾ ഇപ്പോൾ പഠിച്ചു. ചുവടെയുള്ള ഫീഡ്uബാക്ക് ഫോം വഴി, ഈ ഗൈഡിനെക്കുറിച്ചും പ്രത്യേകിച്ച് Nginx-നെ ഒരു ലോഡ് ബാലൻസറായി നിയമിക്കുന്നതിനെക്കുറിച്ചും നിങ്ങളുടെ ചിന്തകൾ അറിയാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു. കൂടുതൽ വിവരങ്ങൾക്ക്, ഒരു HTTP ലോഡ് ബാലൻസറായി Nginx ഉപയോഗിക്കുന്നതിനെക്കുറിച്ചുള്ള Nginx ഡോക്യുമെന്റേഷൻ കാണുക.