Tutorial ng HAProxy Beginner

Tutorial Ng Haproxy Beginner



Habang lumalaki ang iyong application, lumalabas ang pangangailangang magdagdag ng higit pang mga server upang mahawakan ang mas maraming trapiko. Kung mas maraming trapiko ang natatanggap ng iyong aplikasyon, mas mataas ang pagkakataong maharap ang downtime kapag nag-overload ang server. Gayunpaman, may mga tool tulad ng HAProxy na nagbibigay-daan sa iyong tukuyin kung paano pinangangasiwaan ang trapiko upang balansehin ang pagkarga sa iyong server. Ang ideya ay upang matiyak na walang server na ma-overload. Ang High Availability Proxy ay isang open-source na software na idinisenyo upang mag-alok ng maaasahang pagbalanse ng load habang kumikilos bilang isang reverse proxy para sa mga TCP/HTTP na application.

Gumagana ang HAProxy upang bawasan ang labis na karga ng anumang server, at nakakamit ito sa pamamagitan ng pamamahagi ng trapiko upang matiyak na walang labis na karga ng server, ngunit ang iba pang mga server ay magagamit. Ang isang platform tulad ng Instagram ay may napakalaking trapiko dahil sa mga kahilingan na ipinadala sa bawat segundo, kaya ang pangangailangan na gumamit ng HAProxy upang tukuyin ang frontend, backend, at mga tagapakinig para sa mga server upang maiwasan ang labis na karga.

Bakit Gumamit ng HAProxy

Bago matutunan ang tungkol sa pag-install at pagsasaayos ng HAProxy, dapat mong maunawaan kung bakit namin ito kailangan, sa kagandahang-loob ng mga tampok na inaalok nito. Ang mga sumusunod ay ang mga pangunahing tampok ng HAProxy:







  1. Pagbalanse ng Load – Sa HAProxy, maaari mong kumportable na ipamahagi ang trapiko sa iba't ibang mga server upang maiwasan ang labis na karga ng isang server. Sa ganoong paraan, hindi makakaharap ang iyong application ng anumang mga isyu sa downtime, at makakamit mo ang mas mabilis na pagtugon, pagiging maaasahan, at availability.
  2. Pag-log at Pagsubaybay – Makakakuha ka ng mga detalyadong monitoring log para sa iyong mga server upang makatulong sa mga problema sa pag-troubleshoot. Bukod pa rito, ang HAProxy ay may pahina ng mga istatistika kung saan makukuha mo ang real-time na analytics ng pagganap para sa iyong load balancer.
  3. Mga Pagsusuri sa Kalusugan - Maging ang iyong mga server ay nangangailangan ng pagsusuri sa kalusugan upang matukoy ang kanilang katayuan. Ang HAProxy ay madalas na nagpapatakbo ng mga pagsusuri sa kalusugan upang malaman ang katayuan ng iyong server upang mapahusay ang pagiging maaasahan nito. Kung may matukoy na hindi malusog na server, nire-reroute nito ang trapiko sa isa pang server.
  4. Reverse Proxy – Ang isang paraan ng pagpapahusay ng seguridad ay sa pamamagitan ng pagtatago ng panloob na istraktura. Sa kabutihang-palad, hinahayaan ka ng HAProxy na matanggap ang trapiko mula sa mga kliyente at iruta sila sa mga naaangkop na server. Sa ganoong paraan, ang iyong panloob na istraktura ay nakatago mula sa mata ng hacker.
  5. Mga ACL (Mga Listahan ng Access Control) – Sa HAProxy, maaari mong tukuyin kung paano dapat mangyari ang pagruruta ng trapiko gamit ang iba't ibang pamantayan gaya ng mga path, header, at IP address. Kaya, nagiging mas madali ang pagtukoy ng custom na lohika sa pagruruta para sa iyong trapiko.
  6. Pagwawakas ng SSL – Bilang default, ang SSL/TLS ay na-offload ng mga backend server na nagdudulot ng pinababang performance. Gayunpaman, sa HAProxy, ang pagwawakas ng SSL/TLS ay nangyayari sa load balancer, na nag-a-offload ng gawain sa mga backend server.

Pag-install ng HAProxy

Sa ngayon, tinukoy namin kung ano ang HAProxy at tinalakay ang mga tampok na inaalok nito upang matulungan kang maunawaan kung bakit mo ito kailangan para sa iyong aplikasyon. Ang susunod na hakbang ay upang maunawaan kung paano magsimula sa pamamagitan ng pag-install nito sa iyong system.



Kung nagpapatakbo ka ng Ubuntu o Debian system, maaaring i-install ang HAProxy mula sa APT package manager. Patakbuhin ang sumusunod na command:



$ sudo apt update
$ sudo apt install haproxy

Katulad nito, kung gumagamit ka ng mga RHEL-based na system o CentOS, available ang HAProxy mula sa 'yum' package manager. Patakbuhin ang sumusunod na mga utos:





$ sudo yum update
$ sudo yum i-install ang haproxy

Sa aming kaso, gumagamit kami ng Ubuntu. Kaya, mayroon kaming utos tulad ng sumusunod:



Pagkatapos ay maaari naming suriin ang bersyon nito upang matiyak na matagumpay naming na-install ang HAProxy.

$ haproxy --bersyon

Paano I-configure ang HAProxy

Sa naka-install na HAProxy, maaari mo na ngayong buksan ang config file nito ( / etc/haproxy/haproxy.cfg) at tukuyin ang mga setting na gusto mong gamitin para sa iyong load balancer.

Buksan ang config file gamit ang isang editor tulad ng nano o vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Makakakuha ka ng config file tulad ng isa sa sumusunod:

Mula sa config file, mapapansin mo na ito ay may dalawang pangunahing seksyon:

  1. pandaigdigan – Ito ang unang seksyon sa file at ang mga halaga nito ay hindi dapat baguhin. Naglalaman ito ng mga setting ng proseso na tumutukoy kung paano gumagana ang HAProxy. Halimbawa, tinutukoy nito ang mga detalye ng pag-log at mga grupo o user na maaaring magsagawa ng mga function ng HAProxy. Tandaan na sa config file na ito, maaari ka lamang magkaroon ng isang pandaigdigang seksyon, at ang mga halaga nito ay dapat manatiling hindi nagbabago.
  1. mga default - Ang seksyong ito ay naglalaman ng mga default na halaga para sa mga node. Halimbawa, maaari mong idagdag ang mga timeout o ang operational mode para sa iyong HAProxy sa seksyong ito. Bukod dito, posibleng magkaroon ng maraming default na seksyon sa iyong HAProxy config file.

Narito ang isang halimbawa ng seksyong 'Mga Default':

Sa ibinigay na larawan, tinutukoy ng mode kung paano hahawakan ng iyong HAProxy ang mga papasok na kahilingan. Maaari mong itakda ang mode sa HTTP o TCP. Para sa timeout, tinutukoy nito kung gaano katagal dapat maghintay ang HAProxy. Halimbawa, ang timeout connect ay ang oras upang maghintay bago gumawa ng backend na koneksyon. Ang timeout na kliyente ay kung gaano katagal dapat maghintay ang HAProxy para ipadala ng kliyente ang data. Ang timeout server ay ang oras upang maghintay para sa naaangkop na server na ipadala ang data na ipapasa sa kliyente. Kung paano mo tutukuyin ang mga default na halaga ay napakahalaga sa pagpapahusay ng oras ng pagtugon ng iyong aplikasyon.

May tatlo pang seksyon na dapat mong tukuyin para gumana ang iyong load balancer gaya ng inaasahan.

  1. frontend - Ang seksyong ito ay naglalaman ng mga IP address na nais mong gamitin ng iyong mga kliyente upang maitatag ang koneksyon.
  2. backend - Ipinapakita nito ang mga pool ng server na humahawak sa mga kahilingan tulad ng tinukoy sa seksyong frontend.
  3. makinig - Ito ay sunud-sunod na ginagamit kapag gusto mong iruta ang isang partikular na pangkat ng server. Pinagsasama ng seksyong ito ang mga gawain ng frontend at backend.

Magkaroon Tayo ng Halimbawa

Para sa halimbawang ito, tinukoy namin ang frontend upang gamitin ang localhost na may partikular na port. Susunod, itinatali namin ito sa backend na nagpapatakbo ng localhost at pagkatapos ay nagpapatakbo ng isang server ng Python upang subukan kung gumagana ang lahat tulad ng inaasahan para sa pagbabalanse ng pagkarga. Sundin ang ibinigay na mga hakbang.

Hakbang 1: Pag-configure sa Seksyon ng Mga Default

Sa seksyong 'Mga Default,' itinakda namin ang mga value na ibabahagi sa mga node. Para sa aming kaso, itinakda namin ang mode sa HTTP at itinakda ang mga timeout para sa kliyente at sa server. Maaari mong ayusin ang oras upang umangkop sa iyong mga pangangailangan.

Tandaan na ang lahat ng mga pag-edit na ito ay nasa configuration ng HAProxy na matatagpuan sa “/etc/haproxy/haproxy.cfg”. Kapag na-configure na ang seksyon ng mga default, tukuyin natin ang frontend.

Hakbang 2: Pag-configure ng Frontend Section

Sa frontend na seksyon, tinutukoy namin kung paano namin gustong ma-access ang application o website ng mga kliyente online. Ibinibigay namin ang mga IP address para sa application. Ngunit para sa kasong ito, nakikipagtulungan kami sa localhost. Samakatuwid, ang aming IP address ay ang fallback address na 127.0.0.1 at gusto naming tanggapin ang mga koneksyon sa pamamagitan ng port 80.

Dapat mong idagdag ang keyword na 'bind' na nagsisilbing tagapakinig para sa IP address sa tinukoy na port. Ang IP address at ang port na iyong tinukoy ay ang ginagamit ng load balancer upang tanggapin ang mga papasok na kahilingan.

Pagkatapos idagdag ang mga nakaraang linya sa iyong config file, dapat naming i-restart ang 'haproxy.service' gamit ang sumusunod na command:

$ sudo systemctl i-restart ang haproxy

Sa puntong ito, maaari naming subukang ipadala ang mga kahilingan sa aming website gamit ang command na 'curl'. Patakbuhin ang command at idagdag ang target na IP address.

$ curl

Dahil hindi pa namin natukoy kung paano magiging backend ng aming HAProxy, nakakakuha kami ng 503 na error tulad ng ipinapakita sa sumusunod. Bagama't natanggap ng load balancer ang mga kahilingan, walang server na kasalukuyang magagamit upang pangasiwaan ito, kaya ang error.

Hakbang 3: Pag-configure ng Backend

Ang seksyong backend ay kung saan namin tinutukoy ang mga server na hahawak ng anumang mga papasok na kahilingan. Ang load balancer ay tumutukoy sa seksyong ito upang malaman kung paano ito dapat ipamahagi ang mga papasok na kahilingan upang matiyak na walang server na ma-overload.

Ang 503 error na nakuha namin kanina ay dahil wala kaming anumang backend para pangasiwaan ang mga kahilingan. Magsimula tayo sa pamamagitan ng pagtukoy sa 'default_backend' upang mahawakan ang mga kahilingan. Tinukoy mo ito sa frontend na seksyon. Pinangalanan namin itong 'linux_backend' para sa kasong ito.

Susunod, lumikha ng isang backend na seksyon na may parehong pangalan tulad ng isa na tinukoy sa frontend na seksyon. Dapat mong gamitin ang keyword na 'server' na sinusundan ng pangalan ng iyong server at ang IP address nito. Ipinapakita ng sumusunod na larawan na tinukoy namin ang 'linuxhint1' server gamit ang IP 127.0.0.1 at port 8001:

Maaari kang magkaroon ng pool ng mga backend server, ngunit isa lang ang tinukoy namin para sa kasong ito. Tiyaking nai-save mo ang file. Dapat nating muling simulan ang serbisyo ng HAProxy.

Para subukan ang ginawang HAProxy load balancer, gumawa kami ng web server gamit ang Python3 para i-bind ang mga backend port gamit ang IP address na aming tinukoy. Pinapatakbo namin ang utos tulad ng sumusunod:

$ python3 -m http.server 8001 --bind 127.0.0.1

Tiyaking palitan mo ang mga halaga upang tumugma sa iyong IP address at sa port na nais mong itali. Pansinin kung paano nagagawa ang web server at nakikinig sa anumang mga papasok na kahilingan.

Sa isa pang terminal, gamitin natin ang command na 'curl' para magpadala ng kahilingan sa server.

$ curl

Hindi tulad ng kung paano namin nakuha ang 503 error kanina na nagpapakita na walang server na magagamit para pangasiwaan ang kahilingan, nakakakuha kami ng output sa pagkakataong ito na nagpapatunay na gumagana ang aming HAProxy load balancer.

Kung babalik ka sa nakaraang terminal kung saan ginawa namin ang web server, makikita mo na nakakuha kami ng tagumpay na output 200 na nagpapatunay na natanggap ng HAProxy ang kahilingan at pinangasiwaan ito sa pamamagitan ng pagpapadala nito sa tinukoy na server sa aming backend na seksyon.

Ganyan ka makakapagtakda ng simpleng HAProxy para sa iyong website o application.

Paggawa gamit ang Mga Panuntunan

Bago tayo magtapos sa baguhan na HAProxy na tutorial na ito, mabilis nating pag-usapan kung paano mo matutukoy ang mga patakaran para gabayan kung paano hahawakan ng load balancer ang mga kahilingan.

Kasunod ng parehong mga hakbang tulad ng dati, hayaan nating buo ang aming default na seksyon at tukuyin ang iba't ibang mga IP address sa frontend na seksyon. Binibinbin namin ang parehong IP address ngunit tinatanggap ang mga koneksyon mula sa iba't ibang port.

Bukod dito, mayroon kaming 'default_backend' at isa pang 'use_backend' na isang iba't ibang pool ng mga server na gagamitin namin depende sa port kung saan nanggagaling ang mga kahilingan. Sa sumusunod na pagsasaayos, ang lahat ng mga kahilingan sa pamamagitan ng port 81 ay pinangangasiwaan ng mga server sa 'Linux2_backend'. Ang anumang iba pang mga kahilingan ay pinangangasiwaan ng 'default_backend'.

Pagkatapos ay gagawin namin ang mga seksyon ng backend tulad ng tinukoy sa frontend. Tandaan na para sa bawat backend, mayroon kaming ibang server na tinukoy naming gagamitin para sa paghawak ng mga kahilingan.

Mabilis na i-restart ang serbisyo ng HAProxy.

Gawin natin ang web server gamit ang Python3 at itali ang mga kahilingan sa port 8002 na siyang kahaliling backend server.

Kapag nagpapadala ng mga kahilingan dito, tinutukoy namin ang port bilang 81 upang ma-trigger ang load balancer na ipadala ang mga kahilingan sa kahaliling server na hindi ang default.

Sa muling pagsusuri sa aming web server, makikita namin na nakakatanggap at nakakahawak ito ng mga kahilingan at nagbibigay ng 200 (tagumpay) na tugon.

Ganyan mo matutukoy ang mga panuntunan para gabayan kung paano tatanggap at pangasiwaan ng iyong load balancer ang mga kahilingan.

Konklusyon

Ang HAProxy ay isang mainam na solusyon para sa pagbabalanse ng load para sa mga application ng TCP/HTTP. Kapag na-install na, maaari mong kumportableng i-edit ang configuration file para tukuyin ang mga default, frontend, at backend na mga seksyon para gabayan kung paano gagana ang iyong load balancer. Ang post na ito ay gabay ng baguhan sa HAProxy. Nagsimula ito sa pamamagitan ng pagtukoy sa HAProxy at sa mga tampok nito. Susunod, naghukay ito sa pag-unawa kung paano i-configure ang HAProxy at nagtapos sa pamamagitan ng pagbibigay ng halimbawa kung paano gamitin ang HAProxy bilang isang load balancer.