Zabbix 高可用
Zabbix 高可用性说明
在前面的部署架构中,Zabbix Server 和MySQL都有只有一台主机,存在单点问题
可以使用Keepalived 实现 Zabbix Server的高可用
基础架构为LAMP或LNMP环境,采用keepalived实现zabbix服务器高可用,保证主服务器或者Httpd宕
掉后能切换到从服务器
MySQL数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。
Zabbix 6.0 HA 概述
注意: 从 Zabbix 6.0 官方提供了高可用解决方案
官方链接
https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha
https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha#implementation-details
通常高可用性(HA)需要在几乎不需要停机的关键基础设施中使用。为了在服务出现任何失败故障时进行
故障转移,进行接管。
Zabbix提供了一个本地的高可用性解决方案,方便设置,不需要任何HA专业知识也可以完成。本地
Zabbix HA对于防止Zabbix server的软件/硬件故障或减少维护停机时间是有用的。
Zabbix高可用模式下,多台Zabbix server作为集群中的节点运行。 当集群中的一个Zabbix server 处于
active 时,其他服务器处于standy,随时准备在必要时接管。
启用高可用集群
作为集群节点启动Zabbix server
在server配置中需要两个参数来启动Zabbix server作为集群节点
- HANodeName 集群中每个zabbix server节点名称必须要有且唯一。
这是将在agent和proxy配置中引用server的名称 (例如: zabbix-node-01 )。如果您没有指定
HANodeName,那么服务器将以standalone模式启动。
- NodeAddress 参数必须为每个节点指定。
NodeAddress参数(address:port)将被Zabbix前端用来连接到主server节点。NodeAddress必须匹配相
应Zabbix server的IP或FQDN名称。
Zabbix HA解决方案由多个zabbix_server实例或节点组成。每个节点独立配置,但数据库是使用同一个
实例。
Zabbix HA节点包括以下几种状态:
- active(活动)
- standby(备用)
- unavailable(不可用)
- stopped(停止)
在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进
行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接
实战案例:实现 Zabbix Server 6.0 的高可用
在MySQL创建用户并授权
#如果原有的数据库用户无远程连接权限,需要进行授权
[root@zabbix-server ~]#vi /etc/mysql/mysql.conf.d/mysqld.cnf
#注释下面两行
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
[root@zabbix-server ~]#systemctl restart mysql
[root@zabbix-server ~]#mysql
mysql> create user zabbix@'10.0.0.%' identified by '123456';
mysql> grant all on zabbix.* to zabbix@'10.0.0.%';
两个Zabbix Server 节点都修改配置文件
注意:在没有完成集群配置前,不要同时启动多个Zabbix Server
#主节点配置
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-master
# NodeAddress设置为主节点IP:10051
NodeAddress=10.0.0.200:10051
#重启生效
systemctl restart zabbix-server.service
#备用节点安装相关包
apt update && apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent
#如果nginx需要,修改Nginx配置
vim /etc/zabbix/nginx.conf
#修改下面两行
server {
listen 80;
server_name zabbix.wang.org;
......
#备用节点安装Zabbix server,并修改配置,指向同一个数据库
vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-slave
# NodeAddress设置为备用节点IP:10051
NodeAddress=10.0.0.210:10051
#备用节点初始化配置,修改php配置指向数据库
#初始化的的配置需要在所有Zabbix Server节点上完成,或者将已完成节点的配置文件/etc/zabbix/web/zabbix.conf.php拷贝至其他节点
#默认没有此文件,需要创建
[root@ubuntu2204 ~]#touch /etc/zabbix/web/zabbix.conf.php
#或者从主节点复制文件也可以
[root@ubuntu2204 ~]#rsync -a <zabbix-master>:/etc/zabbix/web/zabbix.conf.php /etc/zabbix/web/zabbix.conf.php
[root@ubuntu2204 ~]#vim /etc/zabbix/web/zabbix.conf.php
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '10.0.0.200';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123456';
#注意权限
[root@ubuntu2204 ~]#chown www-data.www-data /etc/zabbix/web/zabbix.conf.php
修改所有Agent的配置指向主和备用Zabbix Server
#配置Agent,Zabbix HA的方案需要在agent配置文件中将所有的Server节点地址同时都配置到Server和ServerActive中
[root@ubuntu2204 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=10.0.0.200,10.0.0.210
ServerActive=10.0.0.200,10.0.0.210
#重启生效
[root@ubuntu2204 ~]#systemctl restart zabbix-agent2.service
查看状态
查看HA状态有两种方式,一种是通过Web页面查看,另外一种是通过Runtime运行时的命令行查看
#通过Runtime运行时的命令行查看
在Zabbix Server节点上执行命令zabbix_server -R ha_status,并在日志文件/var/log/zabbix/zabbix_server.log中查看HA状态
[root@zabbix-server ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
active 5s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
standby 2s
#备用节节点执行如下提示
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Runtime commands can be executed only in active mode
#查看启动状态
[root@ubuntu2204 ~]#systemctl is-active zabbix-server.service
active
#备用节点不监听端口
[root@ubuntu2204 ~]#ss -nlt |grep 10051
报表Reports -> 系统信息System infomation-->可以查看HA状态
模拟故障
#停止主节点服务,模拟故障
[root@zabbix-server ~]#systemctl stop zabbix-server.service
#在备用节点执行下面命令,可以看到如下状态
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
stopped 7m 20s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
active 1s
#备用节点自动打开监听端口10051
[root@ubuntu2204 ~]#ss -nlt |grep 10051
LISTEN 0 4096 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 4096 [::]:10051 [::]:*
备用节点的Web界面仍然可以看到新数据的采集
恢复原来的主 Zabbix Serve
#恢复原主节点,自动成为备用节点
[root@zabbix-server ~]#systemctl start zabbix-server.service
[root@zabbix-server ~]#zabbix_server -R ha_status
Runtime commands can be executed only in active mode
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
standby 7m 20s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
active 1s
实战案例:实现 Zabbix Server 5.0 的高可用
下面实现方式适合所有 Zabbix 版本
#在两个Zabbix Server 使用下面相同的配置
[root@ka1 ~]#grep -i SourceIP= /etc/zabbix/zabbix_server.conf
SourceIP=10.0.0.10
[root@ka1 ~]#grep -i '^server=' /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,10.0.0.10
#不能同时启动 Zabbix Server
[root@ka1 ~]#systemctl enable zabbix-server.service
[root@ka2 ~]#systemctl disable zabbix-server.service
#keepalived相关配置
#ka1节点配置
[root@ka1 ~]#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@ayakakuya.com
}
notification_email_from 1223445@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka1.wang.org
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 230.6.6.6
}
#指定检测脚本
vrrp_script check_zabbix_server{
script "/usr/bin/killall -0 zabbix_server"
interval 1
weight -30
fall 2
rise 2
timeout 2
}
include /etc/keepalived/conf.d/*.conf
[root@ka1 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0 label eth0:1
}
#notify_master "systemctl start zabbix-server"
#notify_backup "systemctl stop zabbix-server"
track_script {
check_zabbix_server
}
}
#ka2节点框配置
[root@ka2 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 66
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24 dev eth0 label eth0:1
}
notify_master "systemctl start zabbix-server"
notify_backup "systemctl stop zabbix-server"
track_script {
# check_zabbix_server #在ka2节点不能启用脚本,否则会导致ka2节点也降低优先级,从而切换失败
}
}