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

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

[comment]: # ({45336edb-ea8bc3db})
### 概述

通常高可用性(HA)需要在几乎不需要停机的关键基础设施中使用。为了在服务出现任何失败故障时进行故障转移，进行接管。

Zabbix提供了一个**本地**的高可用性解决方案，方便设置，不需要任何HA专业知识也可以完成。本地Zabbix HA对于防止Zabbix server的软件/硬件故障或减少维护停机时间是有用的。

Zabbix高可用模式下，多台Zabbix server作为集群中的节点运行。 当集群中的一个Zabbix server 处于active 时，其他服务器处于standy，随时准备在必要时接管。

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

切换到Zabbix HA还不确定。 您可以在任何时候切换回standalone状态。

参见: [实施细节](#实施细节)

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

[comment]: # ({c6caa06e-567d3671})
### 启用高可用集群

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

[comment]: # ({f13fd2c4-23e81771})
##### 以集群节点方式启动 Zabbix 服务器

要将 Zabbix 服务器作为集群节点启动，需要在服务器[配置](/manual/appendix/config/zabbix_server)中设置两个参数：

- **HANodeName** 参数必须为将作为 HA 集群节点的每个 Zabbix 服务器指定。

这是一个唯一的节点标识符（例如 `zabbix-node-01`），服务器将在 agent 和 proxy 配置中通过该标识被引用。如果未指定 HANodeName，则服务器将以独立模式启动。

- **NodeAddress** 参数必须为每个节点指定。

NodeAddress 参数（address:port）将由 Zabbix 前端用于连接到活动服务器节点。NodeAddress 必须与相应 Zabbix 服务器的 IP 或 FQDN 名称一致。

修改配置文件后，重启所有 Zabbix 服务器。此时它们将作为集群节点启动。服务器的新状态可在 *报表* → *[系统信息](/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]: # ({/f13fd2c4-23e81771})

[comment]: # ({847772ad-3e9035e5})

##### 准备前端

确保Zabbix server 地址:端口在前端配置中**没有定义** (在frontend文件目录的`conf/zabbix.conf.php`中找到)。

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

Zabbix前端将通过读取Zabbix数据库中节点表的设置来自动检测活动节点。使用活动节点的节点地址作为Zabbix server地址。

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

[comment]: # ({2f714fac-d47b6ef3})
##### proxy 配置

HA 集群节点（服务器）必须列在被动或主动模式的 Zabbix proxy 的配置中。

对于被动代理，节点名称必须列在 proxy 服务器[参数](/manual/appendix/config/zabbix_proxy)中，以**逗号**分隔。

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

对于主动代理，节点名称必须列在 proxy 服务器[参数](/manual/appendix/config/zabbix_proxy)中，以**分号**分隔。
```
Server=zabbix-node-01;zabbix-node-02
```

[comment]: # ({/2f714fac-d47b6ef3})

[comment]: # ({38a0f5af-f2fc0e77})

##### Agent 配置

Zabbix agent 或者 Zabbix agent 2.必须将HA 集群节点列入配置文件。

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

启用被动检查agent, 节点名称必须列入Server[参数](/manual/appendix/config/zabbix_agentd), 使用**逗号**分隔.

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

启用主动检查agent, 节点名称必须列入ServerActive[参数](/manual/appendix/config/zabbix_agentd). 注意，对于主动检查agent，节点与其他server之间必须用逗号分隔，而节点本身必须用**分号**分隔，例如:

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

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

[comment]: # ({7b57e8f3-311341fc})

### 故障切换到备用节点

如果主节点停止，Zabbix将自动故障转移到另一个节点。 要发生故障转移，必须至少有一个节点处于备用状态。

故障转移会有多快? 所有节点每5秒更新一次他们的最后访问时间 (和状态，如果它被更改)。因此: 

-   如果主节点关闭并成功报告其状态为“stopped”，另一个节点将在**5秒内**接管。

-  如果主节点关闭/变得不可用，而无法更新其状态，备用节点将等待**故障转移延迟** + 5秒来接管。

故障转移延迟是可配置的，支持的范围在10秒到15分钟之间(默认为1分钟)。 要修改故障切换延迟，可以执行以下命令:

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

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

[comment]: # ({d66dd0c0-593144b8})
### 管理 HA 集群

当前 HA 集群的状态可以使用专用的[runtime control](/manual/concepts/server#runtime-control)选项进行管理：

-   `ha_status` - 在 Zabbix 服务器日志中（以及输出到 stdout）记录 HA 集群状态
-   `ha_remove_node=target` - 删除由其
    \<target\> 标识的 HA 节点 - 节点的名称或 ID（名称/ID 可以
    从运行 ha\_status 的输出中获取），例如：

```
zabbix_server -R ha_remove_node=zabbix-node-02
```

请注意，活动/备用节点无法被删除。

-   `ha_set_failover_delay=delay` - 设置 HA 故障切换延迟（介于 10 秒到 15 分钟之间；支持时间
    后缀，例如 10s、1m）

可以通过以下方式监控节点状态：

-   在 *报告* → *[系统信息](/manual/web_interface/frontend_sections/reports/status_of_zabbix#high-availability-nodes)* 中
-   在 *系统信息* 仪表板小部件中
-   使用服务器的 `ha_status` runtime control 选项（见
    上文）。

`zabbix[cluster,discovery,nodes]` 内部监控项可用于节点
发现，因为它会返回包含高可用性节点信息的 JSON。

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

[comment]: # ({fcf2cf5e-82cd7e56})
#### 禁用HA集群

禁用HA高可用集群:

-   备份配置文件
-   停止standby节点
-   从活动的主 server上移除HANodeName 参数
-   重启主 server (它将以standalone 模式启动)

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

[comment]: # ({a10496ea-7d944a36})
### 升级 HA 集群

要对 HA 节点执行主要版本升级，请执行以下操作：

-   停止所有节点；
-   创建完整数据库备份；
-   如果数据库使用复制，请确保所有节点都正常并且处于同步状态。如果复制中断，请不要升级。
-   选择将要执行数据库升级的单个节点，通过注释掉 HANodeName 参数将其配置为 standalone 模式后再 [升级](/manual/installation/upgrade) ；
-   确保数据库升级已完全完成 (*系统信息* 应该显示 Zabbix server 正在运行)；
-   在 HA 模式下重新启动节点；
-   升级并启动其余节点 (不需要将它们更改为 standalone 模式，因为此时数据库已升级完成)。

次要版本的升级，升级第一个节点就足够了，确保该节点已升级并正在运行，然后开始升级下一个节点。

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

[comment]: # ({15bf4a9f-f4d3143a})

### 实施细节

Zabbix server 支持高可用性(HA)集群是一个可选择的解决方案。本地HA解决方案被设计为易于使用，它可以跨站点工作，并且对Zabbix识别的数据库没有特定的要求。用户可以自由地使用本地Zabbix HA解决方案或第三方HA解决方案，这取决于什么最适合其环境中的高可用性需求。

该解决方案由多个zabbix\_server实例或节点组成。
每一个节点：
-   单独配置
-   使用相同的数据库
-   可能有几种模式: active, standby, unavailable, stopped

一次只能有一个节点处于活动状态(工作)。 备节点只运行一个进程——HA管理器。备用节点不进行数据收集、处理或其他常规server活动; 它不监听端口; 它们拥有最少的数据库连接。

主节点和备节点每5秒更新一次上次访问时间。每个备节点监控主节点的最后一次访问时间。如果主节点的最后一次访问时间超过了“故障转移延迟”秒，备用节点将自己切换为主节点，并将“不可用”状态分配给先前的主节点。

主节点监视自己的数据库连接—如果丢失超过“故障转移延迟-5”秒，它必须停止所有处理并切换到备用模式。主节点还监视备用节点的状态——如果备用节点的最后访问时间超过了“故障转移延迟”时间，备用节点将被分配为“不可用”状态。

这些节点被设计成跨较小的Zabbix版本兼容。

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