MySQL MMM高可用架构
- MySQL MMM高可用架构
- 一、MMM概述
- 1、MMM简介
- 2、MMM高可用架构
- 3、MMM故障切换流程
- 二、MMM高可用双主双从架构部署
- 1、配置主主复制(master),主从复制(slave)
- 1)修改 Master1的MySQL配置文件
- 2)把配置文件复制到其它 3 台数据库服务器上并启动服务器
- 3)配置主主复制,两台主服务器相互复制
- 4)配置主从复制,在两台从服务器上做
- 5)测试主主、主从 同步情况
- 2、安装配置 MySQL-MMM
- 1)在所有服务器上安装 MySQL-MMM
- 2)在 Master1上对 MySQL-MMM 进行配置
- 3)把配置文件复制到其它 4 台主机
- 4)修改所有数据库服务器的代理配置文件 mmm_agent.conf
- 5) 在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
- 6)在所有数据库上为 mmm_agent(代理进程)和mmm_moniter(监控进程)授权
- 7)在所有数据库服务器上启动 mysql-mmm-agent
- 8)在 monitor 服务器上启动 mysql-mmm-monitor
- 9)在 monitor 服务器上测试群集
- 3、 故障测试及恢复
- 1)模拟Master宕机以及恢复
- 2)模拟从服务器宕机以及恢复
- 3)客户端测试
MySQL MMM高可用架构
一、MMM概述
1、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 复制的配置。
2、MMM高可用架构
关于 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 用户。
3、MMM故障切换流程
Monitor 检测到 Master1 连接失败
Monitor 发送 set_offline 指令到 Master1 的 Agent
Master1 Agent 如果存活,下线写 VIP,尝试把 Master1 设置为 read_only=1
Moniotr 发送 set_online 指令到 Master2
Master2 Agent 接收到指令,执行 select master_pos_wait() 等待同步完毕
Master2 Agent 上线写 VIP,把 Master2 节点设为 read_only=0
Monitor 发送更改同步对象的指令到各个 Slave 节点的 Agent
各个 Slave 节点向新 Master 同步数据
二、MMM高可用双主双从架构部署
节点服务器 | 所需服务及组件 | IP地址 |
---|---|---|
Master1(db1) | mysql5.7、mysql-mmm | 192.168.210.101 |
Master2(db2) | mysql5.7、mysql-mmm | 192.168.210.102 |
Slave1(db3) | mysql5.7、mysql-mmm | 192.168.210.103 |
Slave2(db4) | mysql5.7、mysql-mmm | 192.168.210.106 |
monitor(db5) | mysql-mmm | 192.168.210.104 |
#所有服务器
#关闭防火墙
systemctl stop firewalld
setenforce 0
1、配置主主复制(master),主从复制(slave)
1)修改 Master1的MySQL配置文件
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
#自增字段的起始值
2)把配置文件复制到其它 3 台数据库服务器上并启动服务器
注意:配置文件中的 server_id 要修改
scp /etc/my.cnf root@192.168.210.102:/etc/
scp /etc/my.cnf root@192.168.210.103:/etc/
scp /etc/my.cnf root@192.168.210.106:/etc/systemctl restart mysqld
#修改Master2 Slave1 Slave2的Mysql配置文件
#修改server_id 每个服务器不一致
3)配置主主复制,两台主服务器相互复制
#在两台主服务器上都执行授予从的权限
#从服务器上不需要执行
grant replication slave on *.* to 'replication'@'192.168.210.%' identified by '123456';#在两台主服务器上查看,记录日志文件名称和同步点
show master status;
#在Master1上配置同步
change master to master_host='192.168.210.102',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G
#在Master2上配置同步
change master to master_host='192.168.210.101',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G
4)配置主从复制,在两台从服务器上做
#同一时间只能有一个主服务器工作
change master to master_host='192.168.210.101 ',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=461;start slave;show slave status\G
5)测试主主、主从 同步情况
create database db_test;
2、安装配置 MySQL-MMM
1)在所有服务器上安装 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*
2)在 Master1上对 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 192.168.210.101mode masterpeer db2
</host><host db2>ip 192.168.210.102mode masterpeer db1
</host><host db3>ip 192.168.210.103mode slave
</host><host db4>ip 192.168.210.106mode slave
</host><role writer>hosts db1, db2ips 192.168.210.188mode exclusive #只有一个 host 可以进行写操作模式
</role><role reader>hosts db3, db4ips 192.168.210.198, 192.168.210.199mode balanced #多个 slave 主机可以进行读操作模式
</role>
3)把配置文件复制到其它 4 台主机
所有主机该配置文件内容都是一样的。
scp mmm_common.conf root@192.168.210.102:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.103:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.106:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.210.104:/etc/mysql-mmm/
4)修改所有数据库服务器的代理配置文件 mmm_agent.conf
修改 mmm_agent.conf
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #根据不同的主机分别修改为 db1,db2,db3,db4
5) 在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
.....ping_ips 192.168.210.101,192.168.210.102,192.168.210.103,192.168.210.106 #指定所有数据库服务器的 IPauto_set_online 10 #指定自动上线时间
</monitor><host default>monitor_user mmm_monitor #指定 mmm_monitor 的用户名monitor_password 123456 指定 mmm_monitor 的密码
</host>
6)在所有数据库上为 mmm_agent(代理进程)和mmm_moniter(监控进程)授权
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.210.%' identified by '123456';grant replication client on *.* to 'mmm_monitor'@'192.168.210.%' identified by '123456';flush privileges;
7)在所有数据库服务器上启动 mysql-mmm-agent
systemctl enable mysql-mmm-agent.service --now
8)在 monitor 服务器上启动 mysql-mmm-monitor
systemctl start mysql-mmm-monitor.service
9)在 monitor 服务器上测试群集
mmm_control show
#查看各节点的情况
#检测监控功能是否都完善
mmm_control checks all
#需要各种OK
#指定绑定 VIP 的主机db2
mmm_control move_role writer db2mmm_control show
mmm_control move_role writer db1
#修改绑定VIP的主机为db1
mmm_control show
3、 故障测试及恢复
1)模拟Master宕机以及恢复
1.停止Master1的mysql服务
systemctl stop mysqld
2.查看VIP漂移情况
#切换到Monitor服务器
mmm_control show#VIP成功漂移至master2,且master1显示HARD_OFFLINE
3.重启Master1的mysql服务
systemctl start mysqld
4.查看Master1是否恢复
#切换至monitor
mmm_control show
#显示等待恢复
#继续查看节点状况
#等待数秒后重新查看,发现Master1在线,但未能获得VIP
mmm_control show
2)模拟从服务器宕机以及恢复
1.停止Slave1的mysql服务
#Slave1
systemctl stop mysqld
2.查看VIP漂移情况
#切换至monitor
mmm_control show#Slave1 离线
#VIP漂移至Slave2,服务不影响
3.重启Slave1的MySQL服务
#切换到Slave1
systemctl start mysqld
4.查看slave1是否恢复
#切换至monitor
mmm_control show#多次执行
3)客户端测试
1.在Master1服务器上为monitor服务器地址授权登录
#切换到Master1
mysql -u root -pabc123grant all on *.* to 'testdba'@'192.168.210.104' identified by '123456';
#master1授权给monitor
flush privileges;
2.在monitor服务器上使用写VIP登录
#切换到monitor
mysql -utestdba -p123456 -h 192.168.210.188
#以授权的用户名和密码使用写VIP登录
3.创建数据,测试同步情况
#monitor服务器
create database client_test;
#Master1服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| client_test
| db_test
| mysql |
| performance_schema |
| sys | |
+--------------------+
6 rows in set (0.00 sec)
#Master2服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| client_test
| db_test
| mysql |
| performance_schema |
| sys | |
+--------------------+
6 rows in set (0.00 sec)
#Slave1服务器mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| client_test
| db_test
| mysql |
| performance_schema |
| sys | |
+--------------------+
6 rows in set (0.00 sec)
#Slave2服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| client_test
| db_test
| mysql |
| performance_schema |
| sys | |
+--------------------+
6 rows in set (0.00 sec)
相关文章:
MySQL MMM高可用架构
MySQL MMM高可用架构一、MMM概述1、MMM简介2、MMM高可用架构3、MMM故障切换流程 二、MMM高可用双主双从架构部署1、配置主主复制(master),主从复制(slave)1)修改 Master1的MySQL配置文件2)把配置…...
Spring Boot中配置文件介绍及其使用教程
目录 一、配置文件介绍 二、配置简单数据 三、配置对象数据 四、配置集合数据 五、读取配置文件数据 六、占位符的使用 一、配置文件介绍 SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.prop…...
Hobby脚本自动化工具
Hobby脚本自动化工具 功能简介:可以按照指定编排的配置文件,按顺序执行并监听 使用场景:可以用在前期信息收集的步骤上,将一些常见的脚本进行归纳,并编写成配置文档进行自动化处理 优点:可以扩展性强&am…...
Matlab随机数的产生
1、常见分布随机数的产生 1.1 二项分布 在贝努力试验中,某事件A发生的概率为p,重复该实验n次,X表示这n次实验中A发生的次数,则随机变量X服从的概率分布律(概率密度)为 记为 binopdf(x,n,p) p…...
计算机网络 第四章:网络层
一.网络层概述 1.1分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。 如图所示:这些异构型网络如果只是需要各自内部通信,那它们只需要实…...
分享一个docker无法启动的小问题
准备看看docker服务怎么样 [rootlocalhost ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 这一看就是docker的进程崩了,我们启动下进程 [rootlocalhost ~]# systemctl start docker Faile…...
Linux 安全 - Capabilities机制
文章目录 前言一、简介二、Capabilities list2.1 POSIX-draft defined capabilities2.2 Linux-specific capabilities 三、 Past and current implementation四、Thread capability sets五、File capabilities六、Transformation of capabilities during execve()七、Capabilit…...
分布式搜索引擎es-3
文章目录 数据聚合聚合的种类RestAPI实现聚合 数据聚合 什么是聚合? 聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如…...
Matlab坐标轴标签中文设置宋体
对y坐标输出中文宋体 新罗马字符 x[1,2,3,4,5,6,7]; plot(x) ylabel(\fontname{宋体}\fontsize{20}长度\fontname{Times New Roman}\fontsize{10} (μm))可以灵活设置字体和大小,其图片如下图所示 也可以对全图的文字设置同一个字体 set(gca,FontSize,9,Fontname, Times New…...
做一个贪吃蛇小游戏happy一下
直接Vue上代码 <template><div><div>贪吃蛇</div><canvas id"canvas" width"400" height"400"></canvas></div> </template><script> export default {data() {return {ctx: null,inter…...
opencv形态学-膨胀
opencv形态学-膨胀 膨胀就是取每一个位置结构元邻域内最大值作为该位置的输出灰度值; 膨胀是取邻域内最大值,那么显然膨胀后图像整体亮度会比原先要高,图像中亮的物体尺寸会变大,相反暗的尺寸会减小,甚至是消失 结构元…...
玄子Share 设计模式 GOF 全23种 + 七大设计原则
玄子Share 设计模式 GOF 全23种 七大设计原则 前言: 此文主要内容为 面向对象七大设计原则(OOD Principle)GOF(Gang Of Four)23种设计模式拓展的两个设计模式 简单工厂模式(Simple Factory Pattern&#x…...
单链表操作 C实现
struct LNode { //定义一个节点 int data; //数据域 struct LNode *next; //指针域 }; 0.初始化 typedef sturct LNode{ //定义单链表结点类型 int date ; //每个结点存放一个数据元素struct LNode *next; //指针指向下…...
WordPress主题网站首页添加好看的四格小工具教程
直接到网站根目录创建一个css文件(文件名:sige.css),文件名可自定义(注意文件名一致) <link rel"stylesheet" href"你的网站/sige.css" type"text/css" > 然后在header.php模板最上方添加引入代码 也可自定义HTML里添加css代码最上方写…...
unittest自动化测试框架讲解以及实战
为什么要学习unittest 按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,通常指函数或者类,一般是开发完成的。 单元…...
数学建模之Matlab基础操作
作者由于后续课程也要学习Matlab,并且之前也进行了一些数学建模的练习(虽然是论文手),所以花了几天零碎时间学习Matlab的基础操作,特此整理。 基本运算 a55 %加法,同理减法 b2^3 %立方 c5*2 %乘法 x 1; …...
【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt
1 SiteMap设置 环境准备 注意生成sitemap依赖于nuxtjs/sitemap,并且需要用axios进行请求,不要使用nuxtjs/axios,不然会报错 sitemap.xml配置 在nuxt.config.js中配置下面的内容 npm install nuxtjs/sitemap npm install axios在static/s…...
VMware VSAN 入门
一、虚拟化的存储 1.1、对于数据中心来说最重要的是数据,而承载数据的设备就是存储设备(Storage) 1.2、物理服务器的本地存储阵列 与 虚拟化服务器的本地存储阵列 对比 1.3、避免单台服务器故障的虚拟化高级特性:vSphere HA技术 …...
【设计模式】备忘录模式
文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门:💁 传送 1.备忘录模式定义 备忘录(Memento Pattern)模…...
vue3+elementUiPlus表格导出功能
1.下载需要的组件包 npm install file-saver xlsx 2.页面中导入 import FileSaver from file-saver import * as XLSX from xlsx; 3.页面中的表格加一个id <el-table :data"tableData" ref"multipleTableRef" style"width…...
专题五:优先级队列
"你了解我,最干净的轮廓, 握住小小风车和放肆的梦~" 堆是一个不错的数据结构,而在计算机中,无法表示二叉分支结构,因此我们经常会看到使用线性表来作为堆的存储容器。在接触堆的时候,我们是把它…...
游戏设计模式专栏(一):工厂方法模式
引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 在游戏开发中,代码的组织和结构对于项目的可…...
element中使用el-steps 进度条效果demo(整理)
<template><div class"margin-top20"><!-- align-center 不要居中就去掉 --><!-- process-status 这几个参数值:改变颜色 wait / process / finish / error / --><!-- active 到第几个是绿色 --><el-steps :space&qu…...
038:mapboxGL 旋转地图(rotateTo)
第038个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中旋转地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhuan…...
java遇到的问题
java遇到的问题 Tomcat与JDK版本问题 当使用Tomcat10的版本用于springmvc借用浏览器调试时,使用JDK8浏览器会报异常。 需要JDK17(可以配置多个JDK环境,切换使用)才可以使用,配置为JAVA_HOME路径,否则&a…...
LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT
本文将介绍在Lit-GPT上使用LoRA微调LLaMA模型,并介绍如何自定义数据集进行微调其他开源LLM 监督指令微调(Supervised Instruction Finetuning) 什么是监督指令微调?为什么关注它? 目前大部分LLM都是decoder-only&…...
Android AMS——创建Application(七)
与在 App 内部启动一个 Activity 的不同之处在于,点击桌面 Launcher 首次启动一个应用程序的时候,会先去创建一个该应用程序对应的进程,然后执行 ActivityThread 的 main() 方法去创建该应用对应的 Application,然后再去启动首页 Activity。前面已经分析了进程的创建和启动…...
html 边缘融合加载
html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>边缘融合加载</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {height: 100vh;padding-bottom: 80px;b…...
ElasticSearch - 在 微服务项目 中基于 RabbitMQ 实现 ES 和 MySQL 数据异步同步(考点)
目录 一、数据同步 1.1、什么是数据同步 1.2、解决数据同步面临的问题 1.3、解决办法 1.3.1、同步调用 1.3.2、异步通知(推荐) 1.3.3、监听 binlog 1.3、基于 RabbitMQ 实现数据同步 1.3.1、需求 1.3.2、在“酒店搜索服务”中 声明 exchange、…...
Springboot+vue的企业人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的企业人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的企业人事管理系统,采用M(model&am…...
旅游景点网站建设设计说明/江东怎样优化seo
暖气来了,嗓子眼儿冒火、口腔溃疡、大便干燥,该怎么办呢?解放军309医院营养科主任医师张晔开出四字饮食处方:降、清、润、补。 降火汤——冬瓜配紫菜 很多家庭最爱做西红柿黄瓜片汤,其实冬季最好的汤是冬瓜汤ÿ…...
石河子市住房和城乡建设局网站/网页加速器
解决中文乱码的问题 header(Content-type: text/html; charsetUTF8);一、PHP是什么? 超级文本预处理语言(Hypertext Preprocessor) 网站是多个网页构成的一个集合。 动态网页是指使用网页脚本语言,比如php、asp.net等,…...
爱站网是干嘛的/短视频培训要多少学费
摘抄整合,勿喷 GDB r:run,执行程序 n:next,下一步,不进入函数 s:step,下一步,会进入函数 b:breakponit,设置断点 l:listÿ…...
网站建设的常用软件有哪些/seo网络培训班
前几天同一个朋友闲聊,他说了个很有意思的观点: 我们不招北大清华的。 因为大家都经过高考的折磨,所以心里对考上北大清华的都还是有点敬畏的,因此就追问了下原因。 他的回答很简单: 我们得承认这两所学校的人非常优秀…...
昆明做网站建设的公司哪家好/php搭建一个简单的网站
原理: 用数组存储数字,按照计算法则进行运算。 代码: package com.hdwang;import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 大数四则运算(超出long型的大数(64位:184467440737095516…...
房屋产权地址备案在那个网站做/企业培训公司有哪些
第一次观看我文章的朋友,可以关注、点赞、转发一下,每天分享各种干货技术和程序猿趣事 前言 职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息&…...