高可用方案
网上关于zabbix高可用的方案比较少,大多都是通过keepalived+mysql的方法,mysql做主主同步,然后实时同步zabbix的配置文件和web目录。通过VIP来访问zabbix服务,当主的zabbix服务出现异常时,就可以自动切换到备用zabbix。
但在实际部署过程中,因为两台zabbix的服务是同时在读写数据,导致数据库同步出了不少问题,不知道别人是怎么解决这个问题的。。。于是我转换思路,先将数据库分离,然后只留一台zabbix,冷备一台zabbix,当zabbix-master出故障时,通过脚本一键替换。架构图如下,还在不断完善中,望大牛不吝指教。
mysql读写分离和keepalived的配置在之前的博客已经有写,这里不做详细介绍了。
性能调优
zabbix_server.conf
zabbix配置文件的默认值都比较保守,一般小规模使用,问题也不大,但是当监控设备上百后,就出现了各种问题。所以第一步需要修改配置文件的相关选项。参考链接https://www.boheyan.cn/zabbix-error.html
MYSQL
考虑单机性能问题,可将数据库独立出来,做读写分离,同时优化数据库设置。
echo "vm.swappiness = 0" >>/etc/sysctl.conf
表示最大限度使用物理内存,然后才是 swap空间,设置为0,避免数据库用交换分区,影响速度。- 修改/etc/my.cnf配置文件,在mysqld下面添加innodb_buffer_pool_size = 6G,这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲,默认值:128M,专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳。
PHP
zabbix某些页面无法打开,查看php日志发现,当访问这个页面是,报错内存不足,不清楚是否内存泄露,最简单的方法是调大php进程的可用内存,memory_limit默认值为128M
[root@zabbix-master httpd]# tail /var/log/httpd/error_log
[Mon Sep 11 08:04:59.596332 2017] [:error] [pid 4195] [client 172.31.101.4:62999] PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 72 bytes) in /usr/share/zabbix/include/actions.inc.php on line 1578, referer: http://172.31.101.10/zabbix.php?action=dashboard.view
[root@zabbix-master ~]# grep 'memory_limit' /etc/httpd/conf.d/zabbix.conf
php_value memory_limit 512M