はじめに
先日Zabbix6.0が正式リリースされました。
新しく入ったHA機能やKubernets対応を試してみたかったので、AWS上で構築して触ってみました。
今回の記事はHA編です。Kubernets編は別途。
環境
・プラットフォーム:AWS EC2
・OS:CentOS8
・Zabbix:6.0.0
・DB:RDS(MySQL8.0.27)
構成
環境構築
EC2インスタンス作成
まずはZabbix01分を作る。詳細は割愛。02はあとでAMIから作る。
SELINUX無効
# SELINUX無効
vi /etc/selinux/config
------
SELINUX=disabled
------
shutdown -r now
Zabbixインストール
# リポジトリインストール
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
dnf clean all
# zabbix関連パッケージインストール
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql- scripts zabbix-selinux-policy zabbix-agent2 zabbix-web-japanese
RDSインスタンス作成
DBセットアップ
RDSインスタンス作成が完了したら、Zabbix01から以下を実施。
# セットアップ用にmysqlパッケージインストール
dnf install mysql
# DB接続
mysql -uzabbix -p -h <RDSエンドポイント>
# DB作成
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
# ユーザ作成&権限付与(ソースIPは参考)
mysql> create user zabbix@'172.31.0.0/255.255.0.0' identified by '<DBパスワード>';
mysql> grant all privileges on zabbix.* to zabbix@'172.31.0.0/255.255.0.0';
mysql> quit;
# テーブル作成
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p -h <RDSエンドポイント> zabbix
zabbix server設定
vi /etc/zabbix/zabbix_server.conf
------
DBHost=<RDSエンドポイント>
DBPassword=<DBパスワード>
------
サービス起動
systemctl start zabbix-server zabbix-agent2 httpd php-fpm
zabbixセットアップ
ブラウザで、 以下にアクセスしてポチポチ進める
http://<EC2パブリックIP>/zabbix
- 日本語を選択
- 前提条件が全てOKになっていることを確認
- データベースホストにRDSエンドポイント、パスワードをそれぞれ入力
- zabbixサーバー名とタイムゾーンを変更
- 確認して進む
- 終了
- Adminでログイン(初期パスワードは公式に記載あり)
- ダッシュボードが表示される
(個人的には4.0までしか触ったことなかったので、メニューが縦型になったのが新鮮。。汗)
HAクラスタ設定
- Zabbix01からAMI作ってZabbix02を作成
- Zabbix01,02 conf変更
# Zabbix Server設定 (Zabbix01,02)
vi /etc/zabbix/zabbix_server.conf
---
HANodeName=Zabbix01 #02はZabbix02
NodeAddress=<IP>:10051
---
# フロントエンド設定(Zabbix02のみ)
vi /etc/zabbix/web/zabbix.conf.php
---
$ZBX_SERVER_NAME = 'Zabbix02';
---
systemctl restart zabbix-server
- Target01 conf変更
# zabbix agent2設定
vi /etc/zabbix/zabbix_agent2.conf
---
Server=<Zabbix01のIP>,<Zabbix02のIP>
ServerActive=<Zabbix01のIP>,<Zabbix02のIP>
---
systemctl restart zabbix-agent2
HAクラスタ設定が完了すると、GUIのレポート→システム情報からノード情報が確認できるようになる。便利!
HA機能の仕組み
- 以下のZabbix Conference Japan2021での資料を読んだうえで、公式ドキュメントを読むと分かりやすかったです。
- ポイントだけ書くと以下。
- Active/Standby構成。
- 同一DBを共有。
- クラスタノード全てで起動する HA Managerプロセスが状態管理。
- 5秒毎に最終アクセス時間を更新。
- アクティブノードの最終アクセス時間がフェールオーバー遅延時間(デフォルト60秒,最小10秒)を超過すると、スタンバイノードがアクティブに昇格。
HA関連コマンド
アクティブノードで実行できる。
# HAステータス確認
# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address Status Last Access
1. cl03mx3ak00011b43f0hi0a7r Zabbix01 172.31.9.220:10051 active 2s
2. cl03n1ky60001225kzt8x8j42 Zabbix02 172.31.17.234:10051 standby 4s
## スタンバイノードでやると怒られる
# zabbix_server -R ha_status
Runtime commands can be executed only in active mode
# フェールオーバー遅延時間設定(デフォルト60秒)
# zabbix_server -R ha_set_failover_delay=10s
HA failover delay set to 10 seconds
HA実践
- フェールオーバー遅延時間を10秒にした状態で実施。
- Zabbix Serverの設定はここまでで変更した部分以外はデフォルトのまま。
計画停止想定: アクティブノードのzabbix-server停止
- アクティブノードのzabbix-server停止したところ、
1秒以内にスタンバイノードが昇格開始した。 - (アクティブノードのHAmanagerが即pausedになるため、フェールオーバー遅延時間は関係なく昇格が行われている様子)
- 監視間隔1秒で設定していたCPU使用率監視アイテムでも値取得途切れず。
- ※アクティブ昇格してからZabbix Serverの各子プロセスが起動するため、
子プロセス数を多く設定している環境だと、監視再開にかかる時間はかなり変わるはず。
# アクティブノードのzabbix-server停止
systemctl stop zabbix-server
# Zabbix01(ACT→STB)のzabbix_server.log ※サーバのタイムゾーンはUTC
3131:20220227:161749.391 HA manager has been paused
3193:20220227:161749.391 syncing history data in progress...
3193:20220227:161749.391 syncing history data done
3131:20220227:161750.332 HA manager has been stopped
3129:20220227:161750.336 syncing trend data...
3129:20220227:161750.345 syncing trend data done
3129:20220227:161750.345 Zabbix Server stopped. Zabbix 6.0.0 (revision 5203d2ea7d).
# Zabbix02(STB→ACT)のzabbix_server.log ※サーバのタイムゾーンはUTC
1301:20220227:152041.547 "Zabbix02" node started in "standby" mode
1301:20220227:161750.499 "Zabbix02" node switched to "active" mode
1301:20220227:161750.500 server #0 started [main process]
1656:20220227:161750.501 server #2 started [configuration syncer #1]
1655:20220227:161750.502 server #1 started [service manager #1]
1657:20220227:161750.683 server #3 started [alert manager #1]
1658:20220227:161750.684 server #4 started [alerter #1]
略
計画外停止想定: アクティブノードのI/F落とす(DB接続不可)
- アクティブノードのI/F停止したところ、15秒ほどでスタンバイノードが昇格開始した。
(5秒毎の最終アクセス時間更新のタイミングによって、フェールオーバー遅延時間+αはブレると思われる。) - 監視間隔1秒で設定していたCPU使用率監視アイテムでは16秒ほど値取得途切れた
- zabbix-server停止と同様、子プロセス数を多く設定している環境だと、監視再開にかかる時間はかなり変わるはず。
# アクティブノードのI/F停止 (16:48:41頃)
ifdown eth0
# Zabbix01(ACT→STB)のzabbix_server.log ※サーバのタイムゾーンはUTC
3535:20220227:164846.545 [Z3001] connection to database 'zabbix' failed: [2005] Unknown MySQL server host 'zabbix.catoz1y8otuh.ap-northeast-1.rds.amazonaws.com' (-2)
3535:20220227:164846.545 database connection lost
3530:20220227:164849.413 "Zabbix01" node switched to "standby" mode
3546:20220227:164849.413 executing housekeeper
3546:20220227:164849.414 [Z3001] connection to database 'zabbix' failed: [2005] Unknown MySQL server host 'zabbix.catoz1y8otuh.ap-northeast-1.rds.amazonaws.com' (-2)
3546:20220227:164849.414 database is down: reconnecting in 10 seconds
3647:20220227:164849.431 starting HA manager
3647:20220227:164849.431 HA manager started in standby mode
3647:20220227:164858.434 [Z3001] connection to database 'zabbix' failed: [2005] Unknown MySQL server host 'zabbix.catoz1y8otuh.ap-northeast-1.rds.amazonaws.com' (-2)
3647:20220227:164859.434 [Z3001] connection to database 'zabbix' failed: [2005] Unknown MySQL server host 'zabbix.catoz1y8otuh.ap-northeast-1.rds.amazonaws.com' (-2)
3647:20220227:164900.434 [Z3001] connection to database 'zabbix' failed: [2005] Unknown MySQL server host 'zabbix.catoz1y8otuh.ap-northeast-1.rds.amazonaws.com' (-2)
# Zabbix02(STB→ACT)のzabbix_server.log ※サーバのタイムゾーンはUTC
1779:20220227:164855.752 "Zabbix02" node switched to "active" mode
1779:20220227:164855.753 server #0 started [main process]
1796:20220227:164855.754 server #2 started [configuration syncer #1]
1795:20220227:164855.754 server #1 started [service manager #1]
1797:20220227:164855.922 server #3 started [alert manager #1]
1798:20220227:164855.923 server #4 started [alerter #1]
1800:20220227:164855.929 server #6 started [alerter #3]
1799:20220227:164855.930 server #5 started [alerter #2]
略
おわりに
- pacemaker等サードパーティ製品なしにお手軽にHA組めるようになったのはGood!!
- HA構成が同一DB共有と聞いて、商用だと結局Zabbixとは別でDB冗長化の仕組みを入れないといけないから面倒だなと初めは感じたが、RDSのようなマネージドDBを使うとその点は簡単にクリアでき、今更ですが便利な時代になったなとしみじみ・・。
- ACT/STB構成ならではのフェールオーバー時の監視中断時間があるため、ACT/ACT構成を採用する要件があるシステムは今までどおりサードパーティ製品が必要。
参考
おまけ
- dnfエラー。CentOS8がサポート切れになったのを忘れていました。。
# dnf list
CentOS-8 - AppStream 127 B/s | 38 B 00:00
Error: Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: No URLs in mirrorlist