Наличието на Load Balancer винаги е добра опция за подобряване на средата на вашата база данни. Той може да ви помогне при пренасочване на приложения към наличните възли на базата данни, да разпределите трафика между множество сървъри, за да подобрите производителността, или дори да преминете при отказ, когато е необходимо. За да знаете какво се случва с вашия трафик/система, трябва да имате добра система за наблюдение, която да наблюдава не само вашите възли на базата данни, но и вашите Load Balancers, за да предприемете проактивни или реактивни действия за смекчаване на всеки настоящ или бъдещ проблем. За да можете да намерите проблем, трябва да разберете какво означава всяка стойност, която виждате.
В този блог ще обясним какво означават статистическите данни на HAProxy и как да ги наблюдаваме по приятелски начин с помощта на графики и ClusterControl.
Какво е HAProxy?
HAProxy е прокси сървър с отворен код, който може да се използва за внедряване на висока наличност, балансиране на натоварването и прокси сървър за TCP и HTTP базирани приложения.
Като средство за балансиране на натоварването, HAProxy разпределя трафик от един източник към една или повече дестинации и може да дефинира специфични правила и/или протоколи за тази задача. Ако някоя от дестинациите спре да отговаря, тя се маркира като офлайн и трафикът се изпраща към останалите налични дестинации.
Типове на HAProxy възли
Когато конфигурирате своя HAProxy Load Balancer, има различни типове възли за конфигуриране в зависимост от функционалността, която искате. Опциите са Frontend, Backend и Listen.
Фронтендни възли
Когато поставите HAProxy като обратен прокси пред сървърите си, фронтенд раздел в конфигурационния файл дефинира IP адресите и портовете, към които клиентите могат да се свързват. Заявките влизат в балансира на натоварването и отговорите се връщат на клиента. Те преминават през интерфейса.
frontend site1.com
bind 10.10.10.150:80
use_backend api_servers if { path_beg /api/ }
default_backend web_servers
Задни възли
Той дефинира група сървъри, които ще бъдат балансирани на натоварването и ще бъдат назначени за обработка на заявки, в зависимост от избраната политика. HAProxy изпраща заявки до бекенд и след това получава отговор от един от активните сървъри.
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
Възли за слушане
Той комбинира двата типа възли HAProxy, които споменахме по-горе. Може да предпочетете четливостта, получена чрез отделни секции на предния и задния край, или може би искате да имате по-сбита конфигурация, като използвате подхода за слушане.
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
Страница със статистика на HAProxy
HAProxy ви позволява да активирате страница със статистика с информация в реално време, за да видите какво се случва във вашия Load Balancer. За да активирате страницата със статистически данни, просто трябва да използвате директивата “stats enable” във вашия HAProxy конфигурационен файл (/etc/haproxy/haproxy.cfg). Нека видим пример:
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
Линията за свързване задава кой IP адрес и порт ще използвате за достъп до страницата със статистика. Можете също да конфигурирате удостоверяване и период на опресняване. Ако осъществите достъп до вашия HAProxy възел с помощта на посочения порт (9600 в примера), идентификационни данни за администратор/администратор, ще видите нещо подобно:
Тук ще намерите различни полезни показатели за наблюдение на вашия HAProxy възел.
HAProxy статистика
Сега нека да видим какви са тези показатели. Тъй като значението зависи от контекста, ще го разделим на Frontend и Backend.
Опашка
Бекенд
Този раздел се отнася само за бекенд и показва колко дълго клиентите чакат сървърът да стане достъпен. HAProxy може да поставя връзки в опашка, когато използвате настройката maxconn.
Колоната „Cur“ показва броя клиентски връзки, които в момента са на опашка и все още не са присвоени на сървър. Колоната „Макс“ показва най-много връзки, които някога са били на опашка наведнъж. Колоната „Limit“ показва максималния брой връзки, които могат да бъдат поставени на опашка, както е определено от настройката за максимална опашка на всеки ред на сървъра в конфигурационния файл.
Скорост на сесията
Фронтенд
Описва скоростта, с която клиентите се свързват с HAProxy.
Колоната „Cur“ показва текущата скорост, с която се създават клиентски сесии или напълно установени връзки между клиент и сървър. Ако задържите курсора на мишката върху това поле, страницата показва следните показатели:
- Текуща скорост на свързване:Скоростта, с която клиентите се свързват с HAProxy.
- Скорост на текущата сесия: Скоростта, с която се създават сесиите, които са обекти, които поддържат състоянието на връзка от край до край.
- Текуща скорост на заявки:Скоростта, с която HTTP заявките се получават през установени връзки.
Колоната „Макс“ показва най-много сесии, които някога са били използвани едновременно. Ако задържите курсора на мишката върху това поле, страницата показва следните показатели:
- Максимална скорост на свързване:Най-високата скорост, с която клиентите са се свързвали с HAProxy.
- Максимална честота на сесиите:Най-високата скорост, с която клиентите са установили сесии, които са обекти, които поддържат състоянието на връзка от край до край.
- Максимален процент на заявки:Най-високата честота, с която HTTP заявките са получени през установени връзки.
Колоната „Ограничение“ показва максималния брой сесии в секунда, които интерфейсът ще приеме, както е зададено от настройката на сесиите с ограничение на скоростта. Ако това ограничение е надвишено, допълнителните връзки се запазват в изчакване в изоставането на сокета.
Бекенд
Тези статистически данни показват скоростта, с която се осъществяват връзки към сървър.
Колоната „Cur“ показва текущата скорост в секунда, с която се установяват връзки със сървъра. Колоната „Макс“ показва най-високата скорост, с която някога са били установени връзки към дадения сървър. Колоната „Limit“ не се използва тук.
Сесии
Фронтенд
Този раздел отчита броя на сесиите или пълните връзки клиент-сървър, използвани в балансира на натоварването.
Колоната „Cur“ показва текущия брой установени сесии. Колоната „Макс“ показва най-много сесии, които някога са били създавани едновременно. Колоната „Limit“ показва най-едновременните сесии, които са разрешени, както е дефинирано от настройката maxconn във интерфейса. Този конкретен интерфейс ще спре да приема нови връзки, когато това ограничение бъде достигнато. Ако maxconn не е зададен, тогава „Limit“ е същото като стойността на maxconn в глобалната секция на вашата конфигурация. Ако това не е зададено, стойността се базира на вашата система. Когато задържите курсора на мишката над колоната „Общо“, страницата показва следните показатели:
- Свършват. връзки:Кумулативен брой връзки, установени след последното презареждане на HAProxy.
- Свършват. сесии:Кумулативен брой сесии (връзки от край до край), установени след последното презареждане.
- Свършват. HTTP заявки:Кумулативен брой HTTP заявки след последното презареждане.
- HTTP xxx отговори:Общият брой HTTP заявки, получили xxx отговор.
- Компресиран 2xx:Общият брой 2xx отговори, които са били компресирани, ако компресирането е било активирано. Той също така показва процента на заявките, които са били компресирани.
- Други отговори:Общият брой HTTP заявки, получили отговор, който не е обхванат от другите показатели.
- Прихванати заявки:Общият брой заявки, прихванати и пренасочени към страницата HAProxy Stats.
Колоните „LbTot“ и „Last“ не се използват в този раздел.
Бекенд
Този раздел показва броя на текущите връзки към някой от активните сървъри.
Колоната „Cur“ изброява броя на активните връзки към сървъра. Колоната „Макс“ показва най-много връзки, които някога са били едновременно установени към дадения сървър. Колоната „Limit“ показва максималния брой разрешени връзки за сървър, зададен от параметъра maxconn на сървърна линия.
Редът на задния край показва стойността на fullconn за „Limit“ или, ако не е зададена, използва следната формула:Сума от стойностите на ограниченията на сесиите за интерфейсите, които насочват към този бекенд, разделена на 10. Колоната „Общо“ показва кумулативния брой връзки, които са използвали дадения сървър. Когато задържите курсора на мишката върху това поле, страницата показва следните показатели:
- Свършват. сесии:Кумулативен брой връзки, установени към този сървър.
- Свършват. HTTP отговори:Кумулативен брой HTTP отговори, получени от този сървър.
- HTTP xxx отговори:Общият брой HTTP xxx отговори от този сървър.
- Други отговори:Общият брой HTTP отговори, които не са обхванати от другите показатели.
- Време на опашката:Времето в милисекунди, през което дадена връзка е стояла на опашка, докато чака слот за връзка със сървъра, усреднено за последните 1024 успешни връзки.
- Време за свързване:Времето в милисекунди, необходимо за успешно свързване със сървъра, осреднено за последните 1024 успешни връзки.
- Време за реакция:Времето за реакция на сървъра в милисекунди, осреднено за последните 1024 успешни връзки.
- Общо време:Общото време на сесията в милисекунди, осреднено за последните 1024 успешни връзки.
Колоната „LbTot“ показва общия брой пъти, когато даден сървър е бил избран да обслужва заявка. Това може да се дължи на нормално балансиране на натоварването или поради повторно изпращане от неуспешен сървър. Колоната „Последна“ показва времето от получаване на последната връзка.
Байтове
Фронтенд
Този раздел показва кумулативното количество данни, изпратени и получени между HAProxy и клиенти. Колоната „In“ показва общия брой получени байтове, а колоната „Out“ показва общия брой изпратени байтове.
Бекенд
Този раздел показва количеството данни, изпратени и получени между HAProxy и сървъра. Колоната „In“ показва броя байтове, изпратени до сървъра. Колоната „Изход“ показва броя на върнатите байтове.
Отказано
Той показва броя на заявките и отговорите, които са били отхвърлени поради опасения за сигурността както във Frontend, така и в Backend секциите.
Фронтенд
Колоната „Req“ показва броя на заявките, които са били отказани поради директиви за конфигурация (http-request deny, http-request reject и т.н.), поставени в секцията Frontend или Listen.
Колоната „Resp“ показва броя на отговорите, които са били отказани от директива за отказ на http-response, която е била поставена във интерфейс или слушане.
Бекенд
Колоната „Req“ се отнася само за бекенда като цяло. Показва броя на заявките, които са били отхвърлени от конфигурационните директиви (отхвърляне на http-заявка, отхвърляне на http-заявка и т.н.) в бекенда.
Колоната „Resp“ показва броя на отговорите, които са били отхвърлени за даден сървър поради директиви за конфигурация за отхвърляне на http-response или tcp-response съдържание в бекенда.
Грешки
Фронтенд
Тук се използва само колоната „Req“. Показва броя на заявките, при които е възникнала грешка.
Възможните причини включват:
- Предсрочно прекратяване от клиента
- Грешка при четене от клиента
- Времето за изчакване на клиента изтече
- Клиентът затвори връзката
- Клиентът изпрати неправилно оформена заявка
- Заявката беше пропусната
Бекенд
Показва броя на грешките, свързани с комуникацията с бекенд сървър.
Колоната „Req“ не се използва. Колоната „Conn“ показва броя на заявките, които са срещнали грешка при опит за свързване със сървъра. Колоната „Resp“ показва грешки, възникнали при получаване на отговора.
Предупреждения
Бекенд
Само за бекендове. Този раздел показва броя на повторните опити и повторното изпращане. Ако сте добавили директива за повторни опити към своя бекенд, тогава колоната „Retr“ показва общия брой опити за повторно свързване. Колоната „Redis“ показва колко пъти HAProxy не е успял да установи връзка със сървър и го е препратил към друг сървър. Това изисква да сте добавили директива за преизпращане на опция.
Сървър
Фронтенд
Единственото поле от този раздел, което се отнася за интерфейс, е полето Status. Когато състоянието е ОТВОРЕНО, интерфейсът работи нормално и е готов за приемане на трафик.
Бекенд
Този раздел показва подробности за състоянието, здравето и теглото на всеки сървър. Колоната „Състояние“ показва дали сървърът е активен в момента и за колко време. Може да показва някое от следните състояния:
- ГОРЕ:Сървърът се отчита като здрав.
- ДОЛУ:Сървърът се отчита като нездравословен и не може да получава заявки.
- NOLB:Добавихте http-check disable-on-404 към бекенда и провереният URL адрес е върнал HTTP 404 отговор.
- ПОДДРЪЖКА:Сървърът е деактивиран или поставен в режим на поддръжка.
- ИЗЧИСВАНЕ:Сървърът е поставен в режим на източване.
- без проверка:Проверките на състоянието не са разрешени за този сървър.
Колоната „LastChk“ показва стойност като L7OK/200 в Xms. Тази стойност означава, че е извършена здравна проверка на ниво 7; той върна HTTP 200 OK отговор и го направи в рамките на X милисекунди.
Колоната „Wght“ показва пропорцията на трафика, който ще приеме, както е зададено от параметъра тегло на линията на сървъра. Колоната „Действие“ показва дали сървърът е активен (маркиран с Y) или резервен (маркиран с -). Колоната „Bck“ показва дали сървърът е резервен (маркиран с Y) или активен (маркиран с -).
Колоната „Chk“ показва броя на неуспешните проверки на състоянието. Колоната „Надолу“ показва броя на преходите от НАГОРЕ към НАДОЛУ. Колоната „Dwntme“ показва колко време сървърът не е работил.
Ако сте добавили параметър slowstart към сървърна линия, тогава когато деактивирате и по-късно активирате този сървър, колоната „Thrtle“ показва процента трафик, който сървърът ще приеме. Процентът постепенно ще се повиши до 100% през периода, който сте задали.
Тази информация се базира на публикация в блога на HAProxy, която можете да се обърнете за по-подробна информация.
HAProxy на ClusterControl
Освен внедряването и управлението, ClusterControl също така предоставя поглед върху статистическите данни на HAProxy и таблата за управление в реално време от потребителския интерфейс. От ClusterControl можете да получите достъп до страницата със статистика на ClusterControl -> Изберете клъстер -> Възли -> изберете възел HAProxy, подобен на екранната снимка по-долу:
Можете да активирате/деактивирате сървър от балансирането на натоварването, като поставите отметка/отметнете бутона за отметка под колоната „Активирано“. Това е много полезно, когато искате приложението ви умишлено да пропусне свързването със сървър, например за поддръжка или за тестване и валидиране на нови конфигурационни параметри или оптимизирани заявки.
Можете също да наблюдавате вашите HAProxy сървъри от ClusterControl, като проверите секцията Табло за управление.
За да го активирате, просто трябва да отидете на ClusterControl -> Изберете Cluster -> Табла за управление -> Активиране на мониторинг, базиран на агенти. Това ще разположи агент на всеки възел, за да получи цялата информация за генериране на съответните графики.
Тук няма да видите само всички необходими показатели за наблюдение на HAProxy възела, но и за наблюдение на цялата среда с помощта на различните табла за управление.
Заключение
HAProxy е добър и мощен инструмент за подобряване на ефективността на вашата база данни и приложения. Също така е полезно да добавите висока наличност и отказ към вашата среда. За да знаете какво се случва във вашия HAProxy възел, трябва да разберете показателите, които се наблюдават в страницата със статистика, или дори да подобрите това наблюдение, като добавите табло за управление, за да го направите по-удобно.
В този блог сме обяснили всеки показател, споменат на страницата със статистически данни на HAProxy, и също така показахме как изглежда в ClusterControl, където можете да получите достъп както до статистическите данни, така и до секциите на HAProxy за управление от една и съща система.