IR 情報

お問い合わせ

BLOG

Zabbix テック・ラウンジ

2022 年 04 月 27 日

Zabbix 6.0 の新機能:Zabbix サーバーの HA クラスター(構築編)

概要

Zabbix 6.0 で Zabbix サーバーに HA クラスター機能が追加されました。この機能によりサードパーティのクラスターソフトウェアを使用せずに Zabbix サーバーのみで HA クラスターを構築できるため、監視のダウンタイムを減らすことが容易になります。

本記事では、Zabbix サーバーの HA クラスターを構築し、フェールオーバーなどの動作について確認します。

構築方法

HA クラスターの各ホストは同じ DB サーバーにアクセスします。そのため、今回は DB サーバーを Zabbix サーバーとは独立した別のホストにインストールします。DB サーバーが停止すると Zabbix サーバーが起動していても正常に監視ができなくなってしまうため、実際の運用では DB サーバーの冗長化について考慮する必要があるでしょう。

検証環境

今回の検証では以下のように 4 つのホストを用意します。

検証環境

ホスト ホスト名 IP アドレス
Zabbix サーバー 1 zbxsv1 10.2.190.81
Zabbix サーバー 2 zbxsv2 10.2.190.82
DB サーバー zbxdb 10.2.190.83
監視対象ホスト zbxtest1 10.2.190.84

検証では OS は MIRACLE LINUX 8.4 を使用し、MIRACLE ZBX 6.0.2 をインストールしています。パッケージをインストールして設定ファイルの DB サーバーのアクセス情報を設定するところまでは通常の手順と変わらないため、インストールマニュアルを参照して作業を進めます。

また、検証環境では、DB サーバーと同じホストに Web フロントエンドを構築しています。こちらも特にインストール手順の変更はありません。インストールマニュアルを参照して作業を進めます。

Zabbix サーバーのクラスター設定

クラスターの設定を追加するため zabbix_server.conf の以下のパラメーターを変更します。

Zabbix サーバー 1:

HANodeName=zbxsv1
NodeAddress=10.2.190.81:10051

Zabbix サーバー 2:

HANodeName=zbxsv2
NodeAddress=10.2.190.82:10051

HANodeName はクラスターの各ノードの表示などに使用される名前で、このパラメーターを設定すると Zabbix サーバーはスタンドアロンのサーバーではなくクラスターのノードとして起動します。

NodeAddress は Zabbix の Web フロントエンドと Zabbix サーバーのアクティブなノードとの間の通信で使用されます。Zabbix サーバーの HA クラスターを構成している場合は設定しておくのがよいでしょう。

上記のパラメーターを変更して Zabbix サーバーを起動すると HA クラスターとして動作します。

Zabbix エージェントのクラスター設定

Zabbix サーバーの HA クラスター機能ではクラスター内で共有している仮想 IP アドレスを持たないため、監視対象となるホストの Zabbix エージェントの設定にすべてのノードを記載する必要があります。

zabbix_agentd.conf の以下のパラメーターを変更します。

Server=10.2.190.81,10.2.190.82
ServerActive=10.2.190.81;10.2.190.82

Server は「Zabbix エージェント」タイプのアイテムの監視で使用され、アクセスを許可する Zabbix サーバーを指定します。HA クラスター機能を使用している場合はすべてのノードからのアクセスを許可する必要があります。192.168.1.0/24 のような CIDR 表記も可能であるためそちらの表記でも構いません。

ServerActive は「Zabbix エージェント(アクティブ)」タイプのアイテムの監視で使用され、監視データを送信する先の Zabbix サーバーを指定します。HA クラスター機能を使用している場合、クラスターの各ノードをカンマではなくセミコロンで区切る必要があることに注意してください。

動作確認

構築した HA クラスターについて、クラスターの状態やフェールオーバーの動作を確認してみます。

HA クラスターの状態

Web フロントエンドの「レポート」→「システム情報」ページを表示すると以下のようになっています。

システム情報の画面

上段のシステム情報の一覧から HA クラスターが有効になっていることを確認できます。下段にはそれぞれのノードの状態が表示されていることがわかります。ステータス欄はアクティブ、スタンバイ、停止中、利用不可の 4 つのうちいずれかが設定されます。

最終アクセスからの時間欄にはそれぞれのノードが最後に正常に DB アクセスしてからの経過時間が表示されます。正常に動作している場合、各ノードは 5 秒ごとに DB アクセス時刻を更新します。HA クラスター機能では Zabbix サーバー同士が直接お互いの死活監視をしているわけではなく、DB アクセス時刻を使って死活監視をしています。

また、Zabbix サーバーのランタイムコントロールを使って確認することもできます。アクティブなノードで以下のコマンドを実行します。

zabbix_server -R ha_status

コマンドを実行すると以下のようにクラスターの状態が表示されます。

Failover delay: 60 seconds
Cluster status:
# ID Name Address Status Last Access 1. cl1bp0gby00019nigo85tr70d zbxsv1 10.2.190.81:10051 active 2s
2. cl1bp11re00012yihdw88f86s zbxsv2 10.2.190.82:10051 standby 3s

また、各ノードの Zabbix サーバーの様子を確認してみます。まずはアクティブノードを見てみます。zabbix_server.log のサービス起動時のログには以下のようなログが出ています。

 54429:20220331:115212.698 starting HA manager
54429:20220331:115212.704 HA manager started in active mode
54426:20220331:115212.705 server #0 started [main process]
54430:20220331:115212.706 server #1 started [service manager #1]
54431:20220331:115212.706 server #2 started [configuration syncer #1]
...
54426:20220331:115212.928 "zbxsv1" node started in "active" mode

HA manager プロセスがアクティブモードで起動していることがわかります。また、systemctl status コマンドでプロセスツリーを確認すると以下のようになっています。

   CGroup: /system.slice/zabbix-server.service
├─ 54426 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
├─ 54429 /usr/sbin/zabbix_server: ha manager ├─ 54430 /usr/sbin/zabbix_server: service manager #1 [processed 0 events, updated 0 event tags, deleted 0 problems, synced 0 service updates, idle 5.005183 sec during 5.005352 sec] ├─ 54431 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.130020 sec, idle 60 sec]
...

メインプロセスに続いて ha manager プロセスが起動しています。アクティブノードではそれ以外にも Zabbix サーバーの各プロセスが動作しています。

続いてスタンバイノードを見てみます。zabbix_server.log には以下のようなログが出力されています。

 24537:20220331:115227.348 starting HA manager
24537:20220331:115227.355 HA manager started in standby mode
24534:20220331:115227.355 "zbxsv2" node started in "standby" mode

こちらでは HA manager プロセスがスタンバイモードで起動していることがわかります。プロセスツリーは以下のようになっています。

   CGroup: /system.slice/zabbix-server.service
├─ 24534 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
└─ 24537 /usr/sbin/zabbix_server: ha manager

スタンバイノードでは Zabbix サーバーのメインプロセスと ha manager プロセスの 2 つだけが起動した状態で待機するようです。

フェールオーバー

フェールオーバーの動作を確認するため、アクティブノードの Zabbix サーバーが異常終了した場合を想定して Zabbix サーバーを SIGKILL シグナルで終了させます。

SIGKILLシグナル終了時のシステム情報画面

約 1 分後にフェールオーバーが実行され、Zabbix サーバー 2 のほうがアクティブノードに昇格し Zabbix サーバー 1 は利用不可のステータスとなっています。このフェールオーバーまでの時間はデフォルトで 1 分に設定されており、Zabbix サーバーのランタイムコントロールから変更できます。

アクティブノードに昇格した Zabbix サーバー 2 では zabbix_server.log に以下のようなログが出力されています。

 24534:20220331:120106.356 "zbxsv2" node switched to "active" mode
24534:20220331:120106.357 server #0 started [main process]
24554:20220331:120106.358 server #2 started [configuration syncer #1]
24553:20220331:120106.359 server #1 started [service manager #1]
...

アクティブノードに昇格して Zabbix サーバーの各プロセスが起動していることを確認できます。

フェールオーバーが発生したときの監視の状況について確認しましょう。監視が途切れた状況を見やすくするために監視間隔を 1 秒に設定したグラフが以下のようになっていました。

監視の状況の画面

Zabbix サーバー 1 の停止からフェールオーバーして Zabbix サーバー 2 が起動するまでの約 1 分の間は監視が途切れていることを確認できました。

まとめ

Zabbix 6.0 で追加された Zabbix サーバーの HA クラスター機能について解説しました。

サードパーティのクラスターソフトウェアを使用せずに簡単に Zabbix サーバーを冗長化できる機能となっています。ただし、Zabbix サーバーのみの冗長化であるため、実際の運用では DB サーバーの冗長化を考慮する必要があるでしょう。

クラウド環境でマネージド DB サービスを使用しているケースなどでは有用な機能となりそうですが、それ以外ではクラスターソフトウェアを使用して DB サーバーなども含めて冗長化するほうがよいでしょう。


Zabbix 6.0 新機能調査報告書 無料ダウンロード
本記事に関連するリンク
デジタルトランスフォーメーションのための電子認証基盤 iTrust
SSL/TLS サーバー証明書 SureServer Prime
組込み Linux にプラスして 長期間の製品ライフサイクルをサポート EM+PLS