1:在历史记录和事件表上创建MySQL分区(可选)
Zabbix使用housekeeping
进程删除旧的趋势和历史数据。使用 SQL DELETE
语句从数据库中删除旧数据可能会对数据库性能产生负面影响。因此,有时候我们看到这个告警:Zabbix housekeeper processes more than 75% busy
这个问题可以通过数据库分区轻松解决。分区为每个小时或每天创建表,并在不再需要时删除它们。SQL DROP
比 DELETE
语句更有效。
您可以参照这个教程对MySQL表进行分区。
2:优化Zabbix服务器(可选)
如果您计划监视大量设备,请继续执行此步骤。
使用vi
或nano
命令打开zabbix_server.conf
文件:
nano etc/zabbix/zabbix_server.conf
然后将下列配置添加到文件中的任意位置:
StartPollers=100
StartPollersUnreachable=50
StartPingers=50
StartTrappers=10
StartDiscoverers=15
StartPreprocessors=15
StartHTTPPollers=5
StartAlerters=5
StartTimers=2
StartEscalators=2
CacheSize=128M
HistoryCacheSize=64M
HistoryIndexCacheSize=32M
TrendCacheSize=32M
ValueCacheSize=256M
保存并退出文件(ctrl+x,后跟 y 并回车)。请根据实际情况修改这些配置,比如你不使用ping监控,可以设定StartPingers=1
。
3:优化 MySQL/MariaDB 数据库(可选)
有时您会碰到下面这个告警:
[Z3001] connection to database 'Zabbix' failed: [1040] Too many connections/var/log/zabbix/zabbix_server.log
那么您可以添加如下配置:
a. 创建自定义 MySQL 配置文件
通过vi
或nano
命令创建mysql.cnf
配置文件:
nano etc/my.cnf.d/mysql.cnf
粘贴如下配置:
[mysqld]
max_connections = 404
innodb_buffer_pool_size = 800M
innodb-log-file-size = 128M
innodb-log-buffer-size = 128M
innodb-file-per-table = 1
innodb_buffer_pool_instances = 8
innodb_old_blocks_time = 1000
innodb_stats_on_metadata = off
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-flush-log-at-trx-commit = 2
tmp-table-size = 96M
max-heap-table-size = 96M
open_files_limit = 65535
max_connect_errors = 1000000
connect_timeout = 60
wait_timeout = 28800
保存并退出文件(ctrl+x,后跟 y 并回车)。给该文件添加权限:
chown mysql:mysql etc/my.cnf.d/mysql.cnf
chmod 644 etc/my.cnf.d/mysql.cnf
要注意的2个参数:
- 参数
max_connections
必须大于所有 Zabbix 进程的总数加上 150。您可以使用以下命令自动检查Zabbix进程的数量(该命令的结果是加上了150后的值):
egrep "^Start.+=[0-9]" etc/zabbix/zabbix_server.conf | awk -F "=" '{s+=$2} END {print s+150}'
404
- 第二个重要的参数是
innodb_buffer_pool_size
。它决定了MySQL可以获得多少内存来缓存InnoDB表和索引数据。如果服务器上仅安装了数据库,则应将该参数设置为系统内存的 70%。
但是通常情况下,我们将Zabbix数据库和Apache安装在同一台服务器,因此建议将innodb_buffer_pool_size
设置为总系统内存的40%。如果服务器是2G RAM,那么这个值将设定为是800MB。
b. 重新启动 Zabbix Server 和 MySQL 服务
systemctl stop zabbix-server
systemctl stop mysql
systemctl start mysql
systemctl start zabbix-server
4:如何管理Zabbix MySQL Apache服务
有时您需要检查或重新启动Zabbix,MySQL或Apache服务, 使用下面的命令来执行此操作。
Zabbix Server
systemctl <status/restart/start/stop> zabbix-server
MySQL/MariaDB Server
systemctl <status/restart/start/stop> mysql
Apache Server
systemctl <status/restart/start/stop> httpd
PHP FastCGI Process Manager
systemctl <status/restart/start/stop> php-fpm
Zabbix Agent
systemctl <status/restart/start/stop> zabbix-agent
upgrade
dnf upgrade 'zabbix-*'