Zabbix Server 6.0 LTS 原生高可用HA集群部署 - On Debian11

发布时间 2023-07-27 22:25:12作者: 奔跑的运维

官方文档里面说明,Zabbix Server HA 最少需要两个节点,多台Zabbix server作为集群中的节点运行。 当集群中的一个Zabbix server 处于active 时,其他服务器处于standy,随时准备在必要时接管。

无论集群的节点数量有多少,只有一个节点实例是出于Active状态,Standby节点不收集监控数据或者处理其他任务;

官方文档:

国内zabbix源:

环境约定

组件版本

OS: Debian 11.7

Zabbix: 6.0

MySQL: 8.0

Nginx: 1.24.0

PHP: 7.4

节点信息

因为我的笔记本内存有限,只能搭建最小规模的HA集群,所以我们只部署一个单点的MySQL实例,并将Zabbix Web服务和Zabbix Server(Nginx+PHP)服务部署在一台机器上;在大规模监控或对可用性要求非常高的场景下,建议高可用部署MySQL,并将Zabbix Web独立部署,相关架构图可以参考https://www.infvie.com/ops-notes/zabbix-ha-cluster.html 这个博客的内容

IP Role Port
10.100.1.11 Zabbix Server + Zabbix Web 10051 + 80
10.100.1.12 Zabbix Server + Zabbix Web 10051 + 80
10.100.1.13 MySQL

节点的初始化操作可以浏览debian11系统初始化

MySQL安装

mysql的安装可以浏览Debian11 TAR包安装MySQL8.0

安装完成后我们需要手动创建zabbix的库

# mysql -uroot -p
输入password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

Nginx安装

Debian 11系统自身源的nginx版本是1.18, 我这边选择安装最新的nginx stable版本

我们需要在两台Zabbix Web服务器上安装Nginx, 安装可以浏览 Debian 11 安装Nginx最新stable版本

有些文档可以重复利用,哈哈

Zabbix Server + Web安装

接下来其实按照官方文档安装没有任何问题,如果就像上面说的,你如果要部署完全高可用的Zabbix,就需要把组件拆开安装了,我选择安装在一块儿

如果选择安装在一块儿

  • all in one 安装
wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-4+debian11_all.deb
dpkg -i zabbix-release_6.0-4+debian11_all.deb
apt update
apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

如果要拆开安装

  • zabbix web 安装
apt install zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
  • zabbix server安装
apt install zabbix-server-mysql zabbix-sql-scripts zabbix-agent

数据初始化

只需要在一台Zabbix Server机器执行即可,进行数据初始化, 可能需要执行apt install unzip安装需要的包

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -h 10.100.1.13 -uzabbix -p zabbix

导入数据库架构后禁用log_bin_trust_function_creators选项

# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

配置Zabbix Server

两台Zabbix Server上都需要修改配置,并修改DBHostDBNameDBUserDBPasswordDBPortHANodeNameNodeAddress参数

ListenPort=10051
LogType=file
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
DebugLevel=3
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBHost=10.100.1.13
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
AllowUnsupportedDBVersions=0
StartPollers=50
StartIPMIPollers=10
StartPreprocessors=30
StartPollersUnreachable=10
StartHistoryPollers=50
StartTrappers=50
StartPingers=10
StartDiscoverers=10
StartHTTPPollers=10
StartTimers=10
StartEscalators=10
StartAlerters=30
StartVMwareCollectors=10
VMwareFrequency=60
VMwarePerfFrequency=60
VMwareCacheSize=80M
VMwareTimeout=10
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
StartSNMPTrapper=1
ListenIP=0.0.0.0
HousekeepingFrequency=1
MaxHousekeeperDelete=50000
CacheSize=2G
CacheUpdateFrequency=60
StartDBSyncers=40
HistoryCacheSize=512M
HistoryIndexCacheSize=512M
TrendCacheSize=256M
TrendFunctionCacheSize=256M
ValueCacheSize=512M
Timeout=5
TrapperTimeout=300
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000
TmpDir=/tmp
StartProxyPollers=10
ProxyConfigFrequency=60
ProxyDataFrequency=1
StartLLDProcessors=20
AllowRoot=0
User=zabbix
StatsAllowedIP=127.0.0.1
# 这俩参数是HA的关键,这里的两个配置可以写IP也可以写域名, 需要保证每个节点的地址不冲突
HANodeName=10.100.1.11
NodeAddress=10.100.1.11:10051
# 另一台节点需要改下地址
#HANodeName=10.100.1.12
#NodeAddress=10.100.1.12:10051

配置Zabbix Server

我们需要编辑/etc/zabbix/conf.d/zabbix.conf取消注释listenserver_name, 修改端口为80

listen 80;
server_name example.com;

修改php-fpm配置,/etc/php/7.4/fpm/pool.d/zabbix-php-fpm.conf中默认的配置中listen.owner的用户配置不正确,我们需要将其修改为nginx,否则在最终服务都启动后,因为权限原因,浏览器访问zabbix web会报502的错

[zabbix]
user = www-data
group = www-data
listen = /var/run/php/zabbix.sock
listen.owner = nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 200
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 140
pm.max_requests = 800
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/sessions/
php_value[max_execution_time] = 1200
php_value[memory_limit] = 512M
php_value[post_max_size] = 64M
php_value[upload_max_filesize] = 20M
php_value[max_input_time] = 1200
php_value[max_input_vars] = 400000

配置Zabbix Agent

修改/etc/zabbix/zabbix_agentd.conf

PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.100.1.11,10.100.1.12
ServerActive=10.100.1.11,10.100.1.12
Hostname=10.100.1.11
RefreshActiveChecks=60
BufferSend=5
BufferSize=256
Timeout=5
AllowRoot=0
User=zabbix
Include=/etc/zabbix/zabbix_agentd.d/*.conf

启动服务

systemctl disable --now apache2.service
systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm

配置Web

需要逐台配置web,分别登陆 http://10.100.1.11http://10.100.1.12 进行配置