Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Entendendo as estatísticas do HAProxy para MySQL e PostgreSQL

Ter um Load Balancer é sempre uma boa opção para melhorar seu ambiente de banco de dados. Ele pode ajudá-lo a redirecionar aplicativos para nós de banco de dados disponíveis, distribuir o tráfego entre vários servidores para melhorar o desempenho ou até mesmo fazer failover quando necessário. Para saber o que está acontecendo com seu tráfego/sistema, você precisa ter um bom sistema de monitoramento para monitorar não apenas seus nós de banco de dados, mas também seus balanceadores de carga, para tomar ações proativas ou reativas para mitigar qualquer problema atual ou futuro. Para ser capaz de encontrar um problema, você precisa entender o que significa cada valor que você está vendo.

Neste blog, explicaremos o que significam as estatísticas HAProxy e como monitorá-las de maneira amigável usando gráficos e ClusterControl.

O que é HAProxy?

HAProxy é um proxy de código aberto que pode ser usado para implementar alta disponibilidade, balanceamento de carga e proxy para aplicativos baseados em TCP e HTTP.

Como balanceador de carga, o HAProxy distribui o tráfego de uma origem para um ou mais destinos e pode definir regras e/ou protocolos específicos para essa tarefa. Se algum dos destinos parar de responder, ele será marcado como off-line e o tráfego será enviado para o restante dos destinos disponíveis.

Tipos de nó HAProxy

Ao configurar seu HAProxy Load Balancer, existem diferentes tipos de nós para configurar, dependendo da funcionalidade desejada. As opções são Frontend, Backend e Listen.

Nós de front-end

Quando você coloca o HAProxy como um proxy reverso na frente de seus servidores de back-end, uma seção de front-end no arquivo de configuração define os endereços IP e as portas às quais os clientes podem se conectar. As solicitações entram no balanceador de carga e as respostas são retornadas ao cliente. Eles passam pelo frontend.

frontend site1.com

     bind 10.10.10.150:80

     use_backend api_servers if { path_beg /api/ }

     default_backend web_servers

Nós de back-end

Define um grupo de servidores que terão balanceamento de carga e serão designados para lidar com solicitações, dependendo da política selecionada. O HAProxy envia solicitações para um back-end e, em seguida, recebe uma resposta de um dos servidores ativos.

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

Ouvir nós

Ele combina os dois tipos de nó HAProxy que mencionamos acima. Você pode preferir a legibilidade obtida com seções de front-end e back-end separadas, ou talvez queira ter uma configuração mais concisa, usando a abordagem de escuta.

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

Página de estatísticas do HAProxy

HAProxy permite habilitar uma página de estatísticas com informações em tempo real para ver o que está acontecendo em seu Load Balancer. Para habilitar a página de estatísticas, você só precisa usar a diretiva “stats enable” em seu arquivo de configuração do HAProxy (/etc/haproxy/haproxy.cfg). Vejamos um exemplo:

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

A linha de ligação define qual endereço IP e porta você usará para acessar a página de estatísticas. Você também pode configurar a autenticação e um período de atualização. Se você acessar seu nó HAProxy usando a porta especificada (9600 no exemplo), credenciais de administrador/administrador, você verá algo assim:

Aqui, você encontrará diferentes métricas úteis para monitorar seu nó HAProxy.

Estatísticas de HAProxy

Agora, vamos ver quais são essas métricas. Como o significado depende do contexto, vamos dividi-lo em Frontend e Backend.

Fila

Back-end

Esta seção se aplica apenas a back-ends e mostra quanto tempo os clientes aguardam a disponibilidade de um servidor. O HAProxy é capaz de enfileirar conexões quando você usa a configuração maxconn.

A coluna “Cur” mostra o número de conexões de clientes que estão atualmente na fila e ainda não atribuídas a um servidor. A coluna “Max” mostra o maior número de conexões que já foram enfileiradas de uma só vez. A coluna “Limite” mostra o número máximo de conexões que podem ser enfileiradas, conforme definido pela configuração maxqueue em cada linha do servidor no arquivo de configuração.

Taxa de sessão

Frontend

Descreve a taxa na qual os clientes estão se conectando ao HAProxy.

A coluna “Cur” mostra a taxa atual na qual as sessões do cliente, ou conexões totalmente estabelecidas entre cliente e servidor, estão sendo criadas. Se você passar o mouse sobre esse campo, a página exibirá as seguintes métricas:

  • Taxa de conexão atual:a taxa na qual os clientes estão se conectando ao HAProxy.
  • Taxa de sessão atual:  a taxa na qual as sessões, que são entidades que mantêm o estado de uma conexão de ponta a ponta, estão sendo criadas.
  • Taxa de solicitação atual:a taxa na qual as solicitações HTTP estão sendo recebidas em conexões estabelecidas.

A coluna “Max” mostra o maior número de sessões que já foram usadas simultaneamente. Se você passar o mouse sobre esse campo, a página exibirá as seguintes métricas:

  • Taxa máxima de conexão:a taxa mais alta na qual os clientes se conectaram ao HAProxy.
  • Taxa máxima de sessão:a taxa mais alta em que os clientes estabeleceram sessões, que são entidades que mantêm o estado de uma conexão de ponta a ponta.
  • Taxa máxima de solicitações:a taxa mais alta em que solicitações HTTP foram recebidas em conexões estabelecidas.

A coluna "Limite" mostra o número máximo de sessões por segundo que o frontend aceitará, conforme definido pela configuração de limite de sessões. Se esse limite for excedido, conexões adicionais são mantidas pendentes no backlog do soquete.

Back-end

Estas estatísticas mostram a taxa na qual as conexões estão sendo feitas para um servidor.

A coluna “Cur” mostra a taxa atual, por segundo, na qual as conexões estão sendo estabelecidas com o servidor. A coluna “Max” mostra a taxa mais alta em que as conexões já foram estabelecidas para o servidor fornecido. A coluna “Limite” não é usada aqui.

Sessões

Frontend

Esta seção conta o número de sessões, ou conexões completas de cliente para servidor, em uso no balanceador de carga.

A coluna “Cur” mostra o número atual de sessões estabelecidas. A coluna “Max” mostra o maior número de sessões que já foram estabelecidas simultaneamente. A coluna “Limit” mostra as sessões mais simultâneas que são permitidas, conforme definido pela configuração maxconn no frontend. Esse frontend específico deixará de aceitar novas conexões quando esse limite for atingido. Se maxconn não estiver definido, então “Limit” é o mesmo que o valor maxconn na seção global de sua configuração. Se isso não estiver definido, o valor será baseado no seu sistema. Ao passar o mouse sobre a coluna “Total”, a página exibe as seguintes métricas:

  • Goza. conexões:número cumulativo de conexões estabelecidas desde que o HAProxy foi recarregado pela última vez.
  • Goza. sessões:número cumulativo de sessões (conexões de ponta a ponta) estabelecidas desde a última recarga.
  • Goza. Solicitações HTTP:número cumulativo de solicitações HTTP desde a última recarga.
  • Respostas HTTP xxx:número total de solicitações HTTP que receberam uma resposta xxx.
  • 2xx compactado:número total de respostas 2xx compactadas, se a compactação estiver ativada. Também mostra a porcentagem de solicitações que foram compactadas.
  • Outras respostas:número total de solicitações HTTP que receberam uma resposta não coberta pelas outras métricas.
  • Solicitações interceptadas:número total de solicitações interceptadas e redirecionadas para a página de estatísticas do HAProxy.

As colunas “LbTot” e “Last” não são usadas nesta seção.

Back-end

Esta seção mostra o número de conexões atuais para qualquer um dos servidores ativos.

A coluna “Cur” lista o número de conexões ativas para um servidor. A coluna “Max” mostra o maior número de conexões que já foram estabelecidas simultaneamente com o servidor fornecido. A coluna “Limite” mostra o número máximo de conexões permitidas para um servidor, conforme definido pelo parâmetro maxconn em uma linha do servidor.

A linha de backend mostra o valor de fullconn para “Limit” ou, se não estiver definido, usa a seguinte fórmula:Soma dos valores de limite de sessões para frontends que roteiam para esse backend, dividido por 10. A coluna “Total” mostra o número cumulativo de conexões que usaram um determinado servidor. Ao passar o mouse sobre esse campo, a página exibe as seguintes métricas:

  • Goza. sessões:número cumulativo de conexões estabelecidas com este servidor.
  • Goza. Respostas HTTP:número cumulativo de respostas HTTP recebidas deste servidor.
  • Respostas HTTP xxx:número total de respostas HTTP xxx deste servidor.
  • Outras respostas:número total de respostas HTTP não cobertas pelas outras métricas.
  • Tempo de fila:a quantidade de tempo em milissegundos que uma conexão permaneceu na fila enquanto aguardava um slot de conexão com o servidor, em média nas últimas 1.024 conexões bem-sucedidas.
  • Tempo de conexão:a quantidade de tempo em milissegundos que levou para se conectar ao servidor, com média das últimas 1.024 conexões bem-sucedidas.
  • Tempo de resposta:o tempo de resposta do servidor em milissegundos, com média das últimas 1.024 conexões bem-sucedidas.
  • Tempo total:o tempo total da sessão em milissegundos, com a média das últimas 1.024 conexões bem-sucedidas.

A coluna “LbTot” mostra o número total de vezes que um determinado servidor foi selecionado para atender a uma solicitação. Isso pode ser devido ao balanceamento de carga normal ou devido a um reenvio de um servidor com falha. A coluna “Última” mostra o tempo desde que a última conexão foi recebida.

Bytes

Frontend

Esta seção exibe a quantidade cumulativa de dados enviados e recebidos entre o HAProxy e os clientes. A coluna “In” mostra o número total de bytes recebidos e a coluna “Out” mostra o número total de bytes enviados.

Back-end

Esta seção exibe a quantidade de dados enviados e recebidos entre o HAProxy e o servidor. A coluna “In” mostra o número de bytes enviados ao servidor. A coluna “Out” mostra o número de bytes recebidos de volta.

Negado

Mostra o número de solicitações e respostas que foram rejeitadas devido a questões de segurança nas seções Front-end e Back-end.

Frontend

A coluna "Req" mostra o número de solicitações que foram negadas devido a diretivas de configuração (negação de solicitação http, rejeição de solicitação http, etc.) colocadas na seção Frontend ou Listen.

A coluna "Resp" mostra o número de respostas que foram negadas por uma diretiva de negação de resposta http que foi colocada em um frontend ou escuta.

Back-end

A coluna “Req” se aplica apenas ao back-end como um todo. Ele mostra o número de solicitações que foram rejeitadas por diretivas de configuração (negação de solicitação http, rejeição de solicitação http, etc.) em um back-end.

A coluna "Resp" mostra o número de respostas que foram rejeitadas para qualquer servidor devido a diretivas de configuração de negação de resposta http ou rejeição de conteúdo de resposta tcp em um back-end.

Erros

Frontend

Apenas a coluna “Req” é usada aqui. Ele mostra o número de solicitações que encontraram um erro.

As causas possíveis incluem:

  • Rescisão antecipada do cliente
  • Um erro de leitura do cliente
  • O cliente expirou
  • O cliente fechou a conexão
  • O cliente enviou uma solicitação malformada
  • A solicitação foi tarpit

Back-end

Mostra o número de erros relacionados à comunicação com um servidor backend.

A coluna “Req” não é usada. A coluna “Conn” mostra o número de solicitações que encontraram um erro ao tentar se conectar ao servidor. A coluna "Resp" mostra os erros encontrados ao obter a resposta.

Avisos

Back-end

Apenas para back-ends. Esta seção exibe o número de tentativas e reexpedições. Se você adicionou uma diretiva de tentativas ao seu back-end, a coluna "Retr" mostrará o número total de vezes que uma conexão foi repetida. A coluna “Redis” mostra o número de vezes que o HAProxy falhou ao estabelecer uma conexão com um servidor e a reenviou para outro servidor. Isso requer que você tenha adicionado uma diretiva de reexpedição de opção.

Servidor

Frontend

O único campo desta seção que se aplica a um frontend é o campo Status. Quando o Status está ABERTO, o frontend está operando normalmente e pronto para receber tráfego.

Back-end

Esta seção mostra detalhes sobre o status, integridade e peso de cada servidor. A coluna "Status" exibe se o servidor está ativo e por quanto tempo. Ele pode exibir qualquer um dos seguintes status:

  • UP:O servidor está relatando como íntegro.
  • DOWN:O servidor está reportando como não íntegro e incapaz de receber solicitações.
  • NOLB:você adicionou http-check disable-on-404 ao back-end e o URL verificado de integridade retornou uma resposta HTTP 404.
  • MAINT:O servidor foi desativado ou colocado em modo de manutenção.
  • DRAIN:O servidor foi colocado no modo de drenagem.
  • sem verificação:as verificações de integridade não estão habilitadas para este servidor.

A coluna “LastChk” mostra um valor como L7OK/200 em Xms. Esse valor significa que uma verificação de integridade da Camada 7 foi executada; ele retornou uma resposta HTTP 200 OK e o fez em X milissegundos.

A coluna “Wght” mostra a proporção de tráfego que ele aceitará, conforme definido pelo parâmetro de peso na linha do servidor. A coluna “Act” mostra se o servidor está ativo (marcado com um Y) ou um backup (marcado com um -). A coluna “Bck” mostra se o servidor é um backup (marcado com um Y) ou ativo (marcado com um -).

A coluna “Chk” mostra o número de verificações de integridade com falha. A coluna “Dwn” mostra o número de transições de UP para DOWN. A coluna “Dwntme” mostra há quanto tempo o servidor está inativo.

Se você adicionou um parâmetro de inicialização lenta a uma linha de servidor, quando você desabilitar e habilitar posteriormente esse servidor, a coluna "Thrtle" mostrará a porcentagem de tráfego que o servidor aceitará. A porcentagem aumentará gradualmente para 100% durante o período que você definiu.

Estas informações são baseadas em uma postagem de blog do HAProxy que você pode consultar para obter informações mais detalhadas.

HAProxy no ClusterControl

Além de implantação e gerenciamento, o ClusterControl também fornece informações sobre estatísticas do HAProxy e painéis em tempo real da interface do usuário. No ClusterControl, você pode acessar a página de estatísticas em ClusterControl -> Select Cluster -> Nodes -> escolha o nó HAProxy semelhante à captura de tela abaixo:

Você pode habilitar/desabilitar um servidor do balanceamento de carga marcando/desmarcando o botão da caixa de seleção na coluna "Ativado". Isso é muito útil quando você deseja que seu aplicativo ignore intencionalmente a conexão com um servidor, por exemplo, para manutenção ou para testar e validar novos parâmetros de configuração ou consultas otimizadas.

Você também pode monitorar seus servidores HAProxy do ClusterControl verificando a seção Dashboard.

Para habilitá-lo, basta acessar ClusterControl -> Select Cluster -> Painéis -> Ativar monitoramento baseado em agente. Isso implantará um agente em cada nó para obter todas as informações para gerar os gráficos correspondentes.

Aqui, você não verá apenas todas as métricas necessárias para monitorar o nó HAProxy, mas também para monitorar todo o ambiente usando os diferentes Dashboards.

Conclusão

HAProxy é uma ferramenta boa e poderosa para melhorar o desempenho do banco de dados e do aplicativo. Também é útil adicionar Alta Disponibilidade e Failover ao seu ambiente. Para saber o que está acontecendo em seu nó HAProxy, você precisa entender as métricas que estão sendo monitoradas na página de estatísticas, ou até mesmo melhorar esse monitoramento adicionando um dashboard para torná-lo mais amigável.

Neste blog, explicamos cada métrica mencionada na página de estatísticas do HAProxy e também mostramos como ela fica no ClusterControl, onde você pode acessar as seções de estatísticas e painéis do HAProxy do mesmo sistema.