zabbix 监控mysql主从复制

zabbix 监控mysql 复制

一、使用percona 提供的插件监控

1.1 搭建主从复制环境

master:192.168.1.107

vim  /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address            = 0.0.0.0
server-id=107
log-bin=/data/mysql/master-log
grant replication slave ,replication client  on *.*  to rsync@'192.168.1.%' identified by '123456' ;
create database linux37 ;
mysqldump -A --single_transaction --flush-logs --master-data=1  > /opt/backup.sql

slave:192.168.1.105

server-id=105
CHANGE MASTER TO MASTER_HOST='192.168.1.107',MASTER_USER='rsync',MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-log.000003', MASTER_LOG_POS=368;
start slave ;;

验证:

show slave status \G ;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

并且可以看到刚才创建的数据库

1.2 在slave 上安装procona

mark

mark

官方文档及下载地址:

插件下载地址:https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/

安装教程:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html

wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/debian/artful/x86_64/percona-zabbix-templates_1.1.8-1.artful_all.deb
dpkg -i  percona-zabbix-templates_1.1.8-1.artful_all.deb 
root@z5:~# dpkg -c percona-zabbix-templates_1.1.8-1.artful_all.deb 
drwxr-xr-x root/root         0 2018-01-10 22:46 ./
drwxr-xr-x root/root         0 2018-01-10 22:46 ./usr/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./usr/share/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./usr/share/doc/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/
-rw-r--r-- root/root       360 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/changelog.Debian.gz
-rw-r--r-- root/root       989 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/copyright
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/lib/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/lib/zabbix/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/lib/zabbix/percona/
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/
-rwxr-xr-x root/root      1251 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
-rw-r--r-- root/root     60679 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
drwxr-xr-x root/root         0 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/
-rw-r--r-- root/root     18866 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
-rw-r--r-- root/root    269258 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
1.3 安装环境依赖

安装 zabbix-agent php-mysql php5.6 (7版本会使得监控项取的返回值类型有问题)

apt-get install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
apt-get update
apt-get install -y php5.6
apt-get install -y php5.6-mysql
1.4 配置并且调用percona 插件脚本

复制脚本自定义的参数

 cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf  /etc/zabbix/zabbix_agentd.conf.d/

确认agent.conf 有这项配置

Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

配置 让php 能连接数据库

vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = '';

zabbix 调用shell ,而shell 脚本会调用php 的程序

root@z5:/var/lib/zabbix/percona/scripts# ll
total 76
drwxr-xr-x 2 root root  4096 Apr 16 13:47 ./
drwxr-xr-x 4 root root  4096 Apr 16 11:37 ../
-rwxr-xr-x 1 root root  1251 Jan 10  2018 get_mysql_stats_wrapper.sh*
-rw-r--r-- 1 root root 60679 Jan 10  2018 ss_get_mysql_stats.php
-rw-r--r-- 1 root root    46 Apr 16 13:32 ss_get_mysql_stats.php.cnf

测试脚本能否在本机agent取到值 , 0 也是有值

root@z5:/var/lib/zabbix/percona/scripts# bash get_mysql_stats_wrapper.sh  gg
0
root@z5:/var/lib/zabbix/percona/scripts# bash get_mysql_stats_wrapper.sh  gk
5

调用脚本的过程中,会产生一个临时文件。

root@z5:~# ll /tmp/localhost-mysql_cacti_stats.txt 
-rw-r--r-- 1 root root 1240 Apr 16 13:53 /tmp/localhost-mysql_cacti_stats.txt
root@z5:~# chown zabbix.zabbix  /tmp/localhost-mysql_cacti_stats.txt  

重启agent, 在proxy 或 server 上测试

root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k  "MySQL.Key-read-requests"
0
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k  "MySQL.history-list"
5

然后导入模板

cd /var/lib/zabbix/percona/templates/
sz zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml 

注意有些模板选项不支持(时间太久了),需要修改后再导入。

之后关联到主机就可以了

1.5 验证

mark

1.6 可能遇到的坑

执行 bash -x get_mysql_stats_wrapper.sh gg 取不到值,可能是与脚本中的TIMEOUT值有关,因为缓存文件的存在

可以把 /tmp/localhost-mysql_cacti_stats.txt 删除了,把TIMEOUT=300 调成100 改小些,再试一下

  TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
    TIMENOW=`date +%s`
    if [ `expr $TIMENOW - $TIMEFLM` -gt 10 ]; then
        rm -f $CACHEFILE
        $CMD 2>&1 > /dev/null
    fi

二、 自己编写 脚本 监控

2.1 思路

主要是监控 Slave_IO_Running 和 Slave_SQL_Running 的值是否同时为yes, Seconds_Behind_Master 的值 取当从服务器 复制延的秒数

2.2 脚本内容
#!/bin/bash
host=127.0.0.1
Seconds_Behind_Master(){
        NUM=`mysql -uroot -h$host  -e "show slave status\G;"  | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
        echo $NUM
}

master_slave_check(){
NUM1=`mysql -uroot -h$host -e "show slave status\G;"  | grep "Slave_IO_Running" | awk -F:  '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -h$host -e "show slave status\G;"  | grep "Slave_SQL_Running:" | awk -F:  '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" &&  test $NUM2 == "Yes";then
    echo 50
else
    echo 100
fi
}

main(){
    case $1 in
        Seconds_Behind_Master)
           Seconds_Behind_Master;
           ;;
        master_slave_check)
           master_slave_check
           ;;
    esac
}
main $1

使用locahost 虽然 在本机测试不报错,但是通过zabbix_get 调用时,总会报权限问题,所以我选择用127.0.0.1 登录

create user 'root'@'127.0.0.1' identified by '';
grant all  on *.*  to 'root'@'127.0.0.1'
skip-name-resolve

在监控Slave_IO_Running 和 Slave_SQL_Running 的值是否同时为yes 时,就可以设置触发>55 就报警

为啥不用50 ? 因为触发器的监控线 和 返回结果的线会重合

2.3 调用测试脚本

agent.conf

UserParameter=mysql[*],/etc/zabbix/zabbix_agentd.d/monitor_mysql.sh  "$1"

在本机测

root@z5:/etc/zabbix/zabbix_agentd.d# bash monitor_mysql.sh  master_slave_check
50
root@z5:/etc/zabbix/zabbix_agentd.d# bash monitor_mysql.sh  Seconds_Behind_Master
0

在server 测

root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k  mysql[master_slave_check]
50
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k mysql[Seconds_Behind_Master]
0
2.4 创建模板、创建监控项、创建触发器、创建图形、关联模板

创建模板

mark

创建监控项 主从同步检查

mark

创建监控项 主从同步复制延迟

mark

创建触发器

mark

2.5 验证结果

stop slave;

mark

微信报警已经收到结果

mark

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值