Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie statystyk HAProxy dla MySQL i PostgreSQL

Posiadanie Load Balancera jest zawsze dobrą opcją na ulepszenie środowiska bazy danych. Może pomóc w przekierowywaniu aplikacji do dostępnych węzłów baz danych, rozprowadzaniu ruchu na wielu serwerach w celu poprawy wydajności, a nawet przełączaniu awaryjnym, gdy jest to wymagane. Aby wiedzieć, co dzieje się z ruchem/systemem, musisz mieć dobry system monitorowania, który monitoruje nie tylko węzły bazy danych, ale także Load Balancery, aby podejmować proaktywne lub reaktywne działania w celu złagodzenia wszelkich bieżących lub przyszłych problemów. Aby móc znaleźć problem, musisz zrozumieć, co oznacza każda wartość, którą widzisz.

W tym blogu wyjaśnimy, co oznaczają statystyki HAProxy i jak je monitorować w przyjazny sposób za pomocą wykresów i ClusterControl.

Co to jest HAProxy?

HAProxy to proxy typu open source, którego można używać do implementacji wysokiej dostępności, równoważenia obciążenia i proxy dla aplikacji opartych na protokołach TCP i HTTP.

Jako system równoważenia obciążenia, HAProxy dystrybuuje ruch z jednego źródła do jednego lub więcej miejsc docelowych i może zdefiniować określone reguły i/lub protokoły dla tego zadania. Jeśli którykolwiek z miejsc docelowych przestanie odpowiadać, jest oznaczany jako offline, a ruch jest przesyłany do pozostałych dostępnych miejsc docelowych.

Typy węzłów HAProxy

Podczas konfigurowania systemu równoważenia obciążenia HAProxy istnieją różne typy węzłów do skonfigurowania w zależności od żądanej funkcjonalności. Dostępne opcje to Frontend, Backend i Listen.

Węzły czołowe

Gdy umieścisz HAProxy jako odwrotny serwer proxy przed serwerami zaplecza, sekcja frontendu w pliku konfiguracyjnym definiuje adresy IP i porty, z którymi mogą się łączyć klienci. Żądania wchodzą do systemu równoważenia obciążenia, a odpowiedzi są zwracane do klienta. Przechodzą przez frontend.

frontend site1.com

     bind 10.10.10.150:80

     use_backend api_servers if { path_beg /api/ }

     default_backend web_servers

Węzły zaplecza

Definiuje grupę serwerów, które będą równoważone obciążeniem i przypisane do obsługi żądań, w zależności od wybranej polityki. HAProxy wysyła żądania do zaplecza, a następnie otrzymuje odpowiedź od jednego z aktywnych serwerów.

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

Nasłuchuj węzłów

Łączy dwa typy węzłów HAProxy, o których wspomnieliśmy powyżej. Możesz preferować czytelność uzyskaną dzięki oddzielnym sekcjom frontendu i backendu, a może chcesz mieć bardziej zwięzłą konfigurację, stosując podejście słuchania.

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

Strona statystyk HAProxy

HAProxy umożliwia włączenie strony statystyk z informacjami w czasie rzeczywistym, aby zobaczyć, co dzieje się w Load Balancerze. Aby włączyć stronę statystyk, wystarczy użyć dyrektywy „stats enable” w pliku konfiguracyjnym HAProxy (/etc/haproxy/haproxy.cfg). Zobaczmy przykład:

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

Wiersz powiązania określa, którego adresu IP i portu użyjesz, aby uzyskać dostęp do strony statystyk. Możesz także skonfigurować uwierzytelnianie i okres odświeżania. Jeśli uzyskasz dostęp do węzła HAProxy przy użyciu określonego portu (w przykładzie 9600), poświadczeń administratora/administratora, zobaczysz coś takiego:

Tutaj znajdziesz różne przydatne dane do monitorowania węzła HAProxy.

Statystyki HAProxy

Teraz zobaczmy, jakie są te dane. Ponieważ znaczenie zależy od kontekstu, podzielimy je na Frontend i Backend.

Kolejka

Zaplecze

Ta sekcja dotyczy tylko zaplecza i pokazuje, jak długo klienci czekają na udostępnienie serwera. HAProxy może kolejkować połączenia, gdy używasz ustawienia maxconn.

Kolumna „Cur” pokazuje liczbę połączeń klientów, które są aktualnie w kolejce i nie są jeszcze przypisane do serwera. Kolumna „Max” pokazuje najwięcej połączeń, które kiedykolwiek były w kolejce jednocześnie. Kolumna „Limit” pokazuje maksymalną liczbę połączeń, które mogą być umieszczane w kolejce, zgodnie z ustawieniem maxqueue w każdym wierszu serwera w pliku konfiguracyjnym.

Częstotliwość sesji

Front

Opisuje szybkość, z jaką klienci łączą się z HAProxy.

Kolumna „Cur” pokazuje bieżącą szybkość, z jaką tworzone są sesje klienta lub w pełni ustanowione połączenia między klientem a serwerem. Jeśli najedziesz kursorem myszy na to pole, strona wyświetli następujące dane:

  • Aktualna szybkość połączenia:szybkość, z jaką klienci łączą się z HAProxy.
  • Częstotliwość bieżącej sesji:  Szybkość, z jaką tworzone są sesje, które są jednostkami utrzymującymi stan połączenia typu end-to-end.
  • Aktualna szybkość żądań:Szybkość, z jaką żądania HTTP są odbierane przez ustanowione połączenia.

Kolumna „Max” pokazuje większość sesji, które były używane jednocześnie. Jeśli najedziesz kursorem myszy na to pole, strona wyświetli następujące dane:

  • Maksymalna szybkość połączenia:najwyższa szybkość, z jaką klienci łączyli się z HAProxy.
  • Maksymalna szybkość sesji:najwyższa szybkość, z jaką klienci ustanawiają sesje, czyli jednostki, które utrzymują stan połączenia typu end-to-end.
  • Maksymalna szybkość żądań:najwyższa szybkość, z jaką żądania HTTP zostały odebrane przez ustanowione połączenia.

Kolumna „Limit” pokazuje maksymalną liczbę sesji na sekundę, jaką zaakceptuje frontend, zgodnie z ustawieniem sesji limitu szybkości. Jeśli ten limit zostanie przekroczony, dodatkowe połączenia są utrzymywane w oczekiwaniu na zaległości gniazda.

Zaplecze

Te statystyki pokazują szybkość, z jaką nawiązywane są połączenia z serwerem.

Kolumna „Cur” pokazuje aktualną prędkość na sekundę, z jaką nawiązywane są połączenia z serwerem. Kolumna „Max” pokazuje najwyższą szybkość, z jaką kiedykolwiek zostały nawiązane połączenia z danym serwerem. Kolumna „Limit” nie jest tutaj używana.

Sesje

Front

Ta sekcja zlicza liczbę sesji lub pełnych połączeń klient-serwer używanych w systemie równoważenia obciążenia.

Kolumna „Cur” pokazuje bieżącą liczbę ustanowionych sesji. Kolumna „Max” pokazuje większość sesji, które kiedykolwiek zostały ustanowione jednocześnie. Kolumna „Limit” pokazuje największą liczbę dozwolonych jednoczesnych sesji, zgodnie z definicją w ustawieniu maxconn w interfejsie użytkownika. Ten konkretny frontend przestanie akceptować nowe połączenia po osiągnięciu tego limitu. Jeśli maxconn nie jest ustawione, „Limit” jest tym samym, co wartość maxconn w globalnej sekcji konfiguracji. Jeśli to nie jest ustawione, wartość jest oparta na twoim systemie. Gdy najedziesz kursorem na kolumnę „Łącznie”, strona wyświetli następujące dane:

  • Wytrysk połączenia:Łączna liczba połączeń nawiązanych od ostatniego przeładowania HAProxy.
  • Wytrysk sesje:Łączna liczba sesji (połączeń typu end-to-end) ustanowionych od ostatniego przeładowania.
  • Wytrysk Żądania HTTP:Łączna liczba żądań HTTP od ostatniego przeładowania.
  • Odpowiedzi HTTP xxx:całkowita liczba żądań HTTP, które otrzymały odpowiedź xxx.
  • Skompresowane 2xx:Całkowita liczba 2xx skompresowanych odpowiedzi, jeśli kompresja została włączona. Pokazuje również procent żądań, które zostały skompresowane.
  • Inne odpowiedzi:Całkowita liczba żądań HTTP, które otrzymały odpowiedź nieobjętą innymi danymi.
  • Przechwycone żądania:Całkowita liczba żądań przechwyconych i przekierowanych na stronę HAProxy Stats.

Kolumny „LbTot” i „Last” nie są używane w tej sekcji.

Zaplecze

Ta sekcja pokazuje liczbę bieżących połączeń z dowolnymi aktywnymi serwerami.

Kolumna „Cur” zawiera liczbę aktywnych połączeń z serwerem. Kolumna „Max” pokazuje najwięcej połączeń, jakie kiedykolwiek nawiązano jednocześnie z danym serwerem. Kolumna „Limit” pokazuje maksymalną liczbę połączeń dozwolonych dla serwera, określoną przez parametr maxconn w wierszu serwera.

Wiersz backendu pokazuje wartość fullconn dla „Limit” lub, jeśli nie jest ustawiona, używa następującej formuły:Suma wartości limitów sesji dla frontendów, które kierują do tego backendu, podzielona przez 10. Kolumna „Total” pokazuje skumulowaną liczbę połączeń, które korzystały z danego serwera. Gdy najedziesz kursorem na to pole, strona wyświetli następujące dane:

  • Wytrysk sesje:Łączna liczba połączeń nawiązanych z tym serwerem.
  • Wytrysk Odpowiedzi HTTP:łączna liczba odpowiedzi HTTP otrzymanych z tego serwera.
  • Odpowiedzi HTTP xxx:łączna liczba odpowiedzi HTTP xxx z tego serwera.
  • Inne odpowiedzi:łączna liczba odpowiedzi HTTP nieobjętych innymi danymi.
  • Czas w kolejce:ilość czasu w milisekundach, przez którą połączenie pozostawało w kolejce podczas oczekiwania na szczelinę połączenia z serwerem, uśredniona dla ostatnich 1024 udanych połączeń.
  • Czas połączenia:czas w milisekundach potrzebny do pomyślnego połączenia z serwerem, uśredniony dla ostatnich 1024 udanych połączeń.
  • Czas odpowiedzi:czas odpowiedzi serwera w milisekundach, uśredniony dla ostatnich 1024 udanych połączeń.
  • Całkowity czas:całkowity czas sesji w milisekundach, uśredniony dla ostatnich 1024 udanych połączeń.

Kolumna „LbTot” pokazuje całkowitą liczbę przypadków, gdy dany serwer został wybrany do obsługi żądania. Może to być spowodowane normalnym równoważeniem obciążenia lub ponownym wysłaniem z uszkodzonego serwera. Kolumna „Ostatnie” pokazuje czas od ostatniego odebrania połączenia.

Bajty

Front

Ta sekcja wyświetla skumulowaną ilość danych wysłanych i odebranych między HAProxy a klientami. Kolumna „In” pokazuje całkowitą liczbę odebranych bajtów, a kolumna „Out” pokazuje całkowitą liczbę wysłanych bajtów.

Zaplecze

Ta sekcja wyświetla ilość danych wysłanych i odebranych między HAProxy a serwerem. Kolumna „W” pokazuje liczbę bajtów wysłanych do serwera. Kolumna „Out” pokazuje liczbę bajtów odebranych z powrotem.

Odmowa

Pokazuje liczbę żądań i odpowiedzi, które zostały odrzucone ze względów bezpieczeństwa zarówno w sekcjach Frontend, jak i Backend.

Front

Kolumna „Req” pokazuje liczbę żądań, które zostały odrzucone z powodu dyrektyw konfiguracyjnych (http-request odrzuć, http-request odrzuć itp.) umieszczonych w sekcji Frontend lub Listen.

Kolumna „Odpowiedź” pokazuje liczbę odpowiedzi, które zostały odrzucone przez dyrektywę http-response deny, która została umieszczona w interfejsie użytkownika lub nasłuchu.

Zaplecze

Kolumna „Req” dotyczy tylko backendu jako całości. Pokazuje liczbę żądań, które zostały odrzucone przez dyrektywy konfiguracyjne (odrzucenie http-request, odrzucenie http-request itp.) w backendzie.

Kolumna „Odpowiedź” pokazuje liczbę odpowiedzi, które zostały odrzucone dla danego serwera z powodu dyrektyw konfiguracyjnych odrzucenia odpowiedzi http lub tcp-response content w zapleczu.

Błędy

Front

Wykorzystywana jest tutaj tylko kolumna „Req”. Pokazuje liczbę żądań, w których wystąpił błąd.

Możliwe przyczyny to:

  • Wczesne wypowiedzenie przez klienta
  • Błąd odczytu od klienta
  • Przekroczono limit czasu klienta
  • Klient zamknął połączenie
  • Klient wysłał nieprawidłowe żądanie
  • Żądanie zostało zaplanowane

Zaplecze

Pokazuje liczbę błędów związanych z komunikacją z serwerem zaplecza.

Kolumna „Req” nie jest używana. Kolumna „Conn” pokazuje liczbę żądań, które napotkały błąd podczas próby połączenia z serwerem. Kolumna „Odpowiedź” pokazuje błędy napotkane podczas uzyskiwania odpowiedzi.

Ostrzeżenia

Zaplecze

Tylko dla backendów. W tej sekcji wyświetlana jest liczba ponownych prób i ponownych wysyłek. Jeśli dodałeś dyrektywę ponawiania prób do swojego zaplecza, kolumna „Retr” pokazuje całkowitą liczbę ponownych prób połączenia. Kolumna „Redis” pokazuje, ile razy HAProxy nie nawiązał połączenia z serwerem i przesłał go do innego serwera. Wymaga to dodania dyrektywy opcji redispatch.

Serwer

Front

Jedynym polem z tej sekcji, które dotyczy nakładki, jest pole Status. Gdy Status jest OTWARTY, frontend działa normalnie i jest gotowy do odbioru ruchu.

Zaplecze

Ta sekcja zawiera szczegółowe informacje o stanie, kondycji i wadze każdego serwera. Kolumna „Status” wyświetla się, czy serwer jest aktualnie aktywny i jak długo. Może wyświetlać dowolny z następujących stanów:

  • W GÓRĘ:serwer zgłasza jako zdrowy.
  • NIE:Serwer zgłasza się jako zły i nie może odbierać żądań.
  • NOLB:dodałeś http-check disable-on-404 do backendu, a sprawdzany URL zwrócił odpowiedź HTTP 404.
  • MAINT:Serwer został wyłączony lub przełączony w tryb konserwacji.
  • DRAIN:Serwer został przełączony w tryb drenażu.
  • brak kontroli:kontrole stanu nie są włączone dla tego serwera.

Kolumna „LastChk” pokazuje wartość taką jak L7OK/200 w Xms. Ta wartość oznacza, że ​​przeprowadzono kontrolę kondycji warstwy 7; zwrócił odpowiedź HTTP 200 OK i zrobiło to w ciągu X milisekund.

Kolumna „Wght” pokazuje proporcję akceptowanego ruchu, zgodnie z parametrem wagi w linii serwera. Kolumna „Działanie” pokazuje, czy serwer jest aktywny (oznaczony Y) czy kopia zapasowa (oznaczona -). Kolumna „Wstecz” pokazuje, czy serwer jest kopią zapasową (oznaczoną Y) czy aktywnym (oznaczonym -).

Kolumna „Chk” pokazuje liczbę nieudanych kontroli stanu. Kolumna „Dwn” pokazuje liczbę przejść z GÓRA do DÓŁ. Kolumna „Dwntme” pokazuje, jak długo serwer nie działa.

Jeśli dodałeś parametr slowstart do linii serwera, to po wyłączeniu, a później włączeniu tego serwera, kolumna „Thrtle” pokazuje procent ruchu, który serwer zaakceptuje. Procent będzie stopniowo wzrastał do 100% w ustawionym okresie.

Te informacje są oparte na poście na blogu HAProxy, do którego można się odwołać, aby uzyskać bardziej szczegółowe informacje.

HAProxy w ClusterControl

Oprócz wdrażania i zarządzania, ClusterControl zapewnia również wgląd w statystyki HAProxy i pulpity nawigacyjne w czasie rzeczywistym z poziomu interfejsu użytkownika. Z ClusterControl możesz uzyskać dostęp do strony statystyk w ClusterControl -> Select Cluster -> Nodes -> wybierz węzeł HAProxy podobny do zrzutu ekranu poniżej:

Możesz włączyć/wyłączyć serwer z równoważenia obciążenia, zaznaczając/odznaczając przycisk pola wyboru w kolumnie „Włączone”. Jest to bardzo przydatne, gdy chcesz, aby Twoja aplikacja celowo pomijała łączenie się z serwerem, np. w celu konserwacji lub testowania i walidacji nowych parametrów konfiguracyjnych lub zoptymalizowanych zapytań.

Możesz także monitorować swoje serwery HAProxy z ClusterControl, sprawdzając sekcję Dashboard.

Aby ją włączyć, wystarczy przejść do ClusterControl -> Select Cluster -> Pulpity -> Włącz monitorowanie oparte na agentach. Spowoduje to wdrożenie agenta w każdym węźle, aby uzyskać wszystkie informacje potrzebne do wygenerowania odpowiednich wykresów.

Tutaj zobaczysz nie tylko wszystkie niezbędne metryki do monitorowania węzła HAProxy, ale także do monitorowania całego środowiska za pomocą różnych pulpitów nawigacyjnych.

Wnioski

HAProxy to dobre i potężne narzędzie do poprawy wydajności bazy danych i aplikacji. Przydatne jest również dodanie do środowiska wysokiej dostępności i przełączania awaryjnego. Aby wiedzieć, co dzieje się w węźle HAProxy, musisz zrozumieć metryki, które są monitorowane na stronie statystyk, a nawet ulepszyć to monitorowanie, dodając pulpit nawigacyjny, aby był bardziej przyjazny.

W tym blogu wyjaśniliśmy każdą metrykę wymienioną na stronie statystyk HAProxy, a także pokazaliśmy, jak to wygląda w ClusterControl, gdzie można uzyskać dostęp do sekcji statystyk i pulpitów nawigacyjnych HAProxy z tego samego systemu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać rekurencyjne zapytanie SELECT w MySQL?

  2. MySQL JAK IN()?

  3. Szybka wskazówka MySQL:Używanie polecenia DROP USER

  4. Zapobiegaj atakom typu SQL injection w programie Java

  5. Jak dodać dni do daty w MySQL