1 高可用性(HA)

概要

高可用性(HA)は、ほぼダウンタイムを許容できない重要なインフラストラクチャで通常必要とされます。 そのため、障害が発生する可能性のあるサービスには、現在のサービスが停止した場合に引き継ぐフェイルオーバーオプションを用意しておく必要があります。

Zabbix は、設定が簡単で、事前の HA に関する知識を必要としない ネイティブ の高可用性ソリューションを提供します。 Zabbix のネイティブ HA は、Zabbix サーバーのソフトウェア/ハードウェア障害に対する追加の保護層として、またはメンテナンスによるダウンタイムを減らすために役立ちます。

Zabbix の高可用性モードでは、複数の Zabbix サーバーがクラスタ内のノードとして実行されます。 クラスタ内の 1 台の Zabbix サーバーがアクティブである一方、他のサーバーは待機状態となり、必要に応じて引き継げるよう準備されています。

Zabbix HA への切り替えは非拘束的です。 いつでもスタンドアロン運用に戻すことができます。

関連情報: 実装の詳細

高可用性の有効化

Zabbixサーバーをクラスターノードとして起動する

Zabbixサーバーをクラスターノードとして起動するには、サーバーの設定で次の2つのパラメータが必要です。

  • 各HAクラスターノードとなるZabbixサーバーには、HANodeName パラメータを指定する必要があります。

これは一意のノード識別子(例: zabbix-node-01)であり、エージェントおよびプロキシの設定内でサーバーを参照する際に使用されます。 HANodeName を指定しない場合、サーバーはスタンドアロンモードで起動されます。

  • 各ノードには、NodeAddress パラメータを指定する必要があります。

NodeAddress パラメータ(address:port)は、Zabbix Webインターフェースがアクティブなサーバーノードへ接続するために使用されます。 NodeAddress は、該当するZabbixサーバーのIPアドレスまたはFQDN名と一致している必要があります。

設定ファイルを変更した後は、すべてのZabbixサーバーを再起動してください。 これにより、クラスターノードとして起動されます。 サーバーの新しい状態は、Reports > System information で確認でき、また次のコマンドを実行しても確認できます。

zabbix_server -R ha_status

このランタイムコマンドは、現在のHAクラスターステータスをZabbixサーバーログ(およびstdout)に記録します。

Webインターフェースの準備

Zabbix サーバーの address:port が Webインターフェースの設定で定義されていないことを確認してください(Webインターフェースのファイルディレクトリ内の conf/zabbix.conf.php にあります)。

Zabbix Webインターフェースは、Zabbix データベースの nodes テーブルから設定を読み取ることで、アクティブなノードを自動検出します。 アクティブなノードのノードアドレスが Zabbix サーバーのアドレスとして使用されます。

プロキシ設定

HA クラスタのノード(サーバー)は、パッシブまたはアクティブの Zabbix プロキシのいずれかの設定に一覧表示されている必要があります。

パッシブプロキシの場合、ノード名はプロキシの Server パラメータカンマ 区切りで記載する必要があります。

Server=zabbix-node-01,zabbix-node-02

アクティブプロキシの場合、ノード名はプロキシの Server パラメータセミコロン 区切りで記載する必要があります。

Server=zabbix-node-01;zabbix-node-02
エージェント設定

HAクラスタノード(サーバー)は、Zabbix エージェントまたは Zabbix エージェント 2 の設定に記載する必要があります。

パッシブチェックを有効にするには、ノード名を Server parameterカンマ 区切りで記載する必要があります。

Server=zabbix-node-01,zabbix-node-02

アクティブチェックを有効にするには、ノード名を ServerActive parameter に記載する必要があります。 アクティブチェックでは、ノードは他のサーバーとはカンマで区切り、ノード同士は セミコロン で区切る必要があることに注意してください。例:

ServerActive=zabbix-node-01;zabbix-node-02

スタンバイノードへのフェイルオーバー

アクティブノードが停止すると、Zabbix は自動的に別のノードへフェイルオーバーします。
フェイルオーバーを発生させるには、少なくとも 1 つのノードがスタンバイ状態である必要があります。

フェイルオーバーはどのくらい速く行われますか?
すべてのノードは、最後のアクセス時刻(および変更があった場合はステータス)を 5 秒ごとに更新します。
そのため、次のようになります。

  • アクティブノードが停止し、その状態を "stopped" として報告できた場合、別のノードが 5 秒以内 に引き継ぎます。
  • アクティブノードが停止した、または利用不可になったものの、ステータスを更新できなかった場合、スタンバイノードは引き継ぎまで フェイルオーバー遅延 + 5 秒 待機します。

フェイルオーバー遅延は設定可能で、対応範囲は 10 秒から 15 分です(デフォルトは 1 分)。
フェイルオーバー遅延を変更するには、次を実行します。

zabbix_server -R ha_set_failover_delay=5m

HAクラスタの管理

HAクラスタの現在の状態は、専用の runtime control オプションを使用して管理できます。

  • ha_status - Zabbixサーバーのログ(および stdout)に HAクラスタの状態を記録する。
  • ha_remove_node=target - <target> で識別される HAノードを削除する。<target> はノードの名前または ID です(名前/ID は ha_status の実行結果から取得できます)。例:
zabbix_server -R ha_remove_node=zabbix-node-02

アクティブ/スタンバイノードは削除できないことに注意してください。

  • ha_set_failover_delay=delay - HA フェイルオーバー遅延を設定する(10秒から15分の間。時間の接尾辞をサポートします。例: 10s, 1m)。

ノードの状態は次の方法で監視できます。

  • Reports > System information で確認する。
  • System information ダッシュボードウィジェットで確認する。
  • サーバーの ha_status runtime control オプションを使用する(上記参照)。

zabbix[cluster,discovery,nodes] 内部アイテムは、ハイアベイラビリティノード情報を含む JSON を返すため、ノードの検出に使用できます。

HAクラスタの無効化

高可用性クラスタを無効にするには、次の手順を実行します。

  1. 設定ファイルのバックアップを作成します。
  2. スタンバイノードを停止します。
  3. アクティブなプライマリーサーバーから HANodeName パラメーターを削除します。
  4. プライマリーサーバーを再起動します(スタンドアロンモードで起動します)。

HAクラスタのアップグレード

HAノードのメジャーバージョンアップグレードを実行するには、次の手順に従います。

  1. すべてのノードを停止します。
  2. データベースの完全バックアップを作成します。
  3. データベースでレプリケーションを使用している場合は、すべてのノードが同期されており、問題がないことを確認します。レプリケーションが壊れている場合はアップグレードしないでください。
  4. データベースのアップグレードを実行する単一のノードを選択し、HANodeName をコメントアウトして設定をスタンドアロンモードに変更し、そのノードをアップグレードします。
  5. データベースのアップグレードが完全に完了していることを確認します(システム情報 に Zabbix サーバーが稼働中であることが表示されている必要があります)。
  6. ノードを HA モードで再起動します。
  7. 残りのノードをアップグレードして起動します(この時点ではデータベースはすでにアップグレードされているため、スタンドアロンモードに変更する必要はありません)。

マイナーバージョンアップグレードでは、最初のノードをアップグレードし、それがアップグレード済みで稼働していることを確認してから、次のノードのアップグレードを開始すれば十分です。

実装の詳細

高可用性(HA)クラスタはオプトイン方式のソリューションであり、Zabbix サーバーでサポートされています。
ネイティブの HA ソリューションは、使いやすさを重視して設計されており、サイトをまたいで動作し、Zabbix が認識するデータベースに特別な要件はありません。
ユーザーは、環境の高可用性要件に最も適したものに応じて、ネイティブの Zabbix HA ソリューションまたはサードパーティの HA ソリューションを自由に使用できます。

このソリューションは、複数の zabbix_server インスタンスまたはノードで構成されます。
各ノードは次のとおりです。

  • 個別に設定されます。
  • 同じデータベースを使用します。
  • active、standby、unavailable、stopped の複数のモードを持つ場合があります。

同時にアクティブ(稼働中)になれるノードは 1 つだけです。standby ノードは 1 つのプロセス、つまり HA マネージャーのみを実行します。
standby ノードは、データ収集、処理、その他の通常のサーバー活動を行いません。ポートをリッスンせず、データベース接続数も最小限です。

active ノードと standby ノードの両方が、5 秒ごとに最終アクセス時刻を更新します。
各 standby ノードは、active ノードの最終アクセス時刻を監視します。
active ノードの最終アクセス時刻が 'failover delay' 秒を超えると、standby ノードは自分自身を active ノードに切り替え、以前 active だったノードに unavailable ステータスを割り当てます。

active ノードは、自身のデータベース接続を監視します。接続が failover delay-5 秒を超えて失われた場合、すべての処理を停止し、standby モードに切り替える必要があります。
active ノードは standby ノードのステータスも監視します。standby ノードの最終アクセス時刻が 'failover delay' 秒を超えると、その standby ノードには unavailable ステータスが割り当てられます。

これらのノードは、Zabbix のマイナーバージョン間で互換性を持つように設計されています。