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 パラメーターは、ノードごとに指定する必要があります。

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インターフェースの設定ファイル(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 - リスト内のノード名または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 を返すため、ノード検出に使用できます。

高可用性の無効化

高可用性クラスターを無効にするには:

  • 設定ファイルのバックアップコピーを作成する
  • スタンバイノードを停止する
  • アクティブなプライマリ サーバーから 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のマイナーバージョン間で互換性があるように設計されています。