Mít Load Balancer je vždy dobrou volbou pro zlepšení prostředí databáze. Může vám pomoci s přesměrováním aplikací na dostupné databázové uzly, distribucí provozu na více serverů za účelem zlepšení výkonu nebo dokonce s přepnutím při selhání v případě potřeby. Abyste věděli, co se děje s vaším provozem/systémem, musíte mít dobrý monitorovací systém, který bude monitorovat nejen vaše databázové uzly, ale také vaše vyvažovače zátěže, abyste mohli proaktivní nebo reaktivní opatření zmírnit jakýkoli současný nebo budoucí problém. Abyste mohli najít problém, musíte pochopit, co jednotlivé hodnoty, které vidíte, znamenají.
V tomto blogu vysvětlíme, co znamenají statistiky HAProxy a jak je přátelsky sledovat pomocí grafů a ClusterControl.
Co je HAProxy?
HAProxy je server proxy s otevřeným zdrojovým kódem, který lze použít k implementaci vysoké dostupnosti, vyvažování zátěže a proxy pro aplikace založené na TCP a HTTP.
Jako nástroj pro vyrovnávání zatížení HAProxy distribuuje provoz z jednoho zdroje do jednoho nebo více cílů a může pro tento úkol definovat specifická pravidla a/nebo protokoly. Pokud některý z cílů přestane reagovat, je označen jako offline a provoz je odeslán do zbývajících dostupných cílů.
Typy uzlů HAProxy
Když konfigurujete HAProxy Load Balancer, existují různé typy uzlů, které je třeba nakonfigurovat v závislosti na požadované funkci. Možnosti jsou Frontend, Backend a Listen.
Frontendové uzly
Když umístíte HAProxy jako reverzní proxy před vaše backend servery, frontendová sekce v konfiguračním souboru definuje IP adresy a porty, ke kterým se mohou klienti připojit. Požadavky vstupují do nástroje pro vyrovnávání zatížení a odpovědi jsou vráceny klientovi. Procházejí přes frontend.
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
Backend Uzly
Definuje skupinu serverů, které budou vyrovnány zatížením a přiřazeny ke zpracování požadavků v závislosti na zvolené politice. HAProxy odesílá požadavky na backend a poté přijímá odpověď od jednoho z aktivních serverů.
backend web_servers
balance roundrobin
cookie SERVERUSED insert indirect nocache
option httpchk HEAD /
default-server check maxconn 20
server server1 10.10.10.151:80 cookie server1
server server2 10.10.10.152:80 cookie server2
Uzly naslouchání
Kombinuje dva typy uzlů HAProxy, které jsme zmínili výše. Můžete preferovat čitelnost získanou oddělenými frontend a backend sekcemi, nebo možná budete chtít mít stručnější konfiguraci pomocí naslouchacího přístupu.
listen haproxy_10.10.10.143_3307_rw
bind *:3307
mode tcp
tcp-check connect port 9200
timeout client 10800s
timeout server 10800s
balance leastconn
option httpchk
default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
server 10.10.10.139 10.10.10.139:3306 check
server 10.10.10.140 10.10.10.140:3306 check backup
server 10.10.10.141 10.10.10.141:3306 check backup
Stránka statistik HAProxy
HAProxy vám umožňuje povolit stránku statistik s informacemi v reálném čase, abyste viděli, co se děje ve vašem Load Balanceru. Chcete-li povolit stránku statistik, stačí použít direktivu „stats enable“ ve vašem konfiguračním souboru HAProxy (/etc/haproxy/haproxy.cfg). Podívejme se na příklad:
userlist STATSUSERS
group admin users admin
user admin insecure-password admin
user stats insecure-password admin
listen admin_page
bind *:9600
mode http
stats enable
stats refresh 60s
stats uri /
acl AuthOkay_ReadOnly http_auth(STATSUSERS)
acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
stats http-request auth realm admin_page unless AuthOkay_ReadOnly
Řádek vazby nastavuje, jakou IP adresu a port použijete pro přístup na stránku statistik. Můžete také nakonfigurovat ověřování a interval aktualizace. Pokud přistupujete ke svému HAProxy uzlu pomocí zadaného portu (v příkladu 9600), pověření správce/administrátora, uvidíte něco takového:
Zde naleznete různé užitečné metriky pro sledování vašeho HAProxy uzlu.
Statistika HAProxy
Nyní se podívejme, jaké jsou tyto metriky. Protože význam závisí na kontextu, rozdělíme jej na frontend a backend.
Fronta
Backend
Tato část se vztahuje pouze na backendy a ukazuje, jak dlouho klienti čekají na zpřístupnění serveru. HAProxy dokáže zařadit připojení do fronty, když použijete nastavení maxconn.
Sloupec „Cur“ zobrazuje počet klientských připojení, která jsou aktuálně ve frontě a dosud nejsou přiřazena k serveru. Sloupec „Max“ zobrazuje nejvíce připojení, která kdy byla zařazena do fronty najednou. Sloupec „Limit“ zobrazuje maximální počet připojení, která mohou být zařazena do fronty, jak je definováno nastavením maxqueue na každé lince serveru v konfiguračním souboru.
Rychlost relace
Frontend
Popisuje rychlost, jakou se klienti připojují k HAProxy.
Sloupec „Cur“ zobrazuje aktuální rychlost, jakou jsou vytvářeny klientské relace nebo plně navázaná spojení mezi klientem a serverem. Pokud na toto pole najedete myší, stránka zobrazí následující metriky:
- Aktuální rychlost připojení:Rychlost, kterou se klienti připojují k HAProxy.
- Aktuální frekvence relací: Rychlost, jakou jsou vytvářeny relace, což jsou entity, které udržují stav připojení typu end-to-end.
- Aktuální četnost požadavků:Rychlost, s jakou jsou požadavky HTTP přijímány přes navázaná připojení.
Sloupec „Max“ zobrazuje nejvíce relací, které byly kdy současně použity. Pokud na toto pole najedete myší, stránka zobrazí následující metriky:
- Max. rychlost připojení:Nejvyšší rychlost, kterou se klienti připojovali k HAProxy.
- Max. rychlost relací:Nejvyšší rychlost, kterou klienti navazovali relace, což jsou entity, které udržují stav připojení typu end-to-end.
- Maximální rychlost požadavků:Nejvyšší rychlost, s jakou byly požadavky HTTP přijímány přes navázaná připojení.
Sloupec „Limit“ zobrazuje maximální počet relací za sekundu, které frontend přijme, jak je nastaveno nastavením relací s omezením rychlosti. Pokud je tento limit překročen, další připojení zůstávají nevyřízená v nevyřízeném protokolu soketu.
Backend
Tyto statistiky ukazují rychlost, jakou jsou navazována připojení k serveru.
Sloupec „Cur“ zobrazuje aktuální rychlost za sekundu, kterou jsou navazována připojení k serveru. Sloupec „Max“ ukazuje nejvyšší rychlost, jakou kdy byla navázána připojení k danému serveru. Sloupec „Limit“ zde není použit.
Relace
Frontend
Tato část počítá počet relací nebo úplných připojení mezi klienty a servery, které se používají na nástroji pro vyrovnávání zatížení.
Sloupec „Cur“ zobrazuje aktuální počet navázaných relací. Sloupec „Max“ zobrazuje nejvíce relací, které kdy byly současně navázány. Sloupec „Limit“ zobrazuje nejvíce simultánních relací, které jsou povoleny, jak je definováno nastavením maxconn v rozhraní frontend. Po dosažení tohoto limitu toto konkrétní rozhraní přestane přijímat nová připojení. Pokud není nastaveno maxconn, pak je „Limit“ stejný jako hodnota maxconn v globální části vaší konfigurace. Pokud to není nastaveno, je hodnota založena na vašem systému. Když umístíte ukazatel myši na sloupec „Celkem“, stránka zobrazí následující metriky:
- Cum. připojení:Kumulativní počet připojení navázaných od posledního opětovného načtení HAProxy.
- Cum. relace:Kumulativní počet relací (připojení typu end-to-end) vytvořených od posledního opětovného načtení.
- Cum. Požadavky HTTP:Kumulativní počet požadavků HTTP od posledního opětovného načtení.
- Odpovědi HTTP xxx:Celkový počet požadavků HTTP, které obdržely odpověď xxx.
- Komprimováno 2xx:Celkový počet odpovědí 2xx, které byly komprimovány, pokud byla komprese povolena. Zobrazuje také procento požadavků, které byly komprimovány.
- Ostatní odpovědi:Celkový počet požadavků HTTP, které obdržely odpověď, na kterou se nevztahují ostatní metriky.
- Zachycené požadavky:Celkový počet zachycených požadavků a přesměrovaných na stránku HAProxy Stats.
Sloupce „LbTot“ a „Last“ se v této části nepoužívají.
Backend
Tato část zobrazuje počet aktuálních připojení k libovolnému z aktivních serverů.
Sloupec „Cur“ uvádí počet aktivních připojení k serveru. Sloupec „Max“ zobrazuje nejvíce spojení, která kdy byla současně navázána k danému serveru. Sloupec „Limit“ zobrazuje maximální počet připojení povolených pro server, jak je nastaveno parametrem maxconn na lince serveru.
Řádek backendu zobrazuje hodnotu fullconn pro „Limit“, nebo pokud není nastaven, používá následující vzorec:Součet hodnot limitu relací pro rozhraní, která směřují k tomuto backendu, děleno 10. Sloupec „Celkem“ zobrazuje kumulativní počet připojení, která daný server využila. Když na toto pole umístíte ukazatel myši, stránka zobrazí následující metriky:
- Cum. sessions:Kumulativní počet připojení vytvořených k tomuto serveru.
- Cum. HTTP odpovědi:Kumulativní počet HTTP odpovědí přijatých z tohoto serveru.
- Odpovědi HTTP xxx:Celkový počet odpovědí HTTP xxx z tohoto serveru.
- Ostatní odpovědi:Celkový počet odpovědí HTTP, které nepokrývají ostatní metriky.
- Doba fronty:Doba v milisekundách, po kterou připojení zůstalo ve frontě při čekání na slot pro připojení k serveru, v průměru za posledních 1024 úspěšných připojení.
- Čas připojení:Doba v milisekundách, kterou trvalo úspěšné připojení k serveru, průměr za posledních 1024 úspěšných připojení.
- Doba odezvy:Doba odezvy serveru v milisekundách, průměr za posledních 1024 úspěšných připojení.
- Celkový čas:Celková doba relace v milisekundách, průměr za posledních 1024 úspěšných připojení.
Sloupec „LbTot“ zobrazuje celkový počet případů, kdy byl daný server vybrán pro obsluhu požadavku. To může být způsobeno normálním vyrovnáváním zátěže nebo opětovným odesláním ze serveru, který selhal. Sloupec „Poslední“ zobrazuje čas od posledního přijetí připojení.
Bajtů
Frontend
Tato část zobrazuje kumulativní množství dat odeslaných a přijatých mezi HAProxy a klienty. Sloupec „In“ zobrazuje celkový počet přijatých bajtů a sloupec „Out“ zobrazuje celkový počet odeslaných bajtů.
Backend
Tato část zobrazuje množství dat odeslaných a přijatých mezi HAProxy a serverem. Sloupec „In“ ukazuje počet bajtů odeslaných na server. Sloupec „Out“ zobrazuje počet bajtů přijatých zpět.
Zamítnuto
Zobrazuje počet žádostí a odpovědí, které byly zamítnuty z důvodu bezpečnostních problémů v sekci Frontend i Backend.
Frontend
Sloupec „Požadavek“ zobrazuje počet požadavků, které byly zamítnuty kvůli konfiguračním direktivám (zamítnutí požadavku http, odmítnutí požadavku http atd.) umístěných v části Frontend nebo Listen.
Sloupec „Resp“ zobrazuje počet odpovědí, které byly odmítnuty direktivou http-response deny, která byla umístěna v rozhraní frontend nebo listen.
Backend
Sloupec „Požadavek“ se vztahuje pouze na backend jako celek. Ukazuje počet požadavků, které byly zamítnuty konfiguračními direktivami (http-request deny, http-request zamítnutí atd.) v backendu.
Sloupec „Resp“ zobrazuje počet odpovědí, které byly odmítnuty pro jakýkoli daný server kvůli konfiguračním direktivám http-response deny nebo tcp-response zamítnutí obsahu v backendu.
Chyby
Frontend
Je zde použit pouze sloupec „Požadavek“. Zobrazuje počet požadavků, u kterých došlo k chybě.
Možné příčiny zahrnují:
- Předčasné ukončení ze strany klienta
- Chyba čtení od klienta
- Klientovi vypršel časový limit
- Klient ukončil připojení
- Klient odeslal chybný požadavek
- Požadavek byl vyřízen
Backend
Ukazuje počet chyb souvisejících s komunikací s backendovým serverem.
Sloupec „Požadavek“ není použit. Sloupec „Conn“ zobrazuje počet požadavků, u kterých došlo k chybě při pokusu o připojení k serveru. Sloupec „Resp“ zobrazuje chyby, ke kterým došlo při získávání odpovědi.
Upozornění
Backend
Pouze pro backendy. Tato sekce zobrazuje počet opakování a opětovného odeslání. Pokud jste do backendu přidali direktivu opakování, pak sloupec „Retr“ zobrazuje celkový počet opakování připojení. Sloupec „Redis“ ukazuje, kolikrát se HAProxy nepodařilo navázat spojení se serverem a znovu jej odeslat na jiný server. To vyžaduje, abyste přidali direktivu opce redispatch.
Server
Frontend
Jediné pole z této části, které se vztahuje na rozhraní frontend, je pole Stav. Když je Stav OTEVŘENO, frontend funguje normálně a je připraven přijímat provoz.
Backend
Tato část zobrazuje podrobnosti o stavu, zdraví a váze každého serveru. Sloupec „Stav“ zobrazuje, zda je server aktuálně aktivní a jak dlouho. Může zobrazovat kterýkoli z následujících stavů:
- NAHORU:Server se hlásí jako v pořádku.
- DOLŮ:Server hlásí, že není v pořádku a nemůže přijímat požadavky.
- NOLB:Do backendu jste přidali http-check disable-on-404 a adresa URL s kontrolou stavu vrátila odpověď HTTP 404.
- MAINT:Server byl deaktivován nebo uveden do režimu údržby.
- DRAIN:Server byl uveden do režimu vypouštění.
- bez kontroly:Kontroly stavu nejsou pro tento server povoleny.
Sloupec „LastChk“ zobrazuje hodnotu jako L7OK/200 v Xms. Tato hodnota znamená, že byla provedena kontrola stavu vrstvy 7; vrátil odpověď HTTP 200 OK a učinil tak během X milisekund.
Sloupec „Hmotnost“ zobrazuje podíl provozu, který přijme, jak je nastaveno parametrem váhy na řádku serveru. Sloupec „Act“ ukazuje, zda je server aktivní (označený Y) nebo zálohovaný (označený –). Sloupec „Bck“ ukazuje, zda je server záložní (označený Y) nebo aktivní (označený –).
Sloupec „Chk“ zobrazuje počet neúspěšných kontrol stavu. Sloupec „Dwn“ zobrazuje počet přechodů z NAHORU do DOLŮ. Sloupec „Dwntme“ ukazuje, jak dlouho byl server mimo provoz.
Pokud jste na serverovou linku přidali parametr pomalého startu, pak když tento server deaktivujete a později povolíte, sloupec „Thrtle“ zobrazuje procento provozu, který server přijme. Procento se během nastaveného období postupně zvýší na 100 %.
Tyto informace jsou založeny na příspěvku na blogu HAProxy, na který se můžete podívat a získat podrobnější informace.
HAProxy na ClusterControl
Kromě nasazení a správy poskytuje ClusterControl také pohled na statistiky HAProxy a panely v reálném čase z uživatelského rozhraní. Z ClusterControl máte přístup na stránku statistik na ClusterControl -> Vybrat Cluster -> Nodes -> vyberte uzel HAProxy podobný snímku obrazovky níže:
Serveru můžete povolit/zakázat vyrovnávání zátěže zaškrtnutím/zrušením zaškrtnutí zaškrtávací políčko ve sloupci „Povoleno“. To je velmi užitečné, když chcete, aby vaše aplikace záměrně vynechávala připojení k serveru, např. z důvodu údržby nebo testování a ověřování nových konfiguračních parametrů nebo optimalizovaných dotazů.
Své HAProxy servery můžete také sledovat z ClusterControl zaškrtnutím sekce Dashboard.
Chcete-li to povolit, stačí přejít do ClusterControl -> Vyberte Cluster -> Řídicí panely -> Povolit monitorování založené na agentech. Tím se na každý uzel nasadí agent, který získá všechny informace pro generování odpovídajících grafů.
Zde uvidíte nejen všechny potřebné metriky pro monitorování uzlu HAProxy, ale také pro monitorování celého prostředí pomocí různých řídicích panelů.
Závěr
HAProxy je dobrý a výkonný nástroj pro zlepšení výkonu databáze a aplikací. Je také užitečné přidat do vašeho prostředí High Availability a Failover. Abyste věděli, co se děje ve vašem uzlu HAProxy, musíte porozumět metrikám, které jsou sledovány na stránce statistik, nebo dokonce toto sledování vylepšit přidáním řídicího panelu, aby bylo přátelštější.
V tomto blogu jsme vysvětlili každou metriku uvedenou na stránce statistik HAProxy a také jsme ukázali, jak to vypadá na ClusterControl, kde máte přístup jak ke statistikám, tak k sekcím HAProxy panelů ze stejného systému.