实验环境
zabbix-server
centos7
192.168.14.216
mysql主节点
centos7
192.168.14.210
5.5.64-MariaDB MariaDB Server
mysql从节点
centos7
192.168.14.211
5.5.64-MariaDB MariaDB Server
zabbix-server监控mysql从节点的slave状态两个值(Slave_IO_Running、Slave_SQL_Running),通过这两个值返回的状态判断mysql主从同步是否异常。
前提准备:
mysql主从配置参考:https://blog.csdn.net/tladagio/article/details/103137845
zabbix-server添加监控主机参考:https://blog.csdn.net/tladagio/article/details/103060962
一、mysql从节点
1、查看mysql主从同步状态(mysql用户名和密码自行创建)
2、检测得到两个Yes即表示状态正常
[root@slave ~]# mysql -uroot -p123456 -e "show slave status \G"|grep "_Running"|awk '{print $NF}'|grep -c "Yes"
2
3、创建监控状态脚本
[root@slave ~]# mkdir -p /usr/local/zabbix/script #创建一个目录存放脚本
[root@slave ~]# cd /usr/local/zabbix/script/
[root@slave script]# vi check_slave_status.sh
#!/bin/bash
mysql -uroot -p123456 -e "show slave status \G"|grep "_Running"|awk '{print $NF}'|grep -c "Yes"
[root@slave script]# chmod +x check_slave_status.sh #授权执行权限
4、新建zabbix-agent监控脚本(引用监控状态脚本)
[root@slave ~]# vi /etc/zabbix/zabbix_agentd.d/userparameter_che_status.conf
UserParameter=check.slave_status,/usr/local/zabbix/script/check_slave_status.sh
5、重启服务
[root@slave ~]# systemctl restart zabbix-agent
二、zabbix-server
1、测试是否获取到值
[root@f96412915d59 zabbix]# zabbix_get -s 192.168.14.211 -k "check.slave_status"
2
2、添加监控项(键值和UserParameter的值一致)
3、设置触发器
主从状态正常取得数值是2个Yes,如果数值小于2就说明主从状态异常
4、添加图形
5、查看图形
三、查看触发告警
1、从节点手动停止
[root@slave ~]# mysql -uroot -p123456 -e "stop slave;"
2、zabbix页面查看告警
3、从节点手动开启
[root@slave ~]# mysql -uroot -p123456 -e "start slave;"
4、问题解决之后,自动消除告警提示
故障问题解决
1、如果出现ERROR 1227 (42000) at line 1: Access denied; you need (at least one of) the SUPER,REPLICATION CLIENT privilege(s) for this operation
解决:mysql从节点的命令或者脚本没有加上mysql的用户名和密码
2、如果出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
解决:mysql从节点暂时停止掉selinux的拦截行为:setenforce 0
四、监控mysql主从复制延迟
1、查看延迟
[root@slave ~]# mysql -uroot -p123456 -e "show slave status \G"|grep 'Seconds_Behind_Master'|awk '{print $2}'
0
Seconds_Behind_Master:0 说明没有延迟
Seconds_Behind_Master:NULL 说明有故障
2、添加Key
[root@slave ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_che_status.conf
UserParameter=check.slave_status,/usr/local/zabbix/script/check_slave_status.sh
UserParameter=seconds_behind_master,mysql -uroot -p123456 -e "show slave status \G"|grep 'Seconds_Behind_Master'|awk '{print $2}'
3、重启服务
[root@slave ~]# systemctl restart zabbix-agent
4、zabbix-server验证值
[root@f96412915d59 zabbix]# zabbix_get -s 192.168.14.211 -k "seconds_behind_master"
0
5、添加监控项
6、设置触发器
7、主节点测试写入数据
Mysqlslap:
来自于mariadb包,测试的过程默认生成一个mysqlslap的schema,生成测试表t1,查询和插入测试数据,mysqlslap库自动生成,如果已经存在则先删除。用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹
使用格式:
mysqlslap [options]
900和1000个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次
[root@master ~]# mysqlslap -uroot -p123456 -a --concurrency=900,1000 --number-of-queries 1000 --iterations=5 --debug-info
Benchmark
Average number of seconds to run all queries: 1.444 seconds
Minimum number of seconds to run all queries: 1.399 seconds
Maximum number of seconds to run all queries: 1.517 seconds
Number of clients running queries: 900
Average number of queries per client: 1
Benchmark
Average number of seconds to run all queries: 1.611 seconds
Minimum number of seconds to run all queries: 1.561 seconds
Maximum number of seconds to run all queries: 1.661 seconds
Number of clients running queries: 1000
Average number of queries per client: 1
User time 2.08, System time 4.27
Maximum resident set size 27132, Integral resident set size 0
Non-physical pagefaults 44853, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 61052, Involuntary context switches 112
8、查看告警图形
9、告警提示