一、主机规划
服务器 | IP |
zabbix-server | 192.168.131.12 |
mysql-master,zabbix-agent | 192.168.131.13 |
mysql-slave,zabbix-agent | 192.168.131.14 |
二、部署&配置zabbix-server
2.1 部署zabbix
#安装Zabbix仓库。这里部署zabbix6.4
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
apt update
#配置数据库
apt install -y mariadb-server mariadb-client
#mysql
MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
MariaDB [(none)]> quit
#导入初始架构和数据,系统将提示您输入新创建的密码
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
#导入数据库架构后禁用log_bin_trust_function_creators选项
#mysql
MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
MariaDB [(none)]> quit
2.2 zabbix服务端配置
编辑配置文件/etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
2.3 解决时区问题
编辑配置文件/etc/zabbix/apache.conf
<IfModule
mod_php7.c>
....
php_value date.timezone Asia/shanghai
2.4 zabbix启动&初始化
启动zabbix_server和zabbix_agent,设置开机自启的同时使之马上启动
systemctl enable --now zabbix-server zabbix-agent apache2
访问http://192.168.131.12/zabbix,一路设置完成之后,默认登录信息如下:Admin/zabbix。查看Zabbix监控图形时出现乱码:
解决方案:在windows上找到存放字体的地方,默认的位置在C:\Windows\Fonts目录下,找一个字体文件,上传到/usr/share/zabbix/assets/fonts目录,更改其后缀为.ttf(eg:这里直接用宋体)
vim /usr/share/zabbix/include/defines.inc.php
#修改如下内容
define('ZBX_GRAPH_FONT_NAME','simsun');
define('ZBX_FONT_NAME','simsun');
再次重启zabbix-server后,图形显示就正常了。
三、部署Mysql主从
#安装Mysql
apt -y install mysql-server mysql-client
##配置mysql,之后重启mysql
#主库
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin=mysql-bin
server_id=1
#从库
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin=mysql-bin
server_id=2
#主库创建新用户并授权
create user slave@'%' identified with mysql_native_password by 'slave';
grant replication slave on *.* to 'slave'@'%';
从节点进入数据库后做如下配置,最后查看主从状态也是成功的。
CHANGE MASTER TO MASTER_HOST='192.168.131.13',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1072;
注意:如果创建用户不加with mysql_native_password ,则在show slave status \G;时就会出现如下错误:Error connecting to source '[email protected]:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
原因在于,slave用户是带有mysql_native_password插件的。
四、Mysql端配置zabbix_agent
在mysql服务器部署zabbix-agent,编辑/etc/zabbix/zabbix_agentd.conf,内容如下:
Server=192.168.131.12
ServerActive=192.168.131.12
#这个是等下在zabbix-web端添加主机时的主机名
Hostname=Zabbix server
#0.0.0.0代表所有IP
ListenIP=0.0.0.0
#监听端口
ListenPort=10050
#zabbix_agent日志路径
LogFile=/var/log/zabbix/zabbix_agentd.log
#扩展配置文件路径
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#是否启用用户自定义监控脚本,1启用,0不启用
UnsafeUserParameters=1
重启zabbix_sgent
systemctl restart zabbix-agent
在mysql slave机器(192.168.131.14)编写脚本。该脚本执行结果为2说明数据库主从同步正常,即2个YES(Slave_IO_Running和Slace_SQL_Running二者值为yes,见如上主从状态的截图)
vim auto_monitor_mysql.sh
#!/bin/bash
mysql -e "show slave status\G" | grep "Running" |awk "{print $2}" | grep -c "Yes"
在/etc/zabbix/zabbix_agent.d目录下新建一配置文件,在其中自建key键值,之后重启zabbix-agent。
vim userparameter_mysql_slave.conf
#键:mysql.replication,值:sh /root/auto_monitor_mysql.sh的执行结果
UserParameter=mysql.replication,sh /root/auto_monitor_mysql.sh
测试:zabbix_get -s 192.168.131.14 -k "mysql.replication"。显示结果如下:
解决方法:为mysql命令所在的命令脚本设置u+s权限:chmod u+s /usr/bin/mysql,让执行该命令的用户以该命令拥有者的权限去执行。再次测试就正常了。
五、zabbix-server web端添加监控
数据采集->主机->添加主机,接口为mysql slave(zabbix agent)端的地址。
点击添加的slave主机的监控项->创建监控项
点击slave主机的图形->创建图表,添加对应的监控项
点击监测->slave主机->图形,查看图形
六、zabbix配置邮箱报警
6.1 设置告警媒介
告警->媒介->Email,设置告警媒介
6.2 设置告警用户
用户->用户,选择对应用户,选择报警媒介,添加,最后更新
6.3 设置触发器
数据采集->主机,找到创建的slave主机,点击触发器,创建触发器。设置表达式时选择对应的监控项,使之不等于2即可。
6.4 设置连续报警动作
告警->动作->触发器动作->创建动作。添加触发条件,指定主机。这里要设置连续报警。
对以上步骤的说明:
- 步骤 1:设置时间为 60 秒,即 60 秒之后没有解除报警则执行操作步骤 2。默认操作步骤持续时间:60,单位默认为秒。
- 步骤 2:步骤 2 - 0 意思为在没有解除报警的情况下每隔 60 秒就发送一次报警信息(因为使用了默认动作)。
- 发送到用户:这里用户需要有超级管理员权限才可以接收到报警信息。
在操作中选择操作->添加,此步的意思是当发生故障时发送指定消息给指定用户/群组。操作部分的自定义消息内容如下:
主题:服务器{HOSTNAME}发生:{TRIGGER.NAME}故障!
消息:
触发器状态:{TRIGGER.STATUS}
严重程序:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警主机:{HOST.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
主机IP:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
6.5 设置恢复操作
之后设置恢复操作。选择操作->恢复操作,此步的意思是当故障恢复时发送指定消息给指定用户/群组。自定义消息内容如下:
主题:服务器{HOSTNAME}的{TRIGGER.NAME}故障已恢复!
消息:
主机IP:{HOST.IP}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}-{ITEM.VALUE}
事件ID:{EVENT.ID}
七、验证
先停止Mysql主服务器,看效果。也可以在zabbix-server web端的报表->动作日志去查看。由于超过1分钟未解决,邮件就会一直发,就达到了持续报警的效果。之后再启动mysql主服务器,发现恢复邮件也能发到。
标签:bin,slave,主机,Mysql,zabbix,server,Zabbix,mysql,主从 From: https://blog.51cto.com/u_15796303/7082237