【入門編】Zabbix 7.0の新機能「高可用性(HA)クラスター」の構築手順とFailoverの挙動を検証する – 運用監視・オブザーバビリティ活用バイブル

こんにちは!現場のインフラを預かるエンジニアなら、一度はこんな悪夢を見たことがあるはずです。

「夜中に突然鳴り響くアラート。起きて確認したら、よりによって監視サーバー自身がハードウェア障害で沈んでいた……。監視しているはずのシステムがブラックボックス化し、何が起きているか全くわからない絶望の沈黙」

監視サーバーのダウンは、運用者にとって最大の恐怖です。これまで、Zabbixでこの単一障害点(SPOF)を回避するためには、PacemakerとCorosyncを組み合わせたり、共有ストレージを用意したりと、極めて複雑で頭の痛くなるクラスター設計が必要でした。

しかし、Zabbix 7.0 LTSの登場により、その苦悩は過去のものとなりました。
Zabbix 7.0では、ビルトイン(標準機能)の高可用性(HA)クラスター機能が非常に実用的な形で我々の手元に届きました。外部の複雑なクラスタウェアに頼らず、Zabbixサーバープロセスだけでセキュアかつ堅牢な冗長化が組めるのです。

これをマスターすれば、あなたの夜の安眠と、障害時の絶望的な心理的負担が劇的に軽減されますよ。さあ、一緒にその中身と実践的な構築手順を紐解いていきましょう!

—

1. Zabbix 7.0 ビルトインHAクラスターのアーキテクチャを知る

まずは、「なぜZabbix 7.0のHAが優れているのか」という設計思想からお話しします。

従来のZabbixサーバーは、1つのデータベースに対して1つのサーバープロセスが接続する形をとっていました。Zabbix 7.0のHAクラスターでは、複数のZabbixサーバー(ノード)を起動し、それらを「Active(アクティブ)」と「Standby(スタンバイ)」の役割に自動で振り分けます。

[ Zabbix Frontend (Nginx/Apache) ]
│
├──> [ Zabbix Server Node 1 (Active) ] ──┐
│ │ (DB共有 &
└──> [ Zabbix Server Node 2 (Standby) ] ──┴ Heartbeat)
│
[ PostgreSQL / MySQL ]

  • Activeノード: 実際の監視実行、ポーリング、トリガー評価、エージェントからのデータ受信をすべて行います。
  • Standbyノード: 常に待機状態であり、データベースへの接続を維持しつつ、アクティブノードからの生存確認(ハートビート)を監視しています。
  • 自動フェイルオーバー: アクティブノードが応答しなくなると、スタンバイノードがそれを検知し、自らをアクティブに昇格させて処理を引き継ぎます。

特筆すべきは、外部の複雑なクラスタ制御機構が不要という点です。Zabbixサーバーのプロセス内部で自律的に調停が行われるため、構築のハードルが圧倒的に下がっています。

—

2. 構築ハンズオン:2ノードHAクラスターを作ってみよう

今回は、検証用に2台のLinuxサーバー(Node 1, Node 2)を用意し、Zabbix 7.0 LTSのHAクラスターを組み上げていきます。データベースは外部の共通DB(PostgreSQLまたはMySQL)を1つ用意してください。

前提条件

  • OS: Ubuntu 22.04 LTS または RHEL 9系
  • Zabbixバージョン: 7.0 LTS
  • 共通データベースサーバーが構築済みであること

—

Step 1: 各ノードへのZabbix 7.0のインストール

Node 1とNode 2の両方で、公式リポジトリを追加し、Zabbixサーバーをインストールします(今回はDBにPostgreSQLを使用する例で進めます)。

Zabbix 7.0 リポジトリのインストール (Ubuntu 22.04の場合)
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_7.0-2+ubuntu22.04_all.deb
sudo apt update

Zabbixサーバー、フロントエージェントのインストール
sudo apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts

Step 2: データベースの初期設定(初回のみ)

Node 1からのみ、共通DBに対してスキーマを流し込みます。Node 2からは流し込む必要はありません(同じDBを見るため)。

DBの作成とスキーマインポート (DBホストが別にある想定)
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql -h -U

—

Step 3: Zabbixサーバー設定ファイル(zabbix_server.conf)の魔法の記述

ここが最も重要な心臓部です。Node 1とNode 2の両方の `/etc/zabbix/zabbix_server.conf` を編集し、HAに関するパラメータを書き込みます。

両方のサーバーで、共通のDB接続情報を書いた上で、以下のHA関連パラメータを設定してください。

【Node 1 の設定例】

— 基本的なDB接続設定 —
DBHost=
DBName=zabbix
DBUser=zabbix
DBPassword=your_secure_password

— HAクラスター設定 —
このノードが参加するHAクラスターの名前(両ノードで完全に一致させること)
HANodeName=zabbix-node-01

このノードのフロントエンドやエージェントから見える自ホストのIP/ホスト名
NodeAddress=192.168.1.101:10051

【Node 2 の設定例】

— 基本的なDB接続設定 —
DBHost=
DBName=zabbix
DBUser=zabbix
DBPassword=your_secure_password

— HAクラスター設定 —
クラスター名はNode 1と同一にする
HANodeName=zabbix-node-02

このノードのIP/ホスト名
NodeAddress=192.168.1.102:10051

> 💡 先輩エンジニアのワンポイントアドバイス
> `NodeAddress` は非常に重要です。フェイルオーバーが発生した際、Zabbixのフロントエンド(Web画面)は「現在どのノードがアクティブか」を判断し、アクティブなサーバーへトラフィックを誘導するためにこのアドレスを参照します。正確なIPまたはDNS名を記述してください。

—

Step 4: サービスの起動とクラスター状態の確認

設定が完了したら、両方のノードでZabbixサーバーを起動します。

sudo systemctl restart zabbix-server
sudo systemctl enable zabbix-server

さあ、正しくクラスターが組めているか、Zabbixのログまたは専用コマンドで確認してみましょう!以下のコマンドを叩いてみてください。

sudo zabbix_server -R ha_status

【実行結果のイメージ】

Nodes in cluster:
ID HOST PORT STATUS LAST ACCESS
192.168.1.101 zabbix-node-01 10051 active [ 3s ago ]
192.168.1.102 zabbix-node-02 10051 standby [ 3s ago ]

お見事!Node 1が `active`、Node 2が `standby` として美しく協調動作を始めています。この瞬間、あなたの監視基盤はSPOFを脱却しました。

—

3. 運命の瞬間:フェイルオーバー挙動の検証とタイムラグ

理論が分かったところで、実際に障害をシミュレートしてみましょう。「本当に自動で切り替わるのか?」をご自身の目で確かめるのが一番の安心につながります。

検証シナリオ:Activeノードの強制停止

Node 1(アクティブ)のサービスを強制的に停止させます。

[Node 1にて]
sudo systemctl stop zabbix-server

この瞬間からストップウォッチを片手に、Node 2のログ(`/var/log/zabbix/zabbix_server.log`)を監視してみましょう。

【ログの推移】

Node 1からのハートビートが途絶え、フェイルオーバーのカウントダウンが始まる
zabbix_server [PID] : HA: node “zabbix-node-01” status changed to offline
zabbix_server [PID]: HA: our status has been changed to active

フェイルオーバーにかかるタイムラグの正体

Zabbix 7.0では、アクティブノードがダウンしてからスタンバイノードが「おや、主が死んだぞ」と気づいて昇格するまでにタイムアウト時間が存在します。

デフォルトでは、フェイルオーバーの判定時間は30秒に設定されています(環境やバージョンによって微調整可能ですが、標準では約30秒〜最大でも数分以内に切り替わります)。

つまり、Node 1を停止してから約30秒後、`zabbix_server -R ha_status` をNode 2側で実行すると……

Nodes in cluster:
ID HOST PORT STATUS LAST ACCESS
192.168.1.101 zabbix-node-01 10051 offline [ 25s ago ]
192.168.1.102 zabbix-node-02 10051 active [ 1s ago ]

見事にNode 2が `active` に昇格しました!
この間、Zabbixのフロントエンドにアクセスすると、自動的に新しいアクティブノード(Node 2)へと接続が切り替わり、監視データが途切れることなく(厳密には30秒間のポーリング空白は生まれますが、プロセス自体は継続して)動き続けます。

—

4. 現場で絶対に知っておくべき運用上の注意点

これで完璧にHA構成が組めましたが、現場のプロとして、運用上絶対に押さえておかなべき「落とし穴」をいくつか共有しておきます。

1. データベース(DB)は依然としてSPOFである
Zabbixサーバー自体は冗長化されましたが、その背後にあるPostgreSQL/MySQLが単一障害点であれば、システム全体としては止まります。DB側も必ずレピュケーション構成やマネージドサービス(AWS RDSなど)で冗長化してください。
2. コンフィグファイルの完全な同期
Node 1とNode 2の `zabbix_server.conf` の内容(特にカスタムパラメータや外部スクリプトのパスなど)は、常に完全に一致させておく必要があります。片方だけ設定を変え忘れると、フェイルオーバーした瞬間に予期せぬ挙動を引き起こします。
3. フェイルバック(復旧時の戻し)の挙動
障害から復旧した元のノード(今回の例ではNode 1)を再起動した場合、こいつは勝手にActiveを奪い返すことはしません。安全のために「Standby」ノードとしてクラスターに復帰します。
必要であれば、手動で役割を戻すか、そのままスタンバイとして稼働させ続けます(この「勝手に暴走して主権を奪い合わない」設計が非常にスマートで安全です)。

—

まとめ

今回は、Zabbix 7.0 LTSの新機能であるビルトインHAクラスターの構築と、フェイルオーバーの挙動をディープに解説しました。

  • 面倒なクラスタウェア(Pacemaker等)はもう不要
  • 設定ファイルに数行書くだけでマルチノード冗長化が完了
  • アクティブ・スタンバイ間のフェイルオーバーも完全自動

これをマスターすれば、あなたの管理する監視基盤の信頼性は文字通り「次のステージ」へと引き上げられます。「夜中に監視サーバーの死活で起こされる悪夢」とは今日でお別れしましょう。

明日のインフラ運用が、もっと快適でエキサイティングなものになりますように。それではまた、現場でお会いしましょう!

タイトルとURLをコピーしました