[comment]: # ({486cd6dc-fb8f0d5a})
# 1 高可用性(HA)

[comment]: # ({/486cd6dc-fb8f0d5a})

[comment]: # ({f0a123dd-ea8bc3db})
### 概要

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

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

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

![](../../../../assets/en/manual/config/zabbix_ha.png)

Zabbix HA への切り替えは、いつでも元に戻せます。
任意の時点でスタンドアロン運用に戻すことができます。

関連情報: [実装の詳細](#implementation-details)

[comment]: # ({/f0a123dd-ea8bc3db})

[comment]: # ({c6caa06e-567d3671})
### 高可用性の有効化

[comment]: # ({/c6caa06e-567d3671})

[comment]: # ({5a71328e-23e81771})
##### クラスタノードとして Zabbix サーバーを起動する

Zabbix サーバーをクラスタノードとして起動するには、サーバーの[設定](/manual/appendix/config/zabbix_server)で 2 つのパラメータが必要です。

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

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

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

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

設定ファイルを変更した後は、すべての Zabbix サーバーを再起動してください。
これにより、クラスタノードとして起動されます。
サーバーの新しい状態は *Reports* > *[System information](/manual/web_interface/frontend_sections/reports/status_of_zabbix#high-availability-nodes)* で確認でき、また次のコマンドを実行しても確認できます。

```
zabbix_server -R ha_status
```

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

![](../../../../assets/en/manual/config/runtime_ha_status.png){width="600"}

[comment]: # ({/5a71328e-23e81771})

[comment]: # ({3c7b24e0-3e9035e5})
##### Webインターフェースの準備

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

![](../../../../assets/en/manual/config/frontend_conf_server_port.png){width="600"}

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

[comment]: # ({/3c7b24e0-3e9035e5})

[comment]: # ({892555c1-d47b6ef3})
##### プロキシ設定

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

パッシブプロキシの場合、ノード名はプロキシの Server [パラメーター](/manual/appendix/config/zabbix_proxy) に **カンマ** 区切りで一覧表示する必要があります。

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

アクティブプロキシの場合、ノード名はプロキシの Server [パラメーター](/manual/appendix/config/zabbix_proxy) に **セミコロン** 区切りで一覧表示する必要があります。
```
Server=zabbix-node-01;zabbix-node-02
```

[comment]: # ({/892555c1-d47b6ef3})

[comment]: # ({c15c2c86-f2fc0e77})
##### エージェント設定

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

![](../../../../assets/en/manual/config/zabbix_ha_agent.png)

パッシブチェックを有効にするには、ノード名を Server [parameter](/manual/appendix/config/zabbix_agentd) に **カンマ** 区切りで記載する必要があります。

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

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

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

[comment]: # ({/c15c2c86-f2fc0e77})

[comment]: # ({e3a57230-311341fc})
### スタンバイノードへのフェイルオーバー

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

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

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

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

```
zabbix_server -R ha_set_failover_delay=5m
```

[comment]: # ({/e3a57230-311341fc})

[comment]: # ({7be5c016-593144b8})
### HAクラスタの管理

HAクラスタの現在の状態は、専用の [runtime control](/manual/concepts/server#runtime-control) オプションを使用して管理できます。

-   `ha_status` - HAクラスタの状態を Zabbix サーバーのログ（および stdout）に出力します。
-   `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](/manual/web_interface/frontend_sections/reports/status_of_zabbix#high-availability-nodes)* で確認する。
-   *System information* ダッシュボードウィジェットで確認する。
-   サーバーの `ha_status` runtime control オプションを使用する（上記参照）。

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

[comment]: # ({/7be5c016-593144b8})

[comment]: # ({7cfdcc75-82cd7e56})
### HAクラスターの無効化

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

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

[comment]: # ({/7cfdcc75-82cd7e56})

[comment]: # ({48f303fd-7d944a36})
### HAクラスタのアップグレード

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

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

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

[comment]: # ({/48f303fd-7d944a36})

[comment]: # ({de56f189-f4d3143a})
### 実装の詳細

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

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

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

同時に active（動作中）になれるノードは 1 つだけです。standby ノードは HA マネージャーという 1 つのプロセスのみを実行します。  
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 のマイナーバージョン間で互換性を保つように設計されています。

[comment]: # ({/de56f189-f4d3143a})
