---
title:  "High Available Zabbix cluster"
excerpt: 'Naast een robuust en performant product als Zabbix server, kunnen we deze nog robuuster maken door meerdere servers in een HA cluster op te zetten.'
date:   '2023-07-09T18:00:00.000Z'
author: Eli Winderickx
hero_image: /ZabbixHACluster_cover.png
category: High Available,Zabbix
---
## Vertrekpunt
Vermoedelijk heb je al een Zabbix server draaiende. Op die server draait mogelijk zowel de Zabbix server software, als de database en ook de webserver. Een eenvoudige uitbreiding hierop kan zijn om een Zabbix server HA cluster op te zetten. Dit is ondersteund in Zabbix vanaf versie 6.

## De Zabbix nodes
Best maak je hiervoor twee extra servers aan. (Je kan er ook meerdere aanmaken maar twee nodes zijn veelal voldoende voor zo'n HA opstelling). Om het simpel te houden noem ik die ZN1 (Zabbix Node 1) en ZN2 (Zabbix Node 2).

Installeer zoals gewoonlijk de Zabbix server en pas de configuratie aan.
````bash
sudo dnf install zabbix-server-mysql zabbix-selinux-policy zabbix-agent
sudo vim /etc/zabbix/zabbix_server.conf
````

Vooral de ``DBHost``, ``DBName``, ``DBUser``, ``DBPassword`` en ``DBPort`` zullen ervoor zorgen dat je naar je originele database kan verbinden en dus vrij simpel verder kan. Daarnaast ga je per server ``HANodeName`` en ``NodeAddress`` instellen om de cluster High available te maken.

````
HANodeName=zn1.winderickx.me
NodeAddress=192.168.124.186
````

Herstart beide servers en controleer de log op eventuele fouten in je configuratie. Het ``systemctl status zabbix-server`` commando gaat je niet genoeg info tonen!

````bash
sudo tail -f /var/log/zabbix/zabbix_server.log
````
## De clients
Deze moeten uiteraard ook op de hoogte gebracht worden van de cluster. Hiervoor kunnen we simpelweg beide servers toevoegen aan de configuratie. werk je met proces? Dan moet de client uiteraard met de Proxy verbinden en moet de Proxy beide servers kennen.

```
...
ServerName=zn1.winderickx.me,zn2.winderickx.me
ServerActive=zn1.winderickx.me,zn2.winderickx.me
...
```

## Niet vergeten!
Omdat we naar een andere server verbinden moeten we de firewall en SELinux aanpassen om verbindingen toe te staan:

> Als je niet goed weet hoe ik op de SELinux policy ben gekomen, zet SELinux dan op Permissive met ``sudo setenforce 0`` en neem een kijkje in de audit log: ``sudo tail -100 /var/log/audit/audit.log | audit2why | less``

````bash
# Firewall regels voor Zabbix
sudo firewall-cmd --add-port=10050/tcp --permanent
sudo firewall-cmd --add-port=10051/tcp --permanent
sudo firewall-cmd --reload
# SELinux policy voor Zabbix
sudo setsebool -P zabbix_can_network 1
````