rocky Linux 9.4系统配置zabbix监控MySQL主从复制状态与配置钉钉告警

MySQL主从复制原理:

1. 主从复制的基本概念

  • 主服务器(Master):负责处理所有的写操作(INSERT、UPDATE、DELETE),并将这些操作记录到二进制日志(binary log)中。

  • 从服务器(Slave):从主服务器读取二进制日志,并执行日志中的操作以保持数据同步。

2. 工作流程

  1. 写入操作:

    • 客户端向主服务器发送写入请求(如 INSERT、UPDATE、DELETE)。

    • 主服务器执行操作并将这些操作记录到二进制日志中。

  2. 日志传输:

    • 从服务器定期连接到主服务器,获取二进制日志的更新。

    • 从服务器会记录当前已处理的日志位置,以便下次连接时从该位置继续获取新的日志。

  3. 执行日志:

    • 从服务器读取主服务器的二进制日志,并将日志中的操作应用到自己的数据表中,以保持与主服务器的数据一致性。

3. 复制类型

MySQL 支持几种不同的复制类型:

  • 异步复制:从服务器在接收到主服务器的日志后,不需要立即确认,主服务器可以继续处理其他请求。这种方式可能导致数据延迟。

  • 半同步复制:主服务器在发送日志后,等待至少一个从服务器确认已接收日志,然后再继续处理请求。这种方式可以减少数据丢失的风险。

  • 全同步复制:所有从服务器在接收到日志后都必须确认,主服务器才会继续处理请求。这种方式会增加延迟,但确保数据一致性。

在 MySQL 主从复制的原理中,有两个重要的线程负责复制过程:I/O 线程和 SQL 线程。以下是对这两个线程的详细说明:

1. I/O 线程

  • 功能:I/O 线程负责从主服务器读取二进制日志并将其写入从服务器的中继日志(relay log)。

  • 工作流程:

    1. 从服务器连接到主服务器。

    2. 请求主服务器的二进制日志。

    3. 将接收到的日志写入中继日志。

    4. 记录当前的日志位置,以便下次连接时可以从该位置继续读取。

2. SQL 线程

  • 功能:SQL 线程负责从中继日志中读取事件并将其应用到从服务器的数据库中。

  • 工作流程:

    1. 从中继日志中读取事件(如 INSERT、UPDATE、DELETE)。

    2. 执行这些事件以更新从服务器的数据库。

    3. 更新已处理的日志位置,以确保不会重复执行相同的事件。

3. 线程的协作

  • I/O 线程和 SQL 线程是并行运行的,I/O 线程不断从主服务器获取新的日志,而 SQL 线程则处理中继日志中的事件。这种设计允许从服务器在处理数据的同时继续接收新的日志,从而提高了复制的效率。

4. 监控线程状态

可以通过 SHOW SLAVE STATUS\G 命令查看这两个线程的状态,包括它们是否正在运行、是否有错误、当前的日志位置等信息。关键字段包括:

  • Slave_IO_Running:指示 I/O 线程是否正在运行。

  • Slave_SQL_Running:指示 SQL 线程是否正在运行。

  • Relay_Log_Space:中继日志的总大小。

查看slave1的同步状态,监控这两个线程是否都正常。

在 /etc/zabbix/script/目录下存放监控主从复制状态脚本

cd /etc/zabbix/script/
​
cat mysql_slvae_status.sh #!/bin/bash
#监控MySQL主从同步线程状态
​
USER="slave"
PASSWD="Zabbix@root818"
HOST="192.168.158.136"
NAME=$1
MYSQL_CMD="/usr/local/mysql/bin/mysql"
​
function IO {Slave_IO_Running=`$MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "show slave status\G;" 2> /dev/null |grep Slave_IO_Running |awk '{print $2}'`if [[ $Slave_IO_Running == "Yes" ]];thenecho 0elseecho 1fi
}
​
function SQL {Slave_SQL_Running=`$MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "show slave status\G;" 2> /dev/null |grep Slave_SQL_Running: |awk '{print $2}'`if [[ $Slave_SQL_Running == "Yes" ]];thenecho 0elseecho 1fi
​
}
​
case $NAME inio)IO;;sql)SQL;;*)echo -e "Usage: $0 [io | sql]"
esac

在/etc/zabbix/zabbix_agent2.d/plugins.d/目录下编写自定义监控配置文件

cat userparameter_mysql_slave.conf

# 获取MySQL slave状态UserParameter=mysql.slave[*],/etc/zabbix/script/mysql_slvae_status.sh $1

重启zabbix-agent2

在zabbix-server端进行测试,看是否能够成功获取到值,通过上面的脚本,这里为0即表示正常,为1即表示不正常。

[root@zabbix-server ~]# zabbix_get -s 192.168.158.135 -k mysql.slave[io]0[root@zabbix-server ~]# zabbix_get -s 192.168.158.135 -k mysql.slave[sql]0

server端web配置#

1)配置Slave_IO_Running线程监控项

2)配置Slave_SQL_Running线程监控项

3)配置Slave_IO_Running线程的触发器

4)配置Slave_SQL_Running线程的触发器

5)配置告警媒介

    ​1、创建钉钉群聊,并添加机器人

    ​2、创建目录和脚本

mkdir /usr/lib/zabbix/alertscripts/mkdir /usr/lib/zabbix/alertscripts/logtouch /usr/lib/zabbix/alertscripts/log/dingding.logchown zabbix:zabbix /usr/lib/zabbix/alertscripts/log/dingding.logchown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingding.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import datetime
#这个地址就是钉钉机器人的地址
webhook = "换成你钉钉机器人生成的地址"
user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={"msgtype": "text","text": {"content": "%s%s"%(subject,text)},"at": {"atMobiles": [user],"isAtAll": False}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/alertscripts/log/dingding.log"):f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","a+")
else:f=open("/usr/lib/zabbix/alertscripts/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))f.close()
else:f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送失败"+"\n"+str(text))f.close()
​

    ​3、测试这个脚本

    ​我这里发送成功,并且钉钉机器人推送了消息

6)配置触发动作

配置动作中需要执行的动作(发送消息给管理员)

服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
##服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

配置状态恢复时的操作(同样发送消息给管理员)

服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}

配置用户告警媒介

最终查看监控项

7)模拟MySQL主从服务器复制故障

现在从服务器正常复制中

并且监控页面也没有相关告警消息

现在关掉了同步操作

监控页出现了告警

钉钉机器人也发来了告警

恢复主从复制

自此MySQL主从复制监控告警到推送钉钉群聊配置完成

如果发先监控页面的告警时间与服务器上的时间不对等,需要在监控页面上配置一下,我的是zabbix6.4版本,无需修改配置文件,也不需要重启服务​。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429301.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(月考一知识点)

文章目录 计算机网络背诵默写版计算机网络知识点(月考1版) 计算机网络背诵默写版 为我自己留个印记,本来荧光笔画的是没记住的,但是后面用紫色的,结果扫描的时候就看不见了。 计算机网络知识点(月考1版&a…

静态链表:实现、操作与性能优势【算法 16】

静态链表:实现、操作与性能优势 在算法和数据结构的探索中,链表作为一种基础且灵活的数据结构,广泛应用于各种场景。然而,在算法竞赛或需要高效内存管理的环境中,传统的动态链表可能会因为内存分配和释放的开销而影响性…

【H2O2|全栈】关于CSS(5)如何制作一个搜索网页的首页?

目录 CSS基础知识 前言 准备工作 简单网页的组成部分 案例 浏览器的窗口大小 划分主要部分 固定定位 头部导航(左侧) 头部导航(右侧) LOGO ​编辑搜索框 热搜标题 热搜内容 文字简介 资源 预告和回顾 后话 CSS…

Tomcat中BIO和NIO的区别(Tomcat)

BIO Tomcat中BIO的模型和理论很简单,例图如下 1.Acceptor线程死循环阻塞接收客户端的打过来的socket请求 2.接收到请求之后打包成一个SocketProcessor(Runnable),扔到线程池中读取/写入数据 参数配置 1.Acceptor默认线程是1&#…

网络丢包定位记录(二)

网卡驱动丢包 查看:ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量,还包括too-long-frames错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。 …

Cursor免费 GPT-4 IDE 工具的保姆级使用教程

Cursor免费 GPT-4 IDE 工具的保姆级使用教程 简介 Cursor 是一款基于人工智能技术的代码生成工具。 它利用先进的自然语言处理和深度学习算法,可根据用户的输入或需求,自动生成高质量代码。 不管是初学者,还是资深开发者,Curs…

uniapp 微信小程序 订阅消息功能实现

该网址 https://api.weixin.qq.com 上线后不可访问,调用该网址操作需在后端( 重要! 重要! 重要!) 1.首先拿到的三个码 //微信公众平台 //https://mp.weixin.qq.com const wxappid "管理-开发管理-A…

Java语言程序设计基础篇_编程练习题***18.32 (游戏:骑士的旅途)

目录 题目:***18.32 (游戏:骑士的旅途) 习题思路 代码示例 输出结果 题目:***18.32 (游戏:骑士的旅途) 骑士的旅途是一个古老的谜题,它的目的是使骑从棋盘上的任意一个正方 形开始移动,经过其他的每个正方形一次,如…

Web_php_include 攻防世界

<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { 以是否检测到php://为判断执行循环$pagestr_replace("php://", "", $page);//传入空值&#xff0c;替换 } include($page); ?&g…

单样本Cellchat(V2)细胞通讯分析学习和整理

细胞通讯分析是一种研究不同细胞类型之间如何通过信号分子&#xff08;如配体和受体&#xff09;进行相互交流和调控的分析方法。它在揭示细胞间相互作用的机制&#xff0c;理解组织和器官如何协调运作方面具有重要意义。 细胞通讯分析的主要内容如下&#xff1a; 配体-受体相…

连续数组问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路&#xff1a; 思路&#xff1a;前缀和&#xff08;第二种&#xff09;化0为-1hash&#xff1a; 这样可以把…

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统&#xff0c;你可以在一个架构中运行多个哨兵进程&#xff0c;这些进程使用流言协议来接收关于Master主服务器是否下线的信息&#xff0c;并使用投票协议来决定是否执行自动故障迁移&#xff0c;以及选择哪个Slave作为新的Master。 文章目录 〇、…

五种数据库特性对比(Redis/Mysql/SQLite/ES/MongoDB)

做后端开发的程序员基本都要学会数据库的相关知识。 1、关系型数据 今天就着这段时间了解大模型的事需要牵扯到是我们接触最多的、也是入门后端必学的关系型数据库。在关系型数据库中&#xff0c;数据以表的形式进行组织和存储&#xff0c;每个表就像一个 Excel 表格&#xf…

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

基于微信小程序的宠物寄养平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 随着科技和网络的进步&#xff0c;微信小程序技术与网络、生活贴和的更加紧密。需要依靠客户端的单机系统逐渐被淘汰&#xff0c;利用互联网可以处理大量数据的新型系统如雨后春笋般迅速发展起来。这类系统和信息化时代的同步发展对传统的办公管理方式造成了很大的压力。…

Linux入门学习:Git

文章目录 1. 创建仓库2. 仓库克隆3. 上传文件4. 相关问题4.1 git进程阻塞4.2 git log4.3 上传的三个步骤在做什么4.4 配置邮箱/用户名 本文介绍如何在Linux操作系统下简单使用git&#xff0c;对自己的代码进行云端保存。 1. 创建仓库 &#x1f539;这里演示gitee的仓库创建。…

华为全联接大会HUAWEI Connect 2024印象(一):OpenEuler

因为和华为有课程合作&#xff0c;此次应邀参加了华为全联接大会 &#xff08;HUAWEI Connect 2024&#xff09;&#xff0c;分几次分享一下自己的见闻。 HUAWEI Connect 2024的规模很大&#xff0c;不过主要面向的应该是企业市场&#xff0c;我比较关注的嵌入式系统的内容很少…

MTK zephyr平台:USB升级、枚举流程

一、USB升级流程 通过代码及log分析,当前平台升级过程在PL阶段进行 USB download相关代码 mtk/modules/hal/boot/preloader/platform/flashc/ mtk/modules/hal/boot/preloader/platform/board_name/flash/ mtk/modules/hal/boot/preloader/platform/board_name/src/drive…

Kubernetes从零到精通(11-CNI网络插件)

Kubernetes网络模型 Kubernetes的网络模型&#xff08;Kubernetes Networking Model&#xff09;旨在提供跨所有节点、Pod和服务的统一网络连接。它的核心理念是通过统一的网络通信规则&#xff0c;保证集群中的所有组件能够顺畅地相互通信。Kubernetes网络模型主要有以下几个关…

Java异常架构与异常关键字

1. Java异常简介 Java 异常是 Java 提供的一种识别及响应错误的一致性机制。 Java 异常机制可以使程序中异常处理代码和正常业务代码分离&#xff0c;保证程序代码更加优雅&#xff0c;并提高程 序健壮性。在有效使用异常的情况下&#xff0c;异常能清晰的回答 what, where,…