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

news2024/9/21 20:35:54

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" ]];then
        echo 0
    else
        echo 1
    fi
}
​
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" ]];then
        echo 0
    else
        echo 1
    fi
​
}
​
case $NAME in
   io)
       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.coloradmin.cn/o/2141813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度揭秘:日志打印的艺术与实战技巧,让你的代码会说话!

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 🍁日志🍂日志分模块实现讲解🍃日志等级的实现🥥日志时间*时间的获取* 🌈文…

Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

一、首先搭建直播服务器 环境widows,并且已经集成了 :nginx-http-flv-module模块 nginx.conf配置如下: worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error…

Vue3中集成高德地图并实现平移缩放功能

大家好,随着前端技术的不断发展,地图应用在我们的项目中越来越常见。本文将介绍如何在Vue3项目中集成高德地图,并通过简单的配置实现地图的平移和缩放功能。 实现步骤 1、申请高德地图密钥(Key)(已有key可…

Git使用详解:从安装到精通

前言 什么是Git Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。 可以理解: git是一个管理源代码的工具,主要用于企业团队开…

openwrt wsdd模块介绍

wsdd简介 wsdd是一个实现Web服务发现主机守护进程的工具。这使得(如Samba)主机,像你的本地网络存储设备,能够被Windows这样的Web服务发现客户端找到。 目的 由于Windows不再支持NetBIOS发现,wsdd使用Web服务发现方法使…

密码学---easy_hash

题目出处:首页 - Bugku CTF ✨打开题目有两个文件 ✨打开flag.py后开始分析所给的代码 import hashlib # 导入 hashlib 模块,用于计算哈希值 from multiprocessing import Pool # 从 multiprocessing 模块导入 Pool 类,用于多进程处理d…

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务,外部服务ip为10.10.102.90,端口为32033. 引入到istio中后,我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下: apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

Python 课程5-NumPy库

在数据处理和科学计算中,NumPy 是一个非常强大且基础的库。除了基本的创建数组功能之外,NumPy 提供了许多强大的函数和方法,用于执行高级的矩阵运算、统计分析、逻辑操作等。以下是一些常用且非常有用的 NumPy 指令,涵盖了创建数组…

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52 在嵌入式MCU软件开发中,通过串口进行人机交互是非常常见且重要的操作方式。获取帮助的命令通常用来向用户展示所有支持的交互指令及其使用方法。详细介绍如下: 获取帮助命令的作用 用户友好性&#…

进程之信号

文章目录 进程信号中断的概念信号是异步事件Linux信号信号发生的来源信号的处理方式signal函数示例--使用signal函数对常见的信号进行捕获、执行默认操作、忽略三种方式处理 SIGCHLD信号示例--使用SIGCHLD信号来避免子进程退出 kill函数raise函数示例--使用kill函数给指定进程发…

基于python+django+vue的学生成绩管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

Java之线程篇四

目录 volatile关键字 volatile保证内存可见性 代码示例 代码示例2-(volatile) volatile不保证原子性 synchronized保证内存可见性 wait()和notify() wait()方法 notify() 理解notify()和notifyAll() wait和sleep的对比 volatile关键字 volati…

【C++ Primer Plus习题】16.3

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <string> #include <…

Datawhale------Tiny-universe学习笔记——Qwen(1)

1. Qwen整体介绍 对于一个完全没接触过大模型的小白来说&#xff0c;猛一听这个名字首先会一懵&#xff1a;Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍&#xff1a;Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展&a…

Linux服务器上安装git lfs命令

有时候&#xff0c;需要批量下载数据集时要用到git lfs命令 首先&#xff0c;使用pip install git-lfs安装&#xff0c;会发现使用时仍然提示&#xff1a;git: lfs is not a git command. See git --help. 这就意味着安装不成功。 因此&#xff0c;需要通过如下途径手动安装&a…

基于YOLOv5的农作物叶片病害识别系统

植物农作物叶片病虫害识别系统&#xff1a;农作物叶片病害AI检测与识别系统 源码 带UI界面说明视频 模型&#xff1a;yolov5 功能: 农作物叶片病害检测系统用于智能检测常见农作物叶片病害情况&#xff0c;自动化标注、记录和保存病害位置和类型&#xff0c;辅助作物病害防治以…

【Motion Forecasting】【摘要阅读】BANet: Motion Forecasting with Boundary Aware Network

BANet: Motion Forecasting with Boundary Aware Network 这项工作发布于2022年&#xff0c;作者团队来自于OPPO。这项工作一直被放在arxiv上&#xff0c;并没有被正式发表&#xff0c;所提出的方法BANet在2022年达到了Argoverse 2 test dataset上的SOTA水准。 Method BANet…

用Python解决综合评价问题_模糊综合评价,决策树与灰色关联分析

一&#xff1a;模糊综合评价 模糊综合评价是一种有效的处理不确定性和模糊性的评价方法&#xff0c;特别是在人才评价等领域。它允许我们综合考虑多个评价指标&#xff0c;并给出一个综合的评价结果。以下是利用模糊综合评价对人才进行评价的步骤&#xff1a; 确定评价指标&am…

进阶SpringBoot之异步任务、邮件任务和定时执行任务

SpringBooot 创建 Web 项目 异步任务&#xff1a; service 包下创建 AsyncService 类 Async 异步方法 Thread.sleep(3000) 停止三秒&#xff0c;捕获异常 package com.demo.task.service;import org.springframework.scheduling.annotation.Async; import org.springfram…

【MySQL】Windows下重启MySQL服务时,报错:服务名无效

1、问题描述 在终端中&#xff0c;停止、启动MySQL服务时报错&#xff1a;服务名无效 2、原因分析 1&#xff09;权限不够 如果是权限不够&#xff0c;会提示&#xff1a;系统错误5&#xff0c;拒绝访问。 2&#xff09;服务名错误 如果是服务名错误&#xff0c;会提示“…