Mysql MMM
MMM概述
MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)
是一套支持双主故障切换和双主日常管理的脚本程序。
MMM 使用 Perl 语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。
MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。
MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。
关于 MMM 高可用架构的说明如下:
●mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。
●mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。
●mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。
●mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。
在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

搭建Mysql MMM
实验配置:
master01:20.0.0.81
master02:20.0.0.82
slave01:20.0.0.83
salve02:20.0.0.84
monitor:20.0.0.10
1.关闭防火墙
systemctl stop firewalld
setenforce 0
2.搭建Mysql多主多从模式
修改mysql服务器配置文件
//修改 master01 配置文件
vim /etc/my.cnf
......
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1 #每台 Mysql 主机的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log #错误日志
general_log=ON #通用查询日志
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON #慢查询日志
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema #不需要同步的库名
log_bin=mysql_bin #开启二进制日志用于主从数据复制
log_slave_updates=true #允许slave从master复制数据时可以写入到自己的二进制日志
sync_binlog=1 #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去
innodb_flush_log_at_trx_commit=1 #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
auto_increment_increment=2 #自增字段一次递增多少
auto_increment_offset=1 #自增字段的起始值
......//把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改
scp /etc/my.cnf root@20.0.0.82:/etc/
scp /etc/my.cnf root@20.0.0.83:/etc/
scp /etc/my.cnf root@20.0.0.84:/etc/systemctl restart mysqld
配置主主复制
//配置主主复制,两台主服务器相互复制
#在两台主服务器上都执行授予从的权限,从服务器上不需要执行
grant replication slave on *.* to 'replication'@'20.0.0.%' identified by '123456';#在两台主服务器上查看,记录日志文件名称和同步点
show master status;


#在 master01 上配置同步
change master to master_host='20.0.0.82',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=456;start slave;show slave status\GSlave_IO_Running: YesSlave_SQL_Running: Yes#在 master02 上配置同步
change master to master_host='20.0.0.81',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=456;start slave;show slave status\GSlave_IO_Running: YesSlave_SQL_Running: Yes
配置主从复制
//配置主从复制,在两台从服务器上做
change master to master_host='20.0.0.81',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=456;start slave;show slave status\GSlave_IO_Running: YesSlave_SQL_Running: Yes//测试主主、主从 同步情况
create database db_test;


3.安装配置Mysql MMM
//在所有服务器上安装 MySQL-MMM
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum -y install mysql-mmm*//在 master01 上对 MySQL-MMM 进行配置
cd /etc/mysql-mmm/
vim mmm_common.conf
……
<host default>cluster_interface ens33……replication_user replicationreplication_password 123456agent_user mmm_agentagent_password 123456<host db1>ip 20.0.0.81mode masterpeer db2
</host><host db2>ip 20.0.0.82mode masterpeer db1
</host><host db3>ip 20.0.0.83mode slave
</host><host db4>ip 20.0.0.84mode slave
</host><role writer>hosts db1, db2ips 20.0.0.188mode exclusive #只有一个 host 可以进行写操作模式
</role><role reader>hosts db3, db4ips 20.0.0.198, 20.0.0.199mode balanced #多个 slave 主机可以进行读操作模式
</role>//把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
scp mmm_common.conf root@20.0.0.82:/etc/mysql-mmm/
scp mmm_common.conf root@20.0.0.83:/etc/mysql-mmm/
scp mmm_common.conf root@20.0.0.84:/etc/mysql-mmm/
scp mmm_common.conf root@20.0.0.10:/etc/mysql-mmm///修改所有数据库服务器的代理配置文件 mmm_agent.conf
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #根据不同的主机分别修改为 db1,db2,db3,db4//在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
.....ping_ips 20.0.0.81,20.0.0.82,20.0.0.83,20.0.0.84 #指定所有数据库服务器的 IPauto_set_online 10 #指定自动上线时间
</monitor><host default>monitor_user mmm_monitor #指定 mmm_monitor 的用户名monitor_password 123456 #指定 mmm_monitor 的密码
</host>//在所有数据库上为 mmm_agent(代理进程)授权
grant super, replication client, process on *.* to 'mmm_agent'@'20.0.0.%' identified by '123456';//在所有数据库上为 mmm_moniter(监控进程)授权
grant replication client on *.* to 'mmm_monitor'@'20.0.0.%' identified by '123456';flush privileges;//在所有数据库服务器上启动 mysql-mmm-agent
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service//在 monitor 服务器上启动 mysql-mmm-monitor
systemctl start mysql-mmm-monitor.service //在 monitor 服务器上测试群集
#查看各节点的情况
mmm_control showdb1(20.0.0.81) master/ONLINE. Roles: writer(20.0.0.188)db2(20.0.0.82) master/ONLINE. Roles: db3(20.0.0.83) slave/ONLINE. Roles: reader(20.0.0.198)db4(20.0.0.84) slave/ONLINE. Roles: reader(20.0.0.199)

#检测监控功能是否都完善,需要各种OK
mmm_control checks all#指定绑定 VIP 的主机
mmm_control move_role writer db2
4.故障模拟
//故障测试
mmm_control move_role writer db1#停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占mmm_control showdb1(20.0.0.81) master/HARD_OFFLINE. Roles:db2(20.0.0.82) master/ONLINE. Roles: writer(20.0.0.188)



#停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
mmm_control showdb1(20.0.0.81) master/HARD_OFFLINE. Roles: db2(20.0.0.82) master/ONLINE. Roles: writer(20.0.0.188)db3(20.0.0.83) slave/HARD_OFFLINE. Roles: db4(20.0.0.84) slave/ONLINE. Roles: reader(20.0.0.198), reader(20.0.0.199)#重启服务后,虚拟IP会飘回本机


//客户端测试
#在 master01 服务器上为 monitor 服务器地址授权登录
grant all on *.* to 'testdba'@'20.0.0.10' identified by '123456';
flush privileges;#在 monitor 服务器上使用 VIP 登录
yum install -y mariadb-server mariadb
systemctl start mariadb.servicemysql -utestdba -p -h 20.0.0.188#创建数据,测试同步情况
create database db_test3;



相关文章:
Mysql MMM
MMM概述 MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障切换和双主日常管理的脚本程序。 MMM 使用 Perl 语言开发,主要用来监控和管理MySQL Master-Master(双主)复制&…...
GDPU 数据结构 天码行空10
目录 数据结构实验十 树遍历应用一、【实验目的】二、【实验内容】三、【实验源代码】⭐ CPP版⭐ c语言版 四、实验结果 数据结构实验十 树遍历应用 一、【实验目的】 1、了解树的建立方法 2、掌握树与二叉树的转化及其遍历的基本方法 3、掌握递归二叉树遍历算法的应用 二、…...
CD36 ; + Lectin;
CD2 LIMP-2, LGP85 SR-BI, CD36; 清道夫受体蛋白CD36超家族的成员是 脂质代谢 和 先天免疫 的重要调节因子。它们识别正常和修饰的脂蛋白,以及与病原体相关的分子模式。 该家族由三个成员组成: SR-BI &am…...
Git 分支管理
目录 列出分支 删除分支 分支合并 合并冲突 几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。 使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。 Git 分支实际上是指向更改快照的指针。 有…...
Vue23全局事件总线
Vue2&3全局事件总线 Vue2全局事件总线 功能:可以解决所有组件之间通信传数据的问题原理:通过一个共享对象,将所有组件全部绑定到对象上,即可通过这个对象实现组件与组件之间的传递数据,而这个共享对象叫做全局事件…...
GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain
简介 gem5中的 NoC部分是Garnet实现的,但是Garnet并没有单独的时钟域,而是保持ruby一致,要做noc的DVFS,便是要改ruby的 改电压 #这里只是生成一个随便变量名,存一下值。改是和频率一起的 userssaved_voltage_domain…...
java命令 jmap 堆参数分析
jmap -heap pid 展示pid的整体堆信息 bash-4.4# jmap -heap 10 Attaching to process ID 10, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.172-b11using thread-local object allocation. Garbage-First (G1) GC with 8 th…...
OpenCV C++ 图像处理实战 ——《OCR字符识别》
OpenCV C++ 图像处理实战 ——《OCR字符识别》 一、结果演示二、tesseract库配置2.1下载编译三、OCR字符识别3.1 文本检测方式3.1.1 RIL_BLOCK3.1.2 RIL_PARA3.1.3 RIL_TEXTLINE3.1.4 RIL_WORD3.1.5 RIL_SYMBOL3.2 英文文本检测3.3 中英文本检测四、源码测试图像下载总结一、结…...
在MySQL中创建新的数据库,可以使用命令,也可以通过MySQL工作台
摘要:在本教程中,你将学习如何使用MySQL CREATE DATABASE语句在MySQL数据库服务器上创建新数据库。 MySQL CREATE DATABASE语句简介 要在MySQL中创建新数据库,可以使用CREATE DATABASE语句。以下说明了CREATE DATABASE语句的基本语法: CREATE DATABASE [IF NOT EXISTS] …...
2311rust到31版本更新
1.27.1稳定版 在此修补程序前,下例在编译器内部恐慌. fn main() {let a vec!["".to_string()];a.iter().enumerate().take_while(|(_, &t)| false).collect::<Vec<_>>(); }1.27.1拒绝上述代码,并显示以下错误消息: error[E0507]: cannot move ou…...
【Python百宝箱】视觉算法秀:Python图像处理舞台上的巅峰对决
前言 在数字化时代,图像处理技术已经成为科技和计算机领域中不可或缺的一部分。从医学影像到计算机视觉,图像处理为我们提供了无限的可能性。Python作为一种灵活而强大的编程语言,在图像处理领域表现出色,拥有丰富的库和工具。本…...
Flutter 中在单个屏幕上实现多个列表
今天,我将提供一个实际的示例,演示如何在单个页面上实现多个列表,这些列表可以水平排列、网格格式、垂直排列,甚至是这些常用布局的组合。 下面是要做的: 实现 让我们从创建一个包含产品所有属性的产品模型开始。 …...
YOLOv8 加持 MobileNetv3,目标检测新篇章
🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧 -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结 -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …...
.gitignore 文件——如何在 Git 中忽略文件和文件夹详细教程
文章目录 什么是 .gitignore 文件?.gitignore 文件是用来做什么的?如何创建一个 .gitignore 文件?在 .gitignore 文件中应包括什么?如何在 Git 中忽略一个文件和文件夹如何忽略以前提交的文件 什么是 .gitignore 文件?…...
【数据结构(二)】单链表(3)
文章目录 1. 链表介绍2. 单链表应用实例2.1. 顺序添加方式2.1.1. 思路分析2.1.2. 代码实现 2.2. 按照编号顺序添加方式2.2.1. 思路分析2.2.2. 代码实现 3. 单链表节点的修改3.1. 思路分析3.2. 代码实现 4. 单链表节点的删除4.1. 思路分析4.2. 代码实现 5. 单链表常见面试题5.1.…...
创新案例|云服务平台HashiCorp是如何构建开源社区实现B2B增长飞轮
社区文化是HashiCorp企业文化的重要组成部分。虽然众多公司声称自己是社区驱动,但实际付诸行动的很少。与众不同的是,HashiCorp从一开始就将社区视为战略方针的核心,这也影响和塑造了公司今天的发展方向。社区不仅是执行策略之一,…...
2024年软件测试面试必看系列,看完去面试你会感谢我的!!
朋友圈点赞的测试用例 功能测试 1点赞后是否显示结果 2.点赞后是否可以取消; 3.点赞取消后是否可以重复点赞; 4.共同好友点赞后,是否有消息提醒; 5.非共同好友点赞后,是否有消息提醒; 6.点击点赞人昵称,是否可以跳转到他/她的主页; 7.自己能…...
01ctfer 文件上传
01ctfer 文件上传 启动靶场 访问该地址 代码审计 <?php header("Content-Type:text/html; charsetutf-8"); // 每5分钟会清除一次目录下上传的文件 require_once(pclzip.lib.php);if(!$_FILES){echo <!DOCTYPE html> <html lang"zh">…...
2.2 调用星火大模型的API
调用星火大模型的API 1 申请API调用权限:2 调用原生星火 API3 统一API调用方式 项目仓库地址:https://github.com/datawhalechina/llm-universe 讯飞星火认知大模型,由科大讯飞于2023年5月推出的中文大模型,也是国内大模型的代表…...
云原生是整个信息化行业的未来,一文彻底搞懂云原生
云原生这个词来自英语的Cloud Native的翻译,云原生是已经存多年在术语,真正开始获得关注的是在2015年到2016年。 这归因于这几年逐渐发布的Docker的兴起。 会有越来越多的企业和组织开始关注到它,并把他们的工作负载运行在云端的益处。无论是…...
Dify如何助力企业提升客户体验
Dify 主要通过打造更智能、更快速的客服体系,从根本上提升客户体验。其核心在于利用 AI 应用开发平台的能力,实现服务的即时响应、精准解答和个性化互动。🤖 724 智能客服,告别等待全天候秒级响应:利用 Dify 的 Workfl…...
应收账款管理:从“被动应对”到“主动管理”的思维转变
“应收账款管理真的太难了!”这是许多企业管理者的心声。中小型企业尤其容易陷入资金回笼慢、坏账风险高的困境,甚至因此影响现金流健康,拖累企业发展。传统管理模式中,信息孤岛、流程繁琐和决策滞后等问题屡见不鲜,让…...
如何15分钟搞定黑苹果配置:OpCore-Simplify零代码自动化终极指南
如何15分钟搞定黑苹果配置:OpCore-Simplify零代码自动化终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置头…...
OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备的运行技巧
OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备的运行技巧 1. 为什么需要内存优化 当我第一次尝试在8GB内存的MacBook Pro上运行千问3.5-35B-A3B-FP8模型时,系统几乎立即崩溃了。这让我意识到,想要在资源有限的设备上运行大型语言模型&…...
终极指南:3步解锁原神帧率限制,体验144Hz流畅游戏
终极指南:3步解锁原神帧率限制,体验144Hz流畅游戏 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock genshin-fps-unlock是一款专为《原神》PC玩家设计的帧率解锁工具…...
多维创新打造强泛化智能体模型,LongCat-Flash-Thinking-2601技术报告
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
Mac小白必看:OpenClaw汉化版安装与Qwen3.5-9B快速接入
Mac小白必看:OpenClaw汉化版安装与Qwen3.5-9B快速接入 1. 为什么选择OpenClaw汉化版? 作为一个长期在Mac上折腾各种开发工具的老用户,我最近被OpenClaw这个"能像人类一样操作电脑"的AI智能体框架深深吸引。但官方英文文档和复杂的…...
用快马AI将数据库理论变现实:三分钟搭建学生信息管理原型
用快马AI将数据库理论变现实:三分钟搭建学生信息管理原型 数据库系统概论这门课我学了很久,但总觉得理论和实践之间隔着一道鸿沟。直到最近尝试用InsCode(快马)平台快速搭建了一个学生信息管理系统原型,才发现原来抽象的概念可以这么直观地呈…...
告别网络依赖:用Vue3+Leaflet和IIS搭建本地离线地图服务(附腾讯地图瓦片下载)
构建企业级离线地图解决方案:Vue3Leaflet与IIS深度整合指南 在数字化转型浪潮中,地图功能已成为各类管理系统的基础需求。然而,许多政企单位、军工机构及偏远地区项目往往面临网络不稳定或完全离线的特殊环境。本文将系统介绍如何基于Vue3、L…...
实测好用!translategemma-4b-it图文翻译模型快速上手体验
实测好用!translategemma-4b-it图文翻译模型快速上手体验 1. 为什么选择translategemma-4b-it 1.1 轻量级但功能强大 translategemma-4b-it是Google基于Gemma 3架构开发的轻量级翻译模型,仅有4B参数,却支持55种语言的互译任务。最特别的是…...
