1 高可用性(HA)
概要
実質的にダウンタイムを発生させられない重要なインフラストラクチャーでは、高可用性(HA)が求められます。したがって、停止してしまう可能性があるサービスについては、現在のサービスが停止してしまったときに処理を引き継げるようにするためのフェイルオーバーオプションが必要です。
Zabbixは、セットアップが簡単で、以前のHAの専門知識を必要としない組み込まれた高可用性のソリューションを提供します。組み込まれたZabbixのHAは、Zabbixサーバーのソフトウェア/ハードウェアの障害に対する保護やメンテナンスに伴うダウンタイムを削減するのに役に立つでしょう。
Zabbixの高可用性モードでは、複数のZabbixサーバーがクラスター内のノードとして実行されます。クラスター内の1台のZabbixサーバーがアクティブである間、他のサーバーはスタンバイ状態となり、必要に応じて引き継ぐことができるよう準備されます。

ZabbixのHAへの切り替えは戻すことが可能で、いつでもスタンドアロン環境に戻すことができます。
参照: 実装の詳細
高可用性の有効化
Zabbixサーバーをクラスターノードとして起動
Zabbixサーバーをクラスターノードとして起動するには、サーバー設定で2つのパラメーターを設定する必要があります。
- HANodeNameパラメーターは、HAクラスターノードとなるZabbixサーバーごとに指定する必要があります。
これは、エージェントおよびプロキシ設定でサーバーが参照される一意のノード識別子(例: zabbix-node-01)です。HANodeNameが指定されていない場合、サーバーはスタンドアロンモードで起動されます。
- NodeAddressパラメーターは、ノードごとに指定する必要があります。
NodeAddressパラメーター(アドレス:ポート番号)は、Zabbixフロントエンドがアクティブなサーバーノードに接続するために使用されます。NodeAddressは、それぞれのZabbixサーバーのIPまたはFQDN名と一致する必要があります。
設定ファイル変更後、すべてのZabbixサーバーを再起動します。 これでクラスターノードとして機能します。 サーバーの最新ステータスは、レポート → システム情報で確認できます。
zabbix_server -R ha_status
上記ランタイムコマンドは、現在のHAクラスターの状態をZabbixサーバーログ(およびstdout)に記録します。

Webインターフェースの準備
Webインターフェースの設定ファイル(Webインターフェースのファイルがあるディレクトリ内のconf/zabbix.conf.php)内で、Zabbixサーバーの アドレス:ポート番号 が 設定されていない ことを確認してください。

ZabbixのWebインターフェースは、Zabbixデータベースのノードテーブルから設定を読み取って、アクティブノードを自動的に検出します。アクティブノードのノードアドレスがZabbixサーバーのアドレスとして使用されます。
Zabbixプロキシの設定
HAクラスターノード(サーバー)は、パッシブまたはアクティブモードのZabbixプロキシの設定ファイルにリスト化されている必要があります。
パッシブプロキシの場合、ノード名をプロキシ設定ファイルのServerパラメーターにカンマ区切りでリスト化する必要があります。
Server=zabbix-node-01,zabbix-node-02
アクティブプロキシの場合、ノード名をプロキシ設定ファイルのServerパラメーターにセミコロン区切りでリスト化する必要があります。
Server=zabbix-node-01;zabbix-node-02
Zabbixエージェントの設定
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クラスターの現在のステータスは、専用のランタイムコントロールオプションを使用して管理できます。
ha_status- Zabbixサーバーログ(および標準出力)にHAクラスターのステータスを記録します。ha_remove_node=target- <target>で識別されるHAノードを削除します。<target>はノードの名前またはIDであり、実行中のha_statusの出力から取得できます。例:
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を返すため、ノード検出に使用できます。
高可用性の無効化
高可用性クラスターを無効にするには:
- 設定ファイルのバックアップコピーを作成する
- スタンバイノードを停止する
- アクティブなプライマリサーバーから HANodeName パラメータを削除
- プライマリサーバーを再起動 (スタンドアロンモードで起動します)
HAクラスターのアップグレード
HAノードのメジャーバージョンアップグレードを実行するには、次の手順を実行します :
- 全てのノードを停止する。
- データベースのフルバックアップを作成する。
- データベースがレプリケーションを使用している場合は、すべてのノードが同期していて問題がないことを確認してください。レプリケーションが壊れている場合はアップグレードしないでください。
- データベースのアップグレードを実行する単一ノードを選択し、HANodeNameをコメントアウトしてその構成をスタンドアロンモードに変更して、アップグレードします。
- データベースのアップグレードが完了したことを確認します (システム情報には、Zabbix サーバーが実行中であると表示されます)。
- ノードをHAモードで再起動します。
- 残りのノードをアップグレードして起動します (この時点でデータベースはすでにアップグレードされているため、スタンドアロンモードに変更する必要はありません)。
マイナーバージョンのアップグレードでは、最初のノードをアップグレードし、それがアップグレードされて実行されていることを確認してから、次のノードでのアップグレードを開始するだけで十分です。
実装の詳細
高可用性 (HA) クラスターはオプトインソリューションであり、Zabbixサーバーでサポートされています。 ネイティブHAソリューションは、簡単に使用できるように設計されており、複数のサイトで機能し、Zabbixが認識するデータベースに関する特定の要件はありません。 ユーザーは、環境の高可用性要件に最適なものに応じて、ネイティブのZabbix HAソリューションまたはサードパーティのHAソリューションを自由に使用できます。
このソリューションは複数のzabbix_serverインスタンスまたはノードで構成されています。 すべてのノードについて :
- 個別に構成
- 同じデータベースを使用
- いくつかのモードがあるかもしれません : アクティブ、スタンバイ、使用不可、停止
一度にアクティブ (稼働) できるノードは 1 つだけです。 スタンバイノードは、HAマネージャーという1つのプロセスのみを実行します。スタンバイノードは、データの収集、処理、その他の通常のサーバーの仕事を行いません。 ポートをリッスンしません。 データベース接続は最小限です。
アクティブノードとスタンバイノードは両方とも、最終アクセス時刻を5秒ごとに更新します。各スタンバイノードは、アクティブノードの最終アクセス時刻を監視します。アクティブノードの最終アクセス時刻が'failover delay'秒を超えている場合、スタンバイノードは自身をアクティブノードに切り替え、以前のアクティブノードに'使用不可'ステータスを割り当てます。
アクティブノードは自身のデータベース接続を監視します。接続がfailover delay-5秒を超えて失われた場合は、すべての処理を停止してスタンバイモードに切り替ります。 アクティブノードは、スタンバイノードのステータスも監視します。スタンバイノードの最終アクセス時刻が'failover delay'秒を超えている場合、スタンバイノードには'使用不可'ステータスが割り当てられます。
ノードは、Zabbixのマイナーバージョン間で互換性があるように設計されています。