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.