実質的にダウンタイムを発生させられない重要なインフラストラクチャーでは、高可用性(HA)が求められます。したがって、停止してしまう可能性があるサービスについては、現在のサービスが停止してしまったときに処理を引き継げるようにするためのフェールオーバーオプションが必要です。
Zabbixは、セットアップが簡単で、以前のHAの専門知識を必要としない 組み込まれた高可用性のソリューションを提供します。組み込まれたZabbixのHAは、Zabbixサーバーのソフトウェア/ハードウェアの障害に対する保護やメンテナンスに伴うダウンタイムを削減するのに役に立つでしょう。
Zabbixの高可用性モードでは、複数のZabbixサーバーがクラスター内のノードとして実行されます。クラスター内の1台のZabbixサーバーがアクティブである間、他のサーバーはスタンバイ状態となり、必要に応じて引き継ぐことができるよう準備されます。
ZabbixのHAへの切り替えは戻すことが可能で、いつでもスタンドアロン環境に戻すことができます。
こちらも参照: 実装の詳細
Zabbixサーバーをクラスターノードとして起動するには、サーバー設定で2つのパラメーターを設定する必要があります。
これは、エージェントおよびプロキシ構成でサーバーが参照される一意のノード識別子 (例: zabbix-node-01
) です。 HANodeName が指定されていない場合、サーバーはスタンドアロン モードで起動されます。
The NodeAddress parameter (address:port) will be used by Zabbix frontend to connect to the active server node. NodeAddress must match the IP or FQDN name of the respective Zabbix server. NodeAddress パラメータ (アドレス:ポート番号) は、Zabbix フロントエンドがアクティブなサーバー ノードに接続するために使用されます。 NodeAddress は、それぞれの Zabbix サーバーの IP または FQDN 名と一致する必要があります。
設定ファイル変更後、すべての Zabbix サーバーを再起動します。 これでクラスタノードとして機能します。 サーバーの最新ステータスは、レポート → システム情報 で確認できます。
zabbix_server -R ha_status
上記ランタイム コマンドは、現在の HA クラスターの状態を Zabbix サーバー ログ (および stdout) に記録します。
Webインターフェースの設定ファイル(Webインターフェースのファイルがあるディレクトリ内のconf/zabbix.conf.php
)内で、Zabbixサーバーの アドレス:ポート番号 が 設定されていない ことを確認してください。
ZabbixのWebインターフェースは、Zabbixデータベースのノードテーブルから設定を読み取って、アクティブノードを自動的に検出します。アクティブノードのノードアドレスがZabbixサーバーのアドレスとして使用されます。
HAクラスターノード (サーバー) は、パッシブまたはアクティブモードの Zabbix プロキシの設定ファイルにリスト化されている必要があります。
パッシブプロキシの場合、ノード名をプロキシ設定ファイルの Server パラメータ に カンマ 区切りでリスト化する必要があります。
Server=zabbix-node-01,zabbix-node-02
アクティブプロキシの場合、ノード名をプロキシ設定ファイルの Server パラメータ に セミコロン 区切りでリスト化する必要があります。
Server=zabbix-node-01;zabbix-node-02
HAクラスターのノード(サーバー)は、ZabbixエージェントまたはZabbixエージェント2の設定ファイルに並べて記述することが必要です。
パッシブチェックを行うのならば、ノード名をServerパラメーターに カンマ 区切りで設定する必要があります。
Server=zabbix-node-01,zabbix-node-02
アクティブチェックを行うのならば、ノード名をServerActiveパラメーターに セミコロン 区切りで設定する必要があります。例:
ServerActive=zabbix-node-01;zabbix-node-02
アクティブなノードが停止すると、Zabbix は自動的に別のノードにフェイルオーバーします。 フェイルオーバーが発生するには、少なくとも 1 つのノードがスタンバイ状態である必要があります。
フェイルオーバーはどのくらいの速さで実行されるか。 すべてのノードは5 秒ごとに最終アクセス時刻 (および変更されている場合はステータス) を更新します。 したがって :
アクティブ ノードがシャットダウンし、そのステータスが"停止"と報告された場合、別のノードが 5 秒以内に引き継ぎます。
アクティブ ノードがシャットダウンするか、ステータスを更新できずに使用できなくなった場合、スタンバイ ノードは フェイルオーバー遅延 + 5 秒待機して引き継ぎます。
フェイルオーバー遅延は構成可能で、サポートされる範囲は 10 秒から 15 分 (デフォルトでは 1 分) です。 フェイルオーバー遅延の変更は次のコマンドを実行します。
zabbix_server -R ha_set_failover_delay=5m
HA クラスターの現在のステータスは、専用の ランタイム コントロール オプションを使用して管理できます。
ha_status
- Zabbixサーバーログ(および標準出力)にHAクラスターのステータスを記録します。ha_remove_node=target
- リスト内のノード名またはID (ha_status を実行した出力から取得できます)を<target> で指定してHAノードを削除します。例:zabbix_server -R ha_remove_node=zabbix-node-02
アクティブ/スタンバイ ノードは削除できないことに注意してください。
ha_set_failover_delay=delay
- HAフェイルオーバー遅延の設定(10秒から15分まで。タイムサフィックスがサポートされています。例: 10s, 1m)ノードのステータスは次のように監視できます :
ha_status
ランタイム制御オプション(上記を参照)zabbix[cluster,discovery,nodes]
の内部アイテムは、高可用性ノード情報を含む JSON を返すため、ノード検出に使用できます。
高可用性クラスターを無効にするには:
高可用性 (HA) クラスターはオプトインソリューションであり、Zabbixサーバーでサポートされています。 ネイティブHAソリューションは、簡単に使用できるように設計されており、複数のサイトで機能し、Zabbixが認識するデータベースに関する特定の要件はありません。 ユーザーは、環境の高可用性要件に最適なものに応じて、ネイティブのZabbix HAソリューションまたはサードパーティのHAソリューションを自由に使用できます。
このソリューションは複数のzabbix_serverインスタンスまたはノードで構成されています。 すべてのノードについて :
一度にアクティブ (稼働) できるノードは 1 つだけです。 スタンバイノードは、HAマネージャーという1つのプロセスのみを実行します。スタンバイノードは、データの収集、処理、その他の通常のサーバーの仕事を行いません。 ポートをリッスンしません。 データベース接続は最小限です。
アクティブノードとスタンバイノードは両方とも、最終アクセス時刻を5秒ごとに更新します。各スタンバイノードは、アクティブノードの最終アクセス時刻を監視します。アクティブノードの最終アクセス時刻が'failover delay'秒を超えている場合、スタンバイノードは自身をアクティブノードに切り替え、以前のアクティブノードに'使用不可'ステータスを割り当てます。
アクティブノードは自身のデータベース接続を監視します。接続がfailover delay-5
秒を超えて失われた場合は、すべての処理を停止してスタンバイモードに切り替ります。 アクティブノードは、スタンバイノードのステータスも監視します。スタンバイノードの最終アクセス時刻が'failover delay'秒を超えている場合、スタンバイノードには'使用不可'ステータスが割り当てられます。
ノードは、Zabbixのマイナーバージョン間で互換性があるように設計されています。