Zabbix HAクラスタの構築
はじめに
自宅環境の機器を監視したいことと業務のお勉強も兼ねてZabbixを構築することにした。
やっぱりサーバと言ったらクラスタにしたいなってことで、リッチにHA構成にする。
環境
OSのインストールは割愛するが、VMでDB含めて3ノード構成。
ちょっとでもZabbixの可用性を高めるため、OSをプライマリ、セカンダリで別にしてみる。
単一障害点になってしまうが、DBはシングルとする。VMレベルでHAクラスタにするかは検討中。
Host:
- OS:Proxmox VE 8.4.1 (N150のミニPC)
Guest:
- zbxdb01(DataBase)
IP:192.168.2.105, OS:Ubuntu 24.04, DB:TimescaleDB(PostgreSQL 17) - zbx01(Primary)
IP:192.168.2.106, OS:Ubuntu 24.04 - 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サーバから接続できるように、以下のファイルを設定。
+ host all all 192.168.2.0/24 scram-sha-256
- #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のインストールを済ましておく。
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
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でもガイド通りにやるのには変わりないはず。
※ただし、今回の手順ではDBは別ノードで構築しているので、zabbix-sql-scripts
のインストールとDB自体の設定は除外。
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
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
)に追加する。
+ DBSchema=zabbix
+ DBPassword=zabbix
+ DBHost=192.168.2.105
zabbix_server.conf
にHA用に自ノードの情報も追記しておく。
HANodeName=zbx01
NodeAddress=192.168.2.106:10051
HANodeName=zbx02
NodeAddress=192.168.2.107:10051
Zabbixのフロントエンドのリクエストが待ち受けられるようにNginxの設定をする。
server_name
はそれぞれのホストを指定する。
Ubuntuの方は最初からシンボリックリンクが張られていた。
- # listen 8080;
- # server_name example.com;
+ listen 8080;
+ server_name 192.168.2.106;
- # listen 8080;
- # server_name example.com;
+ listen 8080;
+ server_name 192.168.2.107;
Ubuntu機の場合はNginxとphp-fpmの実行ユーザーが一致していなかったので、Zabbix側のphp-fpm
の設定ファイルを変更する。
- user = www-data
- group = www-data
- listen.owner = www-data
+ user = nginx
+ group = nginx
+ listen.owner = nginx
AlmaLinux機の場合はfirewalldがデフォルトで有効になっているので、8080
, 10050
, 10051
ポートを許可する。
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/
sudo update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font /usr/local/share/fonts/NotoSansMonoCJKjp-VF.ttf 20
sudo alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-web-font /usr/local/share/fonts/NotoSansMonoCJKjp-VF.ttf 20
Zabbixサーバ関連のサービスを自動起動対象にする。
sudo systemctl restart zabbix-server zabbix-agent nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent nginx php8.3-fpm
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の場合起動しないらしいのでバージョンを無視するオプションを有効化する。
+ AllowUnsupportedDBVersions=1
更新を反映させるため、Zabbixサーバーを再起動
sudo systemctl restart zabbix-server
Zabbixサーバーの起動が「はい」になった。
(ZabbixのTimescaleDBのバージョンがサポートに含まれるようになったら、上記オプションは戻しておきたい。)
参考
Discussion