Mit jelent a gyakorlatban a HA?
High availability, azaz magas rendelkezésre állás.
Természetesen vannak olyan szituációk, amikor nem engedhetjük meg magunknak, hogy az alkalmazásunk elérhetetlenné váljon. Ebben a konkrét példában a zabbix szerver. Ez azt fogja jelenteni, hogy a tervezett főverzió frissítéseket leszámítva, nem fogunk az esetlegesen előforduló leállás miatt adatot veszíteni. Nem csak arra kell gondolni, hogy leáll a zabbix szerver (nem szokott), az is lehet, hogy csak az őt futtató szervert indítjuk újra egy tervezett frissítés miatt.
Akinek nem fér bele ez a kockázat, az használja a zabbix szervert HA módban!
Mit kell erről tudni?
El sem fogod hinni, de legalább két zabbix szerverre lesz szükséged 🙂
Ezt a funkciót a 6.0 verzióban vezették be, természetesen minden ettől újabb verzió is támogatja. A weboldalukon leírják a tudnivalókat, én is ezek alapján csináltam meg a saját laboromban.
Fontos, hogy a helyes működéshez minden zabbix agenten be kell állítani a 2. zabbix szerver IP címét (vagy hoszt nevét), ahonnan érkezhet a kapcsolat (passzív mód esetén), vagy ahová küldenie kell az adatokat (aktív mód esetén). Ha használunk zabbix proxy(ka)t, természetesen azoknál is be kell állítani minden szerver IP címét/hoszt nevét.
A zabbix szerver HA működési elve, hogy egy időpontban csak egy aktív szerver lehet, a többi készenléti módban fog futni.
Milyen gyors lesz a feladatátvétel? Minden zabbix szerver 5 másodpercenként frissíti utolsó hozzáférési idejét (és állapotát, ha megváltozik).
- ha az aktív csomópont leáll, és sikerül „leállítva” állapotát jelentenie, akkor 5 másodpercen belül egy másik csomópont veszi át az irányítást
- ha az aktív csomópont leáll vagy elérhetetlenné válik anélkül, hogy frissítené állapotát, a készenléti csomópontok megvárják a feladatátvételi késleltetést (10 másodperc és 15 perc között bármi lehet) + 5 másodpercet, hogy átvegyék az irányítást
Hogyan néz ki a labor környezetem?
- van 3 hosztom, rajtuk zabbix agent (passzív módban)
- van 2 zabbix proxym, ők is HA módban vannak (az erről szóló cikkem itt olvasható)
- van 2 szerverem immár HA módban
- és van egy zabbix frontendem
- az egész dockerben fut, amivel rengeteg időt meg tudok spórolni
- a legújabb LTS 7.0 verziót futtatom
- adatbázisnak a MariaDB 10.6 (LTS) verziót választottam
Ez lett a topológia:
1. lépés: a meglévő zabbix szerver konfigurálása
Nyissuk meg szerkesztésre a zabbix szerver1 docker-compose.yml fájlt. 3 sort szúrjunk be a változók közé:
- ZBX_NODEADDRESS=zbxlab_7.0-zabbix-server1
- ZBX_HANODENAME=zbxnode1
- ZBX_AUTOHANODENAME=zbxlab_7.0-zabbix-server1
A név bármi lehet, ez fog látszani a státusz képernyőn, ám a cím valós hoszt név vagy IP cím legyen!
A szerver újraindítása után ezt fogjuk látni a system information
oldalon:
Már látszik, hogy a HA mód be van kapcsolva, de egy szerver még nem teljesíti a HA módot 🙂
2. lépés: az új, 2. zabbix szerver konfigurálása
Nyissuk meg szerkesztésre a zabbix szerver2 docker-compose.yml fájlt. 2 sort szúrjunk be a változók közé:
- ZBX_HANODENAME=zbxnode2
- ZBX_AUTOHANODENAME=zbxlab_7.0-zabbix-server2
A név bármi lehet, ez fog látszani a státusz képernyőn, ám a cím valós hoszt név vagy IP cím legyen!
A szerver elindítása után ezt fogjuk látni a system information
oldalon:
3. lépés: a zabbix frontend konfigurálása
Ez lesz a legkönnyebb, ugyanis ide nem kell beszúrni semmit, mivel minden zabbix szerver node elérhetősége megtalálható az adatbázisban, szóval innen csak törölni kell a ZBX_SERVER_HOST és a ZBX_SERVER_PORT változókat.
4. lépés: ha használunk zabbix proxy(ka)t, akkor velük fejezzük be, ha nem, a zabbix agentetek állítjuk át
Ha használunk zabbix proxykat, akkor az 1. proxyhoz adjuk hozzá a kettes szerver hosztját, a 2. proxyhoz pedig az egyest, gyakorlatilag mindkét proxynk ezen változója egyforma lesz:
ZBX_SERVER_HOST=zbxlab_7.0-zabbix-server1;zbxlab_7.0-zabbix-server2
Ha nincsenek proxyjaink, akkor az agenteken adjuk meg a két (vagy több) szerver hosztját:
ZBX_SERVER_HOST=zbxlab_7.0-zabbix-server1,zbxlab_7.0-zabbix-server2
Éles szeműek észrevehették, hogy mind a proxy, mind az agent ugyanazt a változót használja 🙂
Ám egy apróság mégis van, a proxykat aktív módban használom, az agenteket tipikusan passzív módban, ezért fontos, hogy vesszővel vagy pontosvesszővel szeparáljuk el a hosztokat.
5. lépés: a failover idő beállítása a minimumra (10s)
Parancssorban adjuk ki az alábbi utasítást, ahol a zabbix szerver1 konténerünk neve zbxlab_7.0-zabbix-server1:
sudo docker exec zbxlab_7.0-zabbix-server1 zabbix_server -R ha_set_failover_delay=10s
Teszteljük a klasztert, nyírjuk ki a zabbix-server1 konténert
Parancssorban adjuk ki ezt az utasítást, ahol a zabbix szerver1 konténerünk neve zbxlab_7.0-zabbix-server1:
sudo docker rm -f zbxlab_7.0-zabbix-server1
Mit mutat a system information?
A piros hibaüzenet szerint nem tud csatlakozni az adatbázis szerinti aktív szerverhez, hiszen még nem telt el a 10+5 másodperc, utána az eddig készenlétben álló szerver2 aktívvá válik, a kinyírt szerver1 pedig nem elérhető státuszba kerül:
Az 1. sorban látszik, hogy kihez csatlakozott a frontend, az utolsó sorban pedig mutatja, hogy a kinyírt szerver1 elérhetetlen. Ha újra elindítom, belőle lesz a készenléti szerver:
Zabbix frissítése HA környezetben
Normál esetben az induló zabbix szerver ellenőrzi az adatbázisban a zabbix verzióját, és ha régebbit talál ott, automatikusan elindítja a DB frissítését. Ám HA esetén ez nem fog menni:
- előbb állítsuk le az összes zabbix szervert
- majd kommentezzük ki az aktív szerveren a ZBX_NODEADDRESS, ZBX_HANODENAME, ZBX_AUTOHANODENAME változókat
- készítsünk egy adatbázis mentést
- indítsuk el a preparált szervert, ő fogja elvégezni a DB frissítését
- ha végzett, vegyük ki a kommenteket a preparált szerverből, és indítsuk újra
- végül a többi szerver node-ot is elindíthatjuk
Mi maradt még?
Hogy ne kelljen 9 docker-compose.yml fájl létrehoznotok, és innen kimásolt adatokkal feltölteni, készítettem egy tömörített fájlt az egész laborról, így elég letöltenetek, kicsomagolnotok, és a start-all.sh scripttel elindítani az egészet. Természetesen a stop-all.sh-val lehet leállítani.
A frontendet ezen a linken tudjátok majd elérni: http://192.168.70.1:8080/, az alapértelmezett felhasználónév: Admin, a jelszó: zabbix.
Utóirat
Ez a cikk nem a zabbix vagy docker bemutatásáról szól, arról már írtam korábban több cikket is, ez kizárólag a zabbix szerver HA képességéről szól, így ha minden mondatom kínai számodra, akkor kezd el az alapok olvasásával.
Természetesen docker mentes környezetben is lehet használni a zabbixot, de akkor ehhez a laborhoz szükség lett volna több virtuális gépre is, aminek a létrehozása jóval több időmet elvitte volna, miközben a lényeg nem változik.