🍔

Zabbix HAクラスタの構築

に公開

はじめに

自宅環境の機器を監視したいことと業務のお勉強も兼ねてZabbixを構築することにした。
やっぱりサーバと言ったらクラスタにしたいなってことで、リッチにHA構成にする。

環境

OSのインストールは割愛するが、VMでDB含めて3ノード構成。
ちょっとでもZabbixの可用性を高めるため、OSをプライマリ、セカンダリで別にしてみる。
単一障害点になってしまうが、DBはシングルとする。VMレベルでHAクラスタにするかは検討中。

Host:

  1. OS:Proxmox VE 8.4.1 (N150のミニPC)

Guest:

  1. zbxdb01(DataBase)
    IP:192.168.2.105, OS:Ubuntu 24.04, DB:TimescaleDB(PostgreSQL 17)
  2. zbx01(Primary)
    IP:192.168.2.106, OS:Ubuntu 24.04
  3. zbx02(Secondary)
    IP:192.168.2.107, OS:AlmaLinux 9

※初期ユーザーはzabbixで作成し、rootパスワードは無効(未設定)。

PostgreSQL 17, TimescaleDB 2.20 のインストール @zbxdb01

PostgreSQLをインストールし、ユーザー:zabbix データベース:zabbix を作成。
所有者はzabbixにする。

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install -y postgresql
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix

スキーマ:zabbix も作成。

$ psql -U zabbix
zabbix=> CREATE SCHEMA zabbix AUTHORIZATION zabbix;
CREATE SCHEMA

Zabbixサーバから接続できるように、以下のファイルを設定。

/etc/postgresql/17/main/pg_hba.conf
+ host    all             all             192.168.2.0/24          scram-sha-256
/etc/postgresql/17/main/postgresql.conf
- #listen_addresses = 'localhost'         # what IP address(es) to listen on;
+ listen_address = '*'

TimescaleDBのリポジトリを追加し、インストール。
timescaledb-tuneで、postgresql.confのチューニングもやってもらう。

echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/timescaledb.gpg

sudo apt update
sudo apt install -y timescaledb-2-postgresql-17

sudo timescaledb-tune

上記設定後、postgresqlを再起動しておく。

sudo systemctl restart postgresql

zabbixスキーマにTimescaleDBを有効化させる。

echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix

Zabbixのリポジトリを追加し、DBへZabbix用のオブジェクトをインポートする。

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-sql-scripts

zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix

Zabbix 4.0 LTS のインストール @zbx01, zbx02

事前にNginxのインストールを済ましておく。

zbx01 (Ubuntu)
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

sudo apt update
sudo apt install -y nginx
zbx02 (AlmaLinux)
sudo dnf install -y dnf-utils

echo "[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true" \
    | sudo tee /etc/yum.repos.d/nginx.repo

sudo dnf upgrade
sudo dnf install -y nginx

Zabbixのダウンロードページで環境を入力するとコマンドのガイドが出てくるので参考にする。
Apacheでもガイド通りにやるのには変わりないはず。

https://www.zabbix.com/jp/download

※ただし、今回の手順ではDBは別ノードで構築しているので、zabbix-sql-scriptsのインストールとDB自体の設定は除外。

zbx01 (Ubuntu)
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-agent
zbx02 (AlmaLinux)
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
sudo dnf clean all
dnf install -y zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-selinux-policy zabbix-agent

DBのパスワードとアドレス、スキーマをZabbixの設定ファイル(zabbix_server.conf)に追加する。

/etc/zabbix/zabbix_server.conf
+ DBSchema=zabbix
+ DBPassword=zabbix
+ DBHost=192.168.2.105

zabbix_server.confにHA用に自ノードの情報も追記しておく。

/etc/zabbix/zabbix_server.conf (zbx01)
HANodeName=zbx01
NodeAddress=192.168.2.106:10051
/etc/zabbix/zabbix_server.conf (zbx02)
HANodeName=zbx02
NodeAddress=192.168.2.107:10051

Zabbixのフロントエンドのリクエストが待ち受けられるようにNginxの設定をする。
server_nameはそれぞれのホストを指定する。
Ubuntuの方は最初からシンボリックリンクが張られていた。

/etc/zabbix/nginx.conf (zbx01)
- # listen 8080;
- # server_name example.com;
+ listen 8080;
+ server_name 192.168.2.106;
/etc/nginx/conf.d/zabbix.conf
- # listen 8080;
- # server_name example.com;
+ listen 8080;
+ server_name 192.168.2.107;

Ubuntu機の場合はNginxとphp-fpmの実行ユーザーが一致していなかったので、Zabbix側のphp-fpmの設定ファイルを変更する。

/etc/zabbix/php-fpm.conf (zbx01)
- user = www-data
- group = www-data
- listen.owner = www-data
+ user = nginx
+ group = nginx
+ listen.owner = nginx

AlmaLinux機の場合はfirewalldがデフォルトで有効になっているので、8080, 10050, 10051ポートを許可する。

zbx02 (AlmaLinux)
sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --add-port=10050/tcp --zone=public --permanent
sudo firewall-cmd --add-port=10051/tcp --zone=public --permanent
sudo firewall-cmd --reload

グラフのフォントが日本語非対応らしいので、Noto Sans Mono CJK JPをインストールして設定しておく。
どうやらalternativesでgraphfont.ttfをスイッチしているらしい。

sudo wget https://github.com/googlefonts/noto-cjk/raw/main/Sans/Variable/TTF/Mono/NotoSansMonoCJKjp-VF.ttf -P /usr/local/share/fonts/
zbx01 (Ubuntu)
sudo update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font /usr/local/share/fonts/NotoSansMonoCJKjp-VF.ttf 20
zbx02 (AlmaLinux)
sudo alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-web-font /usr/local/share/fonts/NotoSansMonoCJKjp-VF.ttf 20

Zabbixサーバ関連のサービスを自動起動対象にする。

zbx01 (Ubuntu)
sudo systemctl restart zabbix-server zabbix-agent nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent nginx php8.3-fpm
zbx02 (AlmaLinux)
sudo systemctl restart zabbix-server zabbix-agent nginx php-fpm
sudo systemctl enable zabbix-server zabbix-agent nginx php-fpm

Zabbix へログイン・設定 @zbx01, zbx02

ここまでの設定すれば、http://<Zabbixのノード>:8080/でログインページが開けるはず。

すべてOKであるか確認。

DBの情報を入力し

タイムゾーン等々設定すれば完了。

設定のインストールが完了後、ログインページが表示されるようになる。
初期パスワードは、Admin/zabbxで入れる。

ログインしてみたら、Zabbixサーバーの起動が「いいえ」になっている。

どうやらインストールしたTimescaleDBのバージョンが新しく、サポート外のDBの場合起動しないらしいのでバージョンを無視するオプションを有効化する。

/etc/zabbix/zabbix_server.conf
+ AllowUnsupportedDBVersions=1

更新を反映させるため、Zabbixサーバーを再起動

sudo systemctl restart zabbix-server

Zabbixサーバーの起動が「はい」になった。
(ZabbixのTimescaleDBのバージョンがサポートに含まれるようになったら、上記オプションは戻しておきたい。)

参考

https://www.zabbix.com/documentation/7.0/jp/manual/appendix/install/timescaledb
https://docs.timescale.com/self-hosted/latest/install/installation-linux/
https://nginx.org/en/linux_packages.html
https://www.zabbix.com/documentation/7.0/jp/manual/concepts/server/ha
https://qiita.com/Yasuwo/items/3706871bf14efadeed51

Discussion