如何在10分钟内塔建Zabbix Server HA集群?

2022-04-07 14:25:52 浏览数 (1)

通过使用在Zabbix 6.0 LTS版本中新增的Zabbix Server HA集群功能,在不使用任何外部工具的情况下快速配置和部署多节点Zabbix Server HA集群。让我们看看如何在10分钟内部署Zabbix服务器HA集群。

为什么Zabbix需要HA?

让我们深入探讨什么是高可用性,并尝试定义“高可用性”一词的含义:

  1. 如果一个系统没有单点故障,那么系统是以高可用性模式运行;
  2. 单点故障是导致整个系统停止运行的部件故障;
  3. 在使用高可用性的系统中,冗余是一项要求。在我们的例子中,我们需要一个冗余组件,如果当前活动的组件遇到问题,我们可以将其故障转移到该组件;
  4. 故障切换过程需要透明和自动化;

就Zabbix平台架构而言,单点故障就是我们的Zabbix Server。尽管Zabbix自身非常稳定,但是仍然会因为操作系统级别的问题或其它不可预料的情况(如磁盘空间不足)而发生Zabbix平台崩溃。如果Zabbix Server停机,所有数据收集、问题检测和警报都将停止。这就是为什么Zabbix提供可以实现高可用和冗余的组件非常重要。

如何为Zabbix选择高可用方案

在Zabbix 6.0 LTS版本中增加Zabbix Server HA集群功能支持之前,一般使用第三方HA方案来实现Zabbix Server的高可用。这引发了一场持续的讨论——我应该使用哪种第三方解决方案,以及我应该如何为Zabbix组件配置它?除此之外,您还将拥有一个新的软件层,需要适当的专业知识来部署、配置和管理。当然,也有基于云的HA方案,但大多数情况下,这些方案会产生额外的成本。

没有第三方高可用性工具所需的专业知识可能会导致不必要的Zabbix系统停机,在最坏的情况下,可能会导致Zabbix DB后端不一致。以下是错误配置的高可用性解决方案可能引发的情况:

  1. 自动故障切换可能未正确配置;
  2. 两个Zabbix Server节点同时运行的场景,可能会导致Zabbix数据库后端不一致;
  3. 错误配置STONITH(射中头部的另一个节点)场景——可能导致两个Zabbix Server节点都崩溃;

原生态Zabbix HA高可用方案

Zabbix 6.0 LTS版本所提供的高可用解决方案易于设置,所需的所有步骤都记录在Zabbix文档中。本解决方案不需要任何额外的专业知识,Zabbix将继续提供官方支持、更新和改进。本高可用性解决方案不需要任何新的软件组件——高可用性解决方案将有关Zabbix服务器节点状态的信息存储在Zabbix数据库后端。

Zabbix集群是如何工作的

要启用Zabbix Server的高可用功能,我们首先需要在高可用模式下启动Zabbix服务器组件。为了实现这一点,我们需要查看/etc/zabbix/zabbix_server.conf文件中的两个新参数:

  1. HANodeName – 为Zabbix Server集群指定任意名称;
  2. ExternalAddress – 指定集群节点的地址;

完成更改并添加这些参数后,不要忘记重新启动Zabbix Server集群集节点以应用更改。

Zabbix Server集群名称

HANodeName参数是最重要的配置参数——如果希望在高可用模式下运行Zabbix Server,则必须指定该参数。

  1. 此参数用于指定特定Zabbix Server集群的名称;
  2. 如果未指定HANodeName,Zabbix服务器将不会以集群模式启动;
  3. 节点名称在每个节点上都必须是唯一的;

在我们的示例中,我们可以观察到一个两节点集群,其中zbx-node1是活动节点,zbx-node2是备用节点。这两个节点每5秒都会将其心跳发送到Zabbix数据库后端。如果一个节点停止发送其心跳信号,另一个节点将接管。

Zabbix Server集群 ExternalAddress参数

您还需要指定的第二个参数是ExternalAddress参数:

在我们的示例中,我们使用的是地址node1.example.com。此参数的目的是让Zabbix前端知道当前活动的Zabbix Server的地址,因为Zabbix前端组件也会不断与Zabbix Server进行通信。如果未指定此参数,则Zabbix前端可能无法连接到活动的Zabbix Server节点。

配置Zabbix前端

经验丰富的Zabbix用户可能知道,Zabbix前端有自己的配置文件,其中通常包含Zabbix Server地址和端口号。

如果您使用的是Zabbix Server高可用集群功能,则必须注释掉这些参数,因为它们现在不是静态的,而是依赖于当前活动的Zabbix服务器节点,信息将从Zabbix后端数据库中获取。

全局说明

在上面的例子中,我们可以看到我们有两个节点——zbx-node1,它当前处于活动状态,以及zbx-node2。这些节点可以通过使用node1或node2的外部地址node1.example.com和node2.example.com分别访问。我们可以看到,我们还部署了多个前端。每个前端节点都将连接到Zabbix后端数据库,读取当前活动节点的地址,然后继续连接到该节点。

Zabbix集群模式下,节点的状态说明

Zabbix Server集群模式下的节点存有以下几种状态:

  1. Active–当前处于活动状态的节点。一次只能有一个节点处于活动状态;
  2. Standby–节点当前正在待机模式下运行。多个节点可以具有此状态;
  3. Shutdown–之前检测到该节点,但它已正常关闭;
  4. Unreachable–以前检测到节点,但在未关闭的情况下意外丢失。这可能是由许多不同的原因造成的,例如,节点崩溃或出现网络问题;

在正常情况下,您将有一个活动节点和一个或多个备用节点。例如,如果您正在这些节点上执行一些维护任务,则也需要处于关闭模式的节点。另一方面,如果一个活动节点变得不可访问,则此时一个备用节点将接管。

Zabbix HA Manager

我们如何检查哪个节点当前处于活动状态,哪些节点正在待机模式下运行?首先,我们可以在Zabbix前端看到这一点——稍后我们将对此进行讲述。我们还可以从命令行检查节点状态。在每个节点上——无论是活动节点还是备用节点,您都会看到zabbix_服务器和ha manager进程已经启动。ha manager进程负责每5秒检查一次数据库中的高可用性节点状态,并负责在活动节点出现故障时接管。

另一方面,当前处于活动状态的Zabbix服务器节点将有许多其他进程——数据收集器进程,如轮询器和捕捉器、历史记录和配置同步器,以及许多其他Zabbix子进程。

Zabbix HA模式下各节点状态

系统信息小部件在Zabbix 6.0 LTS中进行了一些更改。它现在能够显示Zabbix Server高可用集群及其各个节点的状态。

系统信息小部件可以显示当前集群模式,并提供了所有集群节点的列表。在我们的示例中,我们可以看到有3个节点——1个活动节点、1个停止节点和1个在待机模式下运行的节点。这样,我们不仅可以看到节点的状态,还可以看到它们的名称、地址和上次访问时间。

切换Zabbix HA节点

节点之间的切换是手动完成的。一旦停止当前活动的Zabbix服务器节点,另一个节点将自动接管。当然,您需要至少有一个节点在待机状态下运行,这样它就可以从发生故障的活动节点接管。

故障转移的工作原理

所有节点每5秒报告一次状态。无论何时关闭一个节点,它都会进入关闭状态,5秒钟后另一个节点将接管。但如果一个节点出现故障,工作流就有点不同,这种情况下需要考虑故障转移延迟。默认情况下,故障切换延迟为1分钟。备用节点将等待一分钟,等待发生故障的活动节点更新其状态,如果在一分钟内活动节点仍然不可见,则备用节点将接管。

Zabbix Server集群调整

可以使用ha_set_failover_delay 命令来调整故障切换延迟。故障转移延迟的支持范围为10秒到15分钟。在大多数情况下,默认值1分钟可以正常工作,但也可能有一些例外,这在很大程度上取决于具体环境情况。

我们可以使用ha_remove_node 命令删除节点。此命令要求我们指定要删除的节点的ID。

连接Agent和Proxy 将Zabbix Agent连接到Zabbix Server集群

Passive Zabbix Agent 配置:

  1. 被动Zabbix代理要求将所有Zabbix Server节点信息写入配置文件中的Server参数中;
  2. Zabbix Server节点以逗号分隔指定;

指定所有Zabbix Server节点的列表后,被动Zabbix代理将接受来自所有指定节点的连接。

Active Zabbix Agent 配置:

  1. Active Zabbix Agent要求在ServerActive参数下的配置文件中写入所有Zabbix Server节点信息;
  2. Zabbix Server节点信息需要用分号分隔;

请注意区别——Passive Zabbix Agent的列表以逗号分隔,Active Zabbix Agent的节点以分号分隔!

将Zabbix Proxy连接到Zabbix Server集群

Proxy配置与Agent配置非常相似。我们可以让Proxy在被动模式(Passive)或主动模式(Active)下运行。

对于Passive Zabbix Proxy,我们需要在Proxy配置文件的Server参数下列出集群节点。这些节点以逗号分隔的列表中指定。Proxy将接受来自任何Zabbix Server节点的连接。

对于Active Zabbix Proxy,我们需要在配置文件中的Server参数下列出我们的Zabbix Server节点,但这次节点名称将用分号分隔。

结论:建立Zabbix HA集群

最后,让我们总结一下设置Zabbix Server HA集群所需的所有步骤:

  1. 在所有Zabbix服务器群集节点上以高可用模式启动Zabbix Server——这可以通过在Zabbix服务器配置文件中提供HANodeName参数来完成;
  2. 注释掉Web前端配置文件中的ZBX_服务器和ZBX_服务器_端口;
  3. 在所有Zabbix Agent配置文件中的Server和ServerActive参数中列出Zabbix Server集群节点信息;
  4. 在Zabbix Proxy配置文件中的Server参数列出所有Zabbix Server集群节点;
  5. 对于其他监视类型,如SNMP–确保您的端点接受来自所有Zabbix Server节点的连接;

问答

问:Zabbix前端的高可用性如何?可以设置吗?

答:自Zabbix 5.2以来,这已经得到了支持。您所要做的就是根据需要部署尽可能多的Zabbix前端节点,不要忘记正确配置外部地址,以便Zabbix前端能够连接到Zabbix服务器。

问:高可用性功能是否会对网络或Zabbix后端数据库造成性能影响?

答:不会出现这种情况。集群节点发送到数据库后端的心跳是非常小的消息,记录在一个较小的Zabbix数据库表中,因此性能影响应该可以忽略不计。

问:从PC/Corosync/Pacemaker等第三方解决方案迁移到原生Zabbix Server高可用性集群时,最佳做法是什么?对如何实现这一目标有什么建议吗?

答:这里最复杂的部分是在不破坏现有环境的情况下删除现有的高可用性解决方案。完成后,您所要做的就是将Zabbix实例升级到Zabbix 6.0 LTS,并遵循本文中描述的配置步骤。请记住,如果您执行的是升级而不是全新安装,那么配置文件将不会有新的配置参数,因此必须手动添加这些参数。

0 人点赞