Tentokrát si ukážeme, jak zaktualizovat Zabbix na nejnovější verzi 7.0 LTS. Budeme vycházet při aktualizaci z verze Zabbixu 6.0, PHP verze 8.0 a PostgreSQL 13 s jeho extenzí TimescaleDB.
Přípravné kroky
- Přečtěte si „poznámky k vydané verzi“ (release notes) [ Official release notes for Zabbix 7.0 LTS ]
- Přečtěte si důkladně dokument „poznámky k aktualizaci“ (upgrade notes) [ Official upgrade notes for Zabbix 7.0 LTS ]
- Zkontrolujte a případně optimalizujte výkon současné databáze dle doporučení vendora a s ohledem na požadavky Zabbix instance
- Zkontrolujte, zda verze veškerých komponent odpovídají matici kompatiblity nové verze Zabbix
- Zazálohujte konfigurační soubory Zabbix serveru a Zabbix proxy
- Zázálohujte databáze Zabbix serveru, případně Zabbix proxy
- Zazálohujte veškeré možné úpravy „na míru“, které byly na úrovni Zabbix ručně provedeny
- Musíte vypnout HA na straně Zabbix serveru.
Kontrola verzí
Nejprve zkontrolujeme verze všech komponent, na kterých je běh Zabbixu a jeho součástí závislý, tak aby přesně odpovídaly oficiální matici kompatibility pro Zabbix 7.0.
php-fpm -v
psql -V
Záloha konfiguračních souborů Zabbix
Než se pustíme do dalších kroků, zazálohujeme veškeré konfigurační soubory Zabbix serveru a Zabbix Proxy.
cp -R /etc/zabbix/ /<backup directory>/
cp -R /usr/lib/zabbix/alertscripts/ /<backup directory>/
cp -R /usr/lib/zabbix/externalscripts/ /<backup directory>/
cp -R /usr/share/zabbix/ /<backup directory>/
cp /etc/httpd/conf/httpd.conf /<backup directory>/
cp /etc/httpd/conf.d/zabbix.conf /<backup directory>/
Zastavení služeb
Nejprve zastavíme Zabbix server a webserver, aby do databáze již nic nezapisovaly.
systemctl stop zabbix-server
systemctl stop httpd
Aktualizace PHP
Nová verze Zabbix 7.0 vyžaduje pro svůj chod PHP v rozmezí verzí 8.0.0 až 8.3.x. Aktuálně máme na serveru verzi 8.0, ale i tak si provedeme aktualizaci.
Případnou aktualizaci provedeme změnou nastavení balíčkovacího systému dnf na úrovni OS. Máme dobré zkušenosti s předposlední verzí, při použití nejnovější verze se může objevit chyba přímo v PHP, která může způsobit problém v používání.
dnf module switch-to php:8.2 -y
Aktualizace databáze
Nejprve zastavíme aktuálně běžící službu PostgreSQL:
(Detailní návod na aktualizaci PostgreSQL naleznete na naší wiki.)
systemctl stop postgresql-13
Následně nainstalujeme konkrétně podporovanou verzi, v našem případě PostgreSQL verze 16:
dnf install -y postgresql16-server
Dále si nainstalujeme rozšíření TimescaleDB, musíme ho však nainstalovat ve stejné verzi, jakou používá vaše stará verze databáze! Pokud nebude ve stejné verzi, nebude nám fungovat příkaz pro upgrade. Pomocí následujícího příkazu si porovnáte aktuálně nainstalovanou verzi pro PostgreSQL 13 a nainstalujete stejné verze balíčků pro PostgreSQL 16:
VERSION=$(rpm -qa | grep timescaledb-2-postgresql-13 | head -1 | sed -n 's/.*-\([0-9]\+\.[0-9]\+\.[0-9]\+\)-.*/\1/p') && dnf install -y timescaledb-2-loader-postgresql-16-$VERSION-0.el9.x86_64 timescaledb-2-postgresql-16-$VERSION-0.el9.x86_64
Poznámka: Pokud verze rozšíření TimescaleDB nebude stejná, uvidíte při upgradu následující chybu:
Nyní můžeme přistoupit k inicializaci databáze nové verze PostgreSQL:
/usr/pgsql-16/bin/postgresql-16-setup initdb
Po úspěšné instalaci všech závislostí spustíme dodaný aktualizační skript, který kvůli kompatibilitě zkontroluje a případně i opraví interní tabulky a schémata oproti změnám mezi verzemi (pod uživatelem postgres):
su - postgres
Přeneseme konfiguraci oprávnění (pg_hba.conf) ze staré verze na novou:
cat /var/lib/pgsql/13/data/pg_hba.conf > /var/lib/pgsql/16/data/pg_hba.conf
Případně i konfiguraci samotného databázového serveru (kompatibilitu jednotlivých konfiguračních direktiv mezi verzemi si předem ověřte):
cat /var/lib/pgsql/13/data/postgresql.conf > /var/lib/pgsql/16/data/postgresql.conf
Spustíme migraci databáze
/usr/pgsql-16/bin/pg_upgrade -b /usr/pgsql-13/bin -B /usr/pgsql-16/bin -d /var/lib/pgsql/13/data -D /var/lib/pgsql/16/data -k
Odhlásíme se od uživatele postgres:
logout
Nyní lze zakázat automatické spouštění staré služby po startu:
systemctl disable postgresql-13.service
A nastartovat novou verzi databázového serveru PostgreSQL, včetně jejího automatického spouštění po startu systému:
systemctl enable postgresql-16.service --now
Po úspěšném spuštění PostgreSQL serveru jako první krok musíme zkontrolovat a případně aktualizovat naši TimescaleDB uvnitř Zabbix databáze:
su - postgres
psql -X
\c zabbix
V dalším kroku aktualizujeme stav i v rámci samotné databáze v PostgreSQL:
ALTER EXTENSION timescaledb UPDATE;
Po úspěšné aktualizaci bezpečně opustíme psql konzoli:
exit
Po úspěšné aktualizaci doporučujeme provést VACUUM
a reindexaci databází, toto provedeme následujícími příkazy:
/usr/pgsql-16/bin/vacuumdb --all --analyze-in-stages
reindexdb
Dalším krokem je smazání starého PostgreSQL clusteru:
./delete_old_cluster.sh
rm -rf 13 delete_old_cluster.sh
Nyní můžeme odebrat staré verze balíčků. Odhlásíme se od uživatele postgres a odstraníme nepotřebné balíčky. TimescaleDB balíčky jsou nahrazeny, proto již na systému nejsou a není tedy potřeba je mazat:
logout
dnf remove postgresql13-*
V posledním kroku lze smazat složku obsahující konfigurační soubory staré verze:
rm -rf /usr/pgsql-13/
Aktualizace Zabbix
Vše jsme úspěšně zazálohovali a zaktualizovali všechny verze návazných komponent dle oficiální matice kompatibility nové verze Zabbixu.
Nyní přejdeme k aktualizaci samotného Zabbixu a všech jeho součástí.
Nejprve si stáhneme instalační balíčky pro repozitáře nové verze Zabbixu a smažeme instalační cache:
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
dnf clean all
Po tomto úkonu máme dostupné repozitáře nové verze a můžeme tedy zaktualizovat veškeré další komponenty Zabbix, a to postupně i na všech Zabbix Proxy:
dnf update zabbix-* -y
Po úspěšném dokončení aktualizace balíčků Zabbix serveru a všech jeho součástí můžeme Zabbix znovu spustit, aby se dokončil upgrade databázové struktury, který je nezbytný pro další kroky, protože součástí upgradu je i vytvoření tabulky history_bin
. Existence této tabulky je nutná pro následující kroky aktualizující funkce TimescaleDB.
systemctl start zabbix-server.service
Po úspěšné aktualizaci je nutné Zabbix znovu zastavit, aby bylo možné přejít k dalším krokům aktualizujícím TimescaleDB.
Poznámka: V případě, že se po opětovném spuštění Zabbix serveru objeví chyba ohledně kompatibility databáze, stačí v konfiguračním souboru Zabbix serveru upravit následující direktivu.
V této verzi Zabbix toto není chyba kompatibility, ale pouze chybějící číslo TimescaleDB v samotném zdrojovém kódu Zabbixu!
Odpovídající verze databáze a doplňku pak vždy hledejte v matici kompatibility v oficiální dokumentaci Zabbixu pro vaši konkrétní verzi.
Otevřeme si konfigurační soubor Zabbix serveru:
nano /etc/zabbix/zabbix_server.conf
Zde upravíme následující parametr:
AllowUnsupportedDBVersions=1
A nakonec restartujeme službu Zabbix serveru:
systemctl restart zabbix-server.service
Postupné činnosti i celý proces aktualizace, včetně případných zásahů do struktury databázového schématu, lze sledovat v log souboru Zabbix serveru:
tail -f /var/log/zabbix/zabbix_server.log
Jakmile uvidíme, že upgrade proběhl a Zabbix se začal spouštět, vypneme ho a můžeme pokračovat dalším krokem.
Chybu ohledně history_bin
a tabulky auditlog
můžete ignorovat, protože ji vyřešíme v následujícím kroku. To je také důvod, proč musíme Zabbix ihned po upgradu struktury vypnout.
69771:20241104:132134.582 [Z3005] query failed: [0] PGRES_FATAL_ERROR:ERROR: table "history_bin" is not a hypertable
[select set_integer_now_func('history_bin', 'zbx_ts_unix_now', true)]
69771:20241104:132134.582 Table "history_bin" is not a hypertable. Execute TimescaleDB configuration step as described in Zabbix documentation to upgrade schema.
69802:20241104:132134.585 server #29 started [unreachable poller #1]
69771:20241104:132134.589 [Z3005] query failed: [0] PGRES_FATAL_ERROR:ERROR: unrecognized parameter namespace "timescaledb"
[alter table auditlog set (timescaledb.compress,timescaledb.compress_segmentby='auditid',timescaledb.compress_orderby='clock')]
69771:20241104:132134.590 [Z3005] query failed: [0] PGRES_FATAL_ERROR:ERROR: "auditlog" is not a hypertable or a continuous aggregate
[select add_compression_policy('auditlog', compress_created_before => interval '612000')]
69771:20241104:132134.590 failed to add compression policy to table 'auditlog'
systemctl stop zabbix-server.service
Protože naše Zabbix databáze používá extenzi TimescaleDB, musíme povinně ještě spustit znovu SQL skript obsahující inicializaci hypertabulek. Novinkou ve verzi 7.0 je také hypertabulkovaná tabulka auditlog
a history_bin.
Pozor, tento krok lze provést až po automatické aktualizaci Zabbix databáze po prvním spuštění Zabbix serveru.
- VOLITELNĚ: Tabulka
auditlog
může obsahovat velké množství dat, což může zpomalit proces aktualizace. Zvažte, zda ji nechcete vyprázdnit pomocí příkazuTRUNCATE TABLE auditlog;
, čímž si výrazně zrychlíte proces migrace na tabulkytimescaledb
. Příkaz se spouští nad databází Zabbixu.
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
Po úspěšném dokončení aktualizace balíčků Zabbix serveru a všech jeho součástí můžeme službu znovu spustit:
systemctl start zabbix-server.service
systemctl start httpd
Nastartování serveru si ověřím přes Zabbix server log:
tail -f /var/log/zabbix/zabbix_server.log
Performance tuning po upgrade PostgreSQL
Po úspěšném spuštění Zabbix serveru můžeme udělat ještě další volitelný krok a to je po upgrade DB spustit znovu script timescaledb-tune na její případné doladění.
Jako parametry tohoto příkazu zvolíme cestu ke konfiguračnímu souboru PostgreSQL a zároveň zvýšíme omezení na maximální počet příchozích spojení do databáze, který je implicitně pro potřeby monitoringu příliš nízký:
timescaledb-tune --pg-config=/usr/pgsql-16/bin/pg_config --max-conns=100
Pro aplikaci nově nastavených konfiguračních parametrů zrestartujeme službu PostgreSQL (ideálně vypněte Zabbix server během tohoto procesu, ale není to nutné):
systemctl restart postgresql-16.service
Dokončovací práce
- Zkontrolujte, že správně běží Zabbix server, databázový server a mají správnou verzi
- Zkontrolujte také, zda při startu serveru nebo proxy v systému neuvidíte následující chybu: ‚…the user limit of 1024 file descriptors is insufficient. The maximum number of concurrent checks per worker has been reduced…‘ Návod na odstranění naleznete na naší wiki.
- Zkontrolujte, že běží všechny Zabbix proxy a mají správnou verzi (Od verze 6.0 je zde zpětná kompatibilita, ale i tak doporučujeme používat stejnou verzi, jakou má Zabbix server)
- Zkontrolujte stav Zabbix serveru a Zabbix proxy (log soubory, nepodporované položky, fronty, monitorovací skripty, atd.).
- Zkontrolujte, zda vaše servery mají přiděleny poslední verze oficiálních šablon od Zabbixu. [ Zabbix GIT ]
Podpora pro nový Item Browser
Veškeré potřebné kroky naleznete v samostatném návodu na naší wiki ZDE.
Doinstalace komponent a nastavení pro Reporting
Veškeré potřebné kroky naleznete v samostatném návodu na naší wiki ZDE.
A to je vše! Nyní můžete začít využívat váš nově zaktualizovaný Zabbix ve verzi 7.0 LTS se všemi jeho opravami i novinkami.
Dejte nám Like, sdílejte nás nebo nás sledujte 😍
Ať vám nic neunikne: