Հոդվածի թարգմանությունը պատրաստվել է դասընթացի մեկնարկի նախօրեին
Բեռնվածության հավասարակշռումը սովորական լուծում է վեբ հավելվածների հորիզոնական մասշտաբավորման համար մի քանի հոսթերների վրա՝ միաժամանակ օգտվողներին ծառայության մուտքի մեկ կետ տրամադրելով:
HAProxy-ն ձգտում է օպտիմալացնել ռեսուրսների օգտագործումը, առավելագույնի հասցնել թողունակությունը, նվազագույնի հասցնել արձագանքման ժամանակը և խուսափել ցանկացած առանձին ռեսուրսի գերբեռնումից: Այն կարող է տեղադրվել Linux-ի տարբեր բաշխումների վրա, ինչպիսին է CentOS 8-ը, որի վրա մենք կկենտրոնանանք այս ուղեցույցում, ինչպես նաև համակարգերում:
HAProxy-ը հատկապես հարմար է շատ բարձր տրաֆիկ ունեցող կայքերի համար և, հետևաբար, հաճախ օգտագործվում է բազմասերվերի վեբ ծառայության կոնֆիգուրացիաների հուսալիությունն ու կատարումը բարելավելու համար: Այս ուղեցույցը ուրվագծում է HAProxy-ը որպես CentOS 8 ամպային հոսթի վրա HAProxy-ի տեղադրման քայլերը, որն այնուհետև երթևեկությունը ուղղում է դեպի ձեր վեբ սերվերներ:
Որպես լավագույն արդյունքի նախապայման, դուք պետք է ունենաք առնվազն երկու վեբ սերվեր և բեռների հավասարակշռման սերվեր: Վեբ սերվերները պետք է գործարկեն առնվազն հիմնական վեբ ծառայություն, ինչպիսիք են nginx-ը կամ httpd-ը, որպեսզի փորձարկեն բեռի հավասարակշռումը նրանց միջև:
HAProxy-ի տեղադրում CentOS 8-ում
Քանի որ HAProxy-ն արագ զարգացող բաց կոդով հավելված է, CentOS-ի ստանդարտ պահեստներում ձեզ հասանելի բաշխումը կարող է լինել վերջին տարբերակը: Ընթացիկ տարբերակը պարզելու համար գործարկեք հետևյալ հրամանը.
sudo yum info haproxy
HAProxy-ն միշտ տրամադրում է երեք կայուն տարբերակ՝ ընտրելու համար՝ երկու ամենավերջին աջակցվող տարբերակները և երրորդ՝ ավելի հին տարբերակը, որը դեռևս ստանում է կարևոր թարմացումներ: Դուք միշտ կարող եք ստուգել HAProxy-ի կայքում նշված վերջին կայուն տարբերակը, այնուհետև որոշել, թե որ տարբերակի հետ եք ցանկանում աշխատել:
Այս ուղեցույցում մենք կտեղադրենք վերջին կայուն տարբերակը 2.0, որը դեռ հասանելի չէր ստանդարտ պահեստներում ուղեցույցը գրելու պահին: Դուք պետք է այն տեղադրեք սկզբնական աղբյուրից: Բայց նախ ստուգեք, արդյոք բավարարել եք ծրագիրը ներբեռնելու և կազմելու համար անհրաժեշտ պայմանները։
sudo yum install gcc pcre-devel tar make -y
Ներբեռնեք աղբյուրի կոդը՝ օգտագործելով ստորև նշված հրամանը: Դուք կարող եք ստուգել, թե արդյոք կա ավելի նոր տարբերակ
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Ներբեռնումն ավարտվելուց հետո հանեք ֆայլերը՝ օգտագործելով ստորև նշված հրամանը.
tar xzvf ~/haproxy.tar.gz -C ~/
Գնացեք չփաթեթավորված աղբյուրի գրացուցակ.
cd ~/haproxy-2.0.7
Այնուհետև կազմեք ծրագիրը ձեր համակարգի համար.
make TARGET=linux-glibc
Եվ վերջապես, տեղադրեք HAProxy-ն ինքնին.
sudo make install
HAProxy-ն այժմ տեղադրված է, բայց այն գործելու համար պահանջում է լրացուցիչ մանիպուլյացիաներ: Եկեք շարունակենք ստորև բերված ծրագրաշարի և ծառայությունների կարգավորումը:
Ձեր սերվերի համար HAProxy-ի կարգավորում
Այժմ ավելացրեք հետևյալ գրացուցակները և վիճակագրության ֆայլը HAProxy գրառումների համար.
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Ստեղծեք խորհրդանշական հղում երկուականների համար, որպեսզի կարողանաք գործարկել HAProxy հրամանները որպես սովորական օգտվող.
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Եթե ցանկանում եք պրոքսի ավելացնել ձեր համակարգին՝ որպես ծառայություն, պատճենեք haproxy.init ֆայլը օրինակներից ձեր /etc/init.d գրացուցակում: Խմբագրեք ֆայլի թույլտվությունները, որպեսզի սկրիպտը աշխատի, այնուհետև վերագործարկեք systemd daemon-ը.
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
Դուք նաև պետք է թույլատրեք ծառայության ավտոմատ վերագործարկումը, երբ համակարգը գործարկվի.
sudo chkconfig haproxy on
Հարմարության համար խորհուրդ է տրվում նաև նոր օգտվող ավելացնել HAProxy-ն գործարկելու համար.
sudo useradd -r haproxy
Դրանից հետո դուք կարող եք նորից ստուգել տեղադրված տարբերակի համարը՝ օգտագործելով հետևյալ հրամանը.
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
Մեր դեպքում տարբերակը պետք է լինի 2.0.7, ինչպես ցույց է տրված վերը նշված օրինակում:
Վերջապես, CentOS 8-ի կանխադրված firewall-ը բավականին սահմանափակող է այս նախագծի համար: Պահանջվող ծառայությունները թույլատրելու և firewall-ը վերականգնելու համար օգտագործեք հետևյալ հրամանները.
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
Load Balancer Setup
HAProxy-ի կարգավորումը բավականին պարզ գործընթաց է: Ըստ էության, այն ամենը, ինչ դուք պետք է անեք, HAProxy-ին ասելն է, թե ինչ կապեր նա պետք է լսի և որտեղ պետք է փոխանցի դրանք:
Սա արվում է՝ ստեղծելով կազմաձևման ֆայլ /etc/haproxy/haproxy.cfg՝ սահմանող կարգավորումներով: Դուք կարող եք կարդալ HAProxy-ի կազմաձևման տարբերակների մասին
Բեռի հավասարակշռում տրանսպորտային շերտում (շերտ 4)
Սկսենք հիմնական կարգավորումից: Ստեղծեք նոր կազմաձևման ֆայլ, օրինակ՝ օգտագործելով vi ստորև նշված հրամանով.
sudo vi /etc/haproxy/haproxy.cfg
Ֆայլին ավելացրեք հետևյալ բաժինները. Փոխարինել server_name ինչ պետք է կանչի ձեր սերվերները վիճակագրության էջում և private_ip — սերվերների մասնավոր IP հասցեները, որոնց ցանկանում եք ուղղորդել վեբ տրաֆիկը: Դուք կարող եք ստուգել անձնական IP հասցեները
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
Սա սահմանում է տրանսպորտային շերտի ծանրաբեռնվածության հավասարակշռող (շերտ 4) արտաքին անունով http_front ունկնդրում 80-րդ նավահանգստում, որն այնուհետև երթևեկությունը տեղափոխում է լռելյայն հետին մասը՝ http_back: Լրացուցիչ վիճակագրություն /haproxy?stats-ը միացնում է վիճակագրության էջը նշված հասցեին:
Բեռի հավասարակշռման տարբեր ալգորիթմներ:
Հետևի հատվածում սերվերների նշումը թույլ է տալիս HAProxy-ին օգտագործել այս սերվերները բեռների հավասարակշռման համար՝ ըստ հնարավորության դեպքում շրջանաձև ալգորիթմի համաձայն:
Հավասարակշռման ալգորիթմներն օգտագործվում են որոշելու համար, թե որ սերվերին է փոխանցվում յուրաքանչյուր կապը: Ահա որոշ օգտակար տարբերակներ.
- Roundrobin: Յուրաքանչյուր սերվեր օգտագործվում է հերթով` ըստ իր քաշի: Սա ամենասահուն և արդար ալգորիթմն է, երբ սերվերների մշակման ժամանակը մնում է հավասարաչափ: Այս ալգորիթմը դինամիկ է, որը թույլ է տալիս արագորեն կարգավորել սերվերի քաշը:
- Leastconn: ընտրված է ամենաքիչ կապեր ունեցող սերվերը: Round robin-ը կատարվում է նույն բեռով սերվերների միջև: Այս ալգորիթմի օգտագործումը խորհուրդ է տրվում երկար նիստերի համար, ինչպիսիք են LDAP, SQL, TSE և այլն, բայց այն այնքան էլ հարմար չէ կարճ սեսիաների համար, ինչպիսին է HTTP-ն:
- Առաջին: Կապի հասանելի սլոտներով առաջին սերվերը ստանում է կապը: Սերվերները ընտրվում են ամենացածր թվային ID-ից մինչև ամենաբարձրը, որը կանխադրված է ֆերմայում սերվերի դիրքի համար: Երբ սերվերը հասնում է maxconn-ին, օգտագործվում է հաջորդ սերվերը:
- Source: Աղբյուրի IP հասցեն հաշված է և բաժանվում է գործող սերվերների ընդհանուր քաշի վրա՝ որոշելու համար, թե որ սերվերը կստանա հարցումը: Այսպիսով, հաճախորդի նույն IP հասցեն միշտ կգնա նույն սերվերին, մինչդեռ սերվերները մնում են նույնը:
Բեռի հավասարակշռության կարգավորում կիրառման մակարդակում (շերտ 7)
Մեկ այլ մատչելի տարբերակ է կարգավորել բեռի հավասարակշռիչը, որպեսզի գործարկվի կիրառական շերտում (շերտ 7), որն օգտակար է, երբ ձեր վեբ հավելվածի մասերը տեղակայված են տարբեր հոսթերների վրա: Դրան կարելի է հասնել կապի փոխանցումը խափանելով, օրինակ՝ URL-ով:
Բացեք HAProxy կազմաձևման ֆայլը տեքստային խմբագրիչի միջոցով.
sudo vi /etc/haproxy/haproxy.cfg
Այնուհետև կազմաձևեք առջևի և հետնամասի հատվածները ստորև բերված օրինակի համաձայն.
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 check
Frontend-ը հայտարարում է ACL կանոն, որը կոչվում է url_blog, որը վերաբերում է /blog-ով սկսվող ուղիներով բոլոր կապերին: Use_backend-ը սահմանում է, որ url_blog պայմանին համապատասխանող կապերը պետք է սպասարկվեն blog_back անունով backend-ի կողմից, իսկ մնացած բոլոր հարցումները մշակվում են լռելյայն հետին մասի կողմից:
Հետևի կողմում կոնֆիգուրացիան ստեղծում է սերվերների երկու խումբ՝ http_back, ինչպես նախկինում, և նորը, որը կոչվում է blog_back, որը կարգավորում է կապերը example.com/blog-ի հետ:
Պարամետրերը փոխելուց հետո պահեք ֆայլը և վերագործարկեք HAProxy-ը՝ օգտագործելով հետևյալ հրամանը.
sudo systemctl restart haproxy
Եթե գործարկման ընթացքում որևէ նախազգուշացում կամ սխալի հաղորդագրություն եք ստանում, ստուգեք դրանց կազմաձևումը և համոզվեք, որ ստեղծել եք բոլոր անհրաժեշտ ֆայլերն ու թղթապանակները, այնուհետև փորձեք նորից վերագործարկել:
Կարգավորման փորձարկում
Հենց որ HAProxy-ը կազմաձևվի և գործարկվի, բացեք բրաուզերում բեռի հավասարակշռող սերվերի հանրային IP հասցեն և ստուգեք, թե արդյոք ճիշտ եք միացված հետնամասին: Stats uri պարամետրը կազմաձևում ստեղծում է վիճակագրության էջ նշված հասցեում:
http://load_balancer_public_ip/haproxy?stats
Երբ դուք բեռնում եք վիճակագրության էջը, եթե ձեր բոլոր սերվերները կանաչ են, ապա կարգավորումը հաջողված է:
Վիճակագրության էջը պարունակում է որոշ օգտակար տեղեկություններ՝ ձեր վեբ հոսթներին հետևելու համար, ներառյալ՝ վերև/ներքևի ժամանակը և նիստերի քանակը: Եթե սերվերը նշված է կարմիրով, համոզվեք, որ սերվերը միացված է, և որ դուք կարող եք այն ping բալանսավորող սարքից:
Եթե ձեր բեռի հավասարակշռիչը չի արձագանքում, համոզվեք, որ HTTP կապերը արգելափակված չեն firewall-ի կողմից: Նաև համոզվեք, որ HAProxy-ն աշխատում է՝ օգտագործելով ստորև նշված հրամանը.
sudo systemctl status haproxy
Վիճակագրության էջը գաղտնաբառով պաշտպանելը
Այնուամենայնիվ, եթե վիճակագրության էջը պարզապես նշված է ճակատային մասում, ապա այն բաց է բոլորի համար, ինչը կարող է լավ գաղափար չլինել: Փոխարենը, դուք կարող եք նրան նշանակել հատուկ պորտի համար՝ ավելացնելով ստորև բերված օրինակը ձեր haproxy.cfg ֆայլի վերջում: Փոխարինել օգտագործողի անունը и Գաղտնաբառ ապահով բանի համար.
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Լսողների նոր խումբ ավելացնելուց հետո հեռացրեք հին stats uri հղումը ճակատային խմբից: Ավարտելուց հետո պահեք ֆայլը և վերագործարկեք HAProxy-ը:
sudo systemctl restart haproxy
Այնուհետև նորից բացեք բեռի հավասարակշռիչը նոր պորտի համարով և մուտք գործեք կոնֆիգուրացիայի ֆայլում նշած օգտվողի անունով և գաղտնաբառով:
http://load_balancer_public_ip:8181
Համոզվեք, որ ձեր բոլոր սերվերները դեռևս կանաչ են ցույց տալիս, այնուհետև բացեք միայն բեռնաչափի IP-ն՝ առանց որևէ պորտի համարի ձեր բրաուզերում:
http://load_balancer_public_ip/
Եթե ձեր հետևի սերվերների վրա ունեք վայրէջքների էջերի առնվազն որոշակի բազմազանություն, ապա կնկատեք, որ ամեն անգամ էջը վերաբեռնելիս պատասխան եք ստանում մեկ այլ հոսթից: Դուք կարող եք փորձել տարբեր հավասարակշռման ալգորիթմներ կազմաձևման բաժնում կամ ստուգել
Եզրակացություն՝ HAProxy Load Balancer
Շնորհավորում ենք ձեր HAProxy բեռի հավասարակշռիչը հաջողությամբ կարգավորելու կապակցությամբ: Նույնիսկ հիմնական բեռի հավասարակշռման կարգավորումների դեպքում դուք կարող եք զգալիորեն բարելավել ձեր վեբ հավելվածի աշխատանքը և հասանելիությունը: Այս ուղեցույցը պարզապես ներածություն է HAProxy-ով բեռների հավասարակշռման համար, որն ի վիճակի է շատ ավելին, քան այն, ինչ կարող է ներառվել արագ տեղադրման ուղեցույցում: Մենք խորհուրդ ենք տալիս փորձարկել տարբեր կոնֆիգուրացիաներ օգտագործելով
Օգտագործելով բազմաթիվ հոսթեր՝ ձեր վեբ ծառայությունը գլխամասային տարածքով պաշտպանելու համար, բեռի հավասարակշռողն ինքը դեռ կարող է ձախողման կետ ներկայացնել: Դուք կարող եք հետագայում բարելավել բարձր հասանելիությունը՝ տեղադրելով լողացող IP մի քանի բեռի հավասարակշռիչների միջև: Այս մասին ավելին կարող եք իմանալ մեր կայքում
Ավելին դասընթացի մասին
Source: www.habr.com