如何使用Zabbix监控MySQL的MGR群集状态

MySQL的MGR(MySQL Group Replication)是MySQL官方提供的一种高可用性和高可靠性的集群解决方案。MGR通过使用基于组复制的方式,实现了多个MySQL实例之间的数据同步和故障转移,从而提供了自动故障恢复和负载均衡的功能。本文将介绍如何通过Zabbix监控mysql的MGR群集状态。

  1. 给MGR群集内的数据库监控账号赋权(这里用的zbxuser)
    grant select on performance_schema.replication_group_members to ‘zbxuser’@‘%’;

刷新mysql配置

flush privileges;

  1. 在pymys.py内添加MGR监控脚本
    cd /itops/zabbix/share/zabbix/externalscripts #zabbix的外部检查目录

vim pymys.py 写入以下内容:

#!/usr/bin/env python3 #encoding=utf-8 #edit by yang hao #version 0.1

import argparse import pymysql import inspect import json import re

class Checks(object): def mysql_mgr_state(self): #print(‘11’) #print(self.args.text) #sql = ‘select * from performance_schema.replication_group_members;’ sqlhost = ‘select MEMBER_HOST from performance_schema.replication_group_members;’ self.cur.execute(sqlhost) res = self.cur.fetchall() key = [‘{#MEMBERHOST}’] lst = [] for i in res: d = dict(zip(key, i)) lst.append(d) print(json.dumps({‘data’: lst}))

def mysql_mgr_status(self): name = self.args.text #print(name) sql = “select MEMBER_STATE from performance_schema.replication_group_members where MEMBER_HOST=‘%s’” % (name)+ “;” if self.cur.execute(sql): res = self.cur.fetchall()[0][0] print(res) else: print(“Empty set”)

def mysql_mgr_id(self): name = self.args.text #print(name) sql = “select MEMBER_ID from performance_schema.replication_group_members where MEMBER_HOST=‘%s’” % (name)+ “;” if self.cur.execute(sql): res = self.cur.fetchall()[0][0] print(res) else: print(“Empty set”)

class Main(Checks): def init(self): parser = argparse.ArgumentParser() parser.add_argument(‘–ip’) parser.add_argument(‘–username’) parser.add_argument(‘–password’) parser.add_argument(‘–port’) parser.add_argument(‘–database’) parser.add_argument(‘–text’)

subparsers = parser.add_subparsers()

for name in dir(self): if not name.startswith(“_”): p = subparsers.add_parser(name) method = getattr(self, name) argnames = inspect.getargspec(method).args[1:] for argname in argnames: p.add_argument(argname) p.set_defaults(func=method, argnames=argnames) self.args = parser.parse_args()

def db_connect(self): a = self.args ip = a.ip username = a.username password = a.password port = int(a.port) database = a.database self.db = pymysql.connect(host = ip, port = port, user = username,passwd = password, db = database) self.cur = self.db.cursor()

def db_close(self): self.cur.close() self.db.close()

def call(self): try: a = self.args callargs = [getattr(a, name) for name in a.argnames] self.db_connect() try: return self.args.func(*callargs) finally: self.db_close() except Exception as err: print(“0”) print(str(err))

if name == “main”: main = Main() main()

vim pymys 写入以下内容:

#!/usr/bin/bash /usr/bin/python3 /itops/zabbix/share/zabbix/externalscripts/pymys.py --ip $1 --username $2 --password $3 --port $4 --database $5 $6 $7 $8

  1. 测试命令参考:
    ./pymys 数据库地址 用户名 密码 端口号 库名 mysql_mgr_state //返回数据类似下图即可
    在这里插入图片描述
    测试拿群集状态信息:./pymys 数据库地址 用户名 密码 端口号 库名 --text 节点名称 mysql_mgr_status在这里插入图片描述
  2. 在mysql监控模板创建自动发现规则
    名称:MGR监控

类型:外部检查

键值:pymys[{KaTeX parse error: Expected 'EOF', got '}' at position 8: ADDRESS}̲,{USERNAME},{KaTeX parse error: Expected 'EOF', got '}' at position 9: PASSWORD}̲,{PORT},{$DATABASE},mysql_mgr_state]
在这里插入图片描述
5. 创建监控项原型一
名称:{#MEMBERHOST}的节点ID

类型:外部检查

键值:pymys[{KaTeX parse error: Expected 'EOF', got '}' at position 8: ADDRESS}̲,{USERNAME},{KaTeX parse error: Expected 'EOF', got '}' at position 9: PASSWORD}̲,{PORT},{$DATABASE},–text,{#MEMBERHOST},mysql_mgr_id]在这里插入图片描述
6. 创建监控项原型二
名称:{#MEMBERHOST}的状态

类型:外部检查

键值:pymys[{KaTeX parse error: Expected 'EOF', got '}' at position 8: ADDRESS}̲,{USERNAME},{KaTeX parse error: Expected 'EOF', got '}' at position 9: PASSWORD}̲,{PORT},{$DATABASE},–text,{#MEMBERHOST},mysql_mgr_status]

在这里插入图片描述
7. 创建触发器类型在这里插入图片描述
名称: [数据库:MYSQL]{#MEMBERHOST}此节点与其他节点同步状态出现错误

表达式:

V:OFFLINE|ERROR|UNREACHABLE在这里插入图片描述
以上就是这一期的Zabbix技术分享内容。大家好,我是乐乐,专注运维技术研究与分享,关注我,学习更多Zabbix开源软件使用技巧,如有问题也欢迎到乐维社区留言提问~

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

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

相关文章

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍,基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量,并…

day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

背景:上一篇吧nest-vben-admin项目,再开发环境上跑通了,并且build出来了dist文件,接下来再部署到linux试试吧 dist文件夹是干嘛的? 一个pnpn install 直接生成了两个dist文件夹,前端admin项目一个&#xf…

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略 导读:xAI公司在不久前发布了Grok-1模型以及模型结构,揭示了公司到去年11月为止在大语言模型研发上的进步。2024年3月28日(美国时间),xAI以“迅雷不及掩耳之势…

2024/3/29 IOday2

所有人&#xff0c;今日作业&#xff1a;用fwrite 和 fseek功能&#xff0c;将一张bmp格式的图片更改成 德国国旗 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fpfopen("./rising_free…

蓝桥杯刷题第四天

思路&#xff1a; 这道题很容易即可发现就是简单的暴力即可完成题目&#xff0c;我们只需满足所有数的和为偶数即可保证有满足条件的分法&#xff0c;同时也不需要存下每个输入的数据&#xff0c;只需要知道他是偶数还是奇数即可&#xff0c;因为我们只需要偶数个奇数搭配在一块…

沸点 | 嬴图联合飞腾发布全场景教育信创白皮书

围绕教育数字化转型和信创人才培养“两大领域”、聚焦办公、教学、科研、管理“四大场景”的《教育行业数字化自主创新 飞腾生态解决方案白皮书》于3月28日重磅发布&#xff01; 该白皮书历时1年&#xff0c;由25所代表院校、66位专家&#xff0c;119家生态伙伴共同编写&#x…

wireshark创建显示过滤器实验简述

伯克利包过滤是一种在计算机网络中进行数据包过滤的技术&#xff0c;通过在内核中插入过滤器程序来实现对网络流量的控制和分析。 在数据包细节面板中创建显示过滤器&#xff0c;显示过滤器可以在wireshark捕获数据之后使用。 实验拓扑图&#xff1a; 实验基础配置&#xff1…

如何用ESP32制作蓝牙小车?

1.ESP32的介绍 ESP32是一款低成本、低功耗的微控制器&#xff0c;集成了Wi-Fi和蓝牙功能。它是ESP8266的后继产品&#xff0c;具有更强大的处理能力和更丰富的功能。其核心配置包括Xtensa 32-bit LX6单/双核处理器&#xff0c;运算能力高达600 MIPS&#xff0c;以及448 KB ROM和…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

ATFX汇市:欧元区的2月M1增速为-7.7%,潜在通胀下修,欧元币值受冲击

ATFX汇市&#xff1a;衡量经济体的潜在通胀指标&#xff0c;除了CPI数据、失业率数据外&#xff0c;还有M1、M3数据。昨日&#xff0c;欧洲央行公布了2月份欧元区货币发展报告&#xff0c;其中提到&#xff1a;广义货币总量M3的年增长率从1月份的0.1%上升到2024年2月的0.4%&…

深入理解指针(7)函数指针变量及函数数组(文章最后放置本文所有原码)

一、函数指针变量 什么是函数指针变量呢&#xff1f; 既然是指针变量&#xff0c;那么它指向的一定是地址&#xff0c;而且我们可以通过地址来调用函数的。 函数是否有地址呢&#xff1f;地址是什么&#xff1f; 经过上面的测试可以看到函数也是有地址的&#xff0c;而且其地…

【JVM】Java类加载器 和 双亲委派机制

1、java类加载器的分类 JDK8及之前 启动类加载器&#xff0c;BootStrap Class Loader,加载核心类,加载jre/lib目录下的类&#xff0c;C实现的拓展类加载器&#xff0c; Extension Class Loader&#xff0c;加载java拓展类库&#xff0c;jre/lib/ext目录下&#xff0c;比如javax…