Bom, felizmente, o Zabbix tem evoluído, ganhando muita maturidade com o passar de suas versões e enfim, o fornecedor do produto disponibilizou uma solução de High Availability (H.A.) nativa. Pois bem, vamos explorá-la um pouco!
Contexto
Sabemos que uma solução de monitoramento com Zabbix possui, por natureza, escalabilidade horizontal, com uso de proxies, por exemplo, o que chamamos de “Monitoramento Distribuído”. Os proxies são muito úteis. Eles permitem, por exemplo, que hosts e/ou grupos de hosts inteiros sejam monitorados em ambientes remotos, agindo essencialmente em nome do Zabbix Server. Mas… quando um cliente, um grupo de clientes ou qualquer host (ou proxy) perde a conectividade com o Zabbix Server, não havia, até agora, uma solução que permitisse que ele continuasse a ser monitorado. Bom, vamos avançar um pouco mais nessa análise, pois é aí que entra o “Zabbix Cluster”!
Load Balance
Precisa ser dito. O Zabbix não tem.
Isso mesmo. Alinhando as expectativas sobre a nova versão do produto, o Zabbix Server não possui uma solução que faça um balanceamento de carga recebida (dados coletados, métricas). O que a nova versão ganha é a funcionalidade de se criar clusters de Zabbix Servers par desempenhar o que se conhecer por “Failover”. Vamos falar sobre ele…
Failover
Failover é algo como contingência. Ou seja, o Zabbix Server agora possui uma estrutura de clusters do tipo “Ativo x Stand by”. Isso quer dizer que, essencialmente, existirá uma espécie de “Zabbix Server Master” (este conceito não está definido na ferramenta ou em sua documentação) e, quando este vem a deixar de responder, por exemplo, por queda do serviço, assume um Cluster. É tolerância à falha, mas não é Loadbalance.
Calma… fizemos um troubleshooting da solução e em laboratório, comprovamos que os dados continuarão sendo coletados e entregues, com o timestamp correto, mesmo que se mude o “Zabbix Server Master”, ou seja, não haverá flaps e buracos nos gráficos, felizmente.
Como configurar
Basicamente, o banco de dados deverá ter permissão para que os vários servers possam ler e escrever na mesma instância.
Por exemplo, considere:
zabbix-server = 192.168.100.10
zabbix-frontend = 192.168.100.50
zabbix-db = 192.168.100.30
Algo assim:
Acrescentando o Zabbix-server2, temos:
zabbix-server = 192.168.100.10
zabbix-server2 = 192.168.100.11
zabbix-frontend = 192.168.100.50
zabbix-db = 192.168.100.30
Agora, temos algo assim:
HANodeName=Cluster A
NodeAddress=zabbix-server:10051
Para o zabbix-server2, teríamos:
HANodeName=Cluster B
NodeAddress=zabbix-server2:10051
Quem for inicializado primeiro, será o Zabbix Server Master (Active). O(s) outro(s), serão executados em modo “Stand by”.
# No zabbix-server (Cluster A)
534:20211210:232246.459 starting HA manager
534:20211210:232246.472 HA manager started in active mode
# No Zabbix-server2 (Cluster B)
534:20211210:232334.130 starting HA manager
534:20211210:232334.140 HA manager started in standby mode
533:20211210:232334.229 “Cluster B” node started in “standby” mode
533:20211211:002334.132 “Cluster B” node is working in “standby” mode
No frontend, temos algo assim:
- Parar o serviço do zabbix-server (Cluster A)
a. systemctl stop zabbix-server.service - Observando o log do zabbix-server2 (Cluster B)
a.533:20211211:003221.140“Cluster B” node switched to “active” mode - A visão no frontend seria:
System information
Pois bem… ao se criar uma estrutura de Zabbix Servers Active x Stand by, é necessário apontar os Zabbix Agents + Zabbix Proxies para entregarem as métricas para ambos os servers, caso contrário, teremos uma solução de Failover que não estará apta a receber nenhum dado, caso o “Master” venha a falhar.
Zabbix Agent2 – Exemplo de configuração
Se estivermos coletando dados por um Zabbix Agent2 e entregando diretamente ao server, devemos fazer algo assim no arquivo zabbix_agent2.conf:
Server=zabbix-server,zabbix-server2
ServerActive=zabbix-server,zabbix-server2
Zabbix Proxy – Exemplo de configuração
Caso estejamos entregando nossas métricas a um Zabbix Proxy, temos que fazer assim:
# Note que, se estivermos referenciados 2 ha_nodes, a separação é por “;” e não por “,”.
Server=zabbix-server;zabbix-server2
Assim, caso um Zabbix Proxy não encontre o servidor “Master”, ele entregará ao próximo “Active” da lista, por assim dizer.
Conclusão (parcial)
Este bog post foi escrito na versão 6.0 alpha7. Até a versão LTS 6.0.0, é necessário observar possíveis alterações e realizar mais testes e troubleshootings em ambientes mais complexos.
O fornecedor da solução deixa em aberto o uso da alta disponibilidade nativa para o critério do administrador zabbix; este, por sua vez, pode entender que o H.A. por solução de virtualização seja outro caminho e assim por diante.
Os testes realizados na versão alpha7 demonstraram que não há perda de métricas quando da indisponibilidade de apenas 1 cluster, seja por coleta direta do Server, seja por entrega via Proxy.
Os testes não foram exaustivos, mas suficientes para comprovar a eficácia da solução de H.A.
Considere outra questão: ainda há um ponto de falha no HTTP Server. Este, mesmo que em servidor dedicado, aponta automaticamente para o Server Active, porém, se o próprio falhar (HTTP Server) e não houver uma estrutura de HTTP Server Failover, haverá coleta, mas não a visualização dos dados coletados.
O gerenciamento de configuração é altamente necessário caso o ambiente a ser monitorado precise referenciar mais de 1 cluster. Imagine um parque de >100 hosts, todos tendo que ter seu arquivo de configuração apontando para um novo zabbix-server, ou ainda proxies com a mesma necessidade. Vamos facilitar, se possível… hehe
Cuidado com o falso-positivo ao se user um Zabbix Proxy mal configurado. Mesmo que não esteja apontando para o Active correto, ele pode entender que está na hora de “reter os dados até que a conexão seja restabelecida”. Isso não ocorrerá se o Proxy estiver apontando para os clusters corretamente.
Esperamos que a leitura seja agradável, embora técnica.
Mas também imaginamos o quanto esta solução agregará em projetos e o quanto brilhará em apresentações para os executivos do setor de Tecnologia da Informação! Ainda, mais, nas reuniões que decidem o Plano Diretor de Tecnologia da Informação ou ainda, o Plano de Diretor de Segurança da Informação (PDTI e PDSI, respectivamente).
Se conecte! Informe-se! Capacite seu time conosco!
Unirede Treinamentos
O mercado de TI é extremamente competitivo e no mundo dos negócios, quanto mais conhecimento você possui, mais valioso para o mercado você é. Investir na sua vida profissional é um passo importante para te deixar cada vez mais perto do sucesso. A Unirede Treinamentos está há mais de 14 anos no mercado de TI, com instrutores especializados no assunto e com didática e certificações oficiais. A Unirede Treinamentos é parceira Premium da Zabbix Oficial, Parceiro Silver Quest e parceiro Exin. Possui treinamentos em ferramentas opensource como Zabbix, Grafana, Kace, LGPD, DPO, ISMP, entre outros. Obtenha mais informações no site.
Boa análise.
Porém vejo que há uma falta de redundância do Banco de Dados, correto?
Como seria a melhor opção para esse cenário em que um zabbix-db não responde?