MySQL MMM高可用架构

news2024/11/24 1:15:16

  • 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-mmm192.168.210.101
Master2(db2)mysql5.7、mysql-mmm192.168.210.102
Slave1(db3)mysql5.7、mysql-mmm192.168.210.103
Slave2(db4)mysql5.7、mysql-mmm192.168.210.106
monitor(db5)mysql-mmm192.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        replication
    replication_password    123456
    agent_user              mmm_agent
    agent_password          123456

<host db1>
    ip      192.168.210.101
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.210.102
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.210.103
    mode    slave
</host>

<host db4>
    ip      192.168.210.106
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.210.188
    mode    exclusive           #只有一个 host 可以进行写操作模式
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.210.198, 192.168.210.199
    mode    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   
    #指定所有数据库服务器的 IP
	auto_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 db2

mmm_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 -pabc123

grant 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)

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

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

相关文章

Linux 压缩和解压

1、tar命令&#xff08;复杂&#xff09; 使用tar命令均可以进行压缩和解压缩的操作 语法&#xff1a;tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N -c&#xff0c;创建压缩文件&#xff0c;用于压缩模式 -v&#xff0c;显示压缩、解压过程&#xff0c;用于查看进度 -x&am…

redis查看耗时久的命令

redis查看耗时久的命令主要有两招&#xff1a;latency和slow log 【latency】 在Redis中&#xff0c;latency命令用于监视和测量Redis实例的延迟。 先进入redis: redis-cli -h 127.0.0.1 -p 24000[查看延迟监视器阈值] CONFIG GET latency-monitor-threshold这个值返回0&…

N9917A|是德科技keysight N9917A微波分析仪

181/2461/8938毫米波频率测量需要精确和谨慎。幸运的是&#xff0c;随着更多的毫米测试设备问世&#xff0c;工程挑战的难度略有下降。信号分析仪现已将同轴器件的直接覆盖范围扩大到110 GHz。这提供了低噪声、高精度和宽带宽的优势&#xff0c;使工程师能够专注于他们的设计和…

ESP32IDF出现Syntax Warning in cmake code at column 47报错

前言 &#xff08;1&#xff09;ESP32的资料还是挺难找的&#xff0c;遇到bug处理起来挺折磨人的。今天分享一个我遇到的bug&#xff0c;以及处理思路。 报错日志 &#xff08;1&#xff09;前天在些博客的时候&#xff0c;做测试发现了一个奇怪的bug&#xff0c;报错日志如下。…

Linux 本地 Docker Registry本地镜像仓库远程连接

目录 Linux 本地 Docker Registry本地镜像仓库远程连接 1. 部署Docker Registry 2. 本地测试推送镜像 3. Linux 安装cpolar 4. 配置Docker Registry公网访问地址 5. 公网远程推送Docker Registry 6. 固定Docker Registry公网地址 Linux 本地 Docker Registry本地镜像仓库…

Linux Kernel 之十 虚拟化、VirtIO 架构及规范、VirtQueue VRing

VirtIO 是一种 IO 半虚拟化解决方案&#xff0c;它提供 Guest OS 与 Hypervisor 虚拟化设备之间的通信框架和编程接口。其主要的优势是能提高性能且减少跨平台带来的兼容性问题。本文重点结合 VirtIO 规范 1.1 版以及 Linux 中的源码来分析 VirtIO 框架。 本文是我自己学习虚拟…

【Vue.js】使用Element入门搭建登入注册界面axios中GET请求与POST请求跨域问题

一&#xff0c;ElementUI是什么&#xff1f; Element UI 是一个基于 Vue.js 的桌面端组件库&#xff0c;它提供了一套丰富的 UI 组件&#xff0c;用于构建用户界面。Element UI 的目标是提供简洁、易用、美观的组件&#xff0c;同时保持灵活性和可定制性 二&#xff0c;Element…

idea2023根据表自动生成+springboot跑起来

idea安装插件 idea中显示数据库连接 就可以看到如下界面 选中你想生成的表&#xff0c;右键如下操作 如上就有了所有需要的后端代码 生成后&#xff0c;要查看一下mapper.xml中的文件是否 正确&#xff0c;若有误请先去修改&#xff0c;例如我的版本下生成了xml文件中缺乏…

Firecamp2.7.1exe安装与工具调试向后端发送SocketIO请求

背景&#xff1a; 笔者在python使用socket-io包时需要一个测试工具&#xff0c;选择了firecamp这个测试工具来发送请求。 参考视频与exe资源包&#xff1a; Firecamp2.7.1exe安装包以及基本使用说明文档&#xff08;以SocketIO为例&#xff09;.zip资源-CSDN文库 15_send方法…

如何注册一个 DA 为 10 的高价值老域名

众所周知&#xff0c;由于域名存在唯一性&#xff0c;随着人们注册的越多&#xff0c;好域名也变得越来越少&#xff0c;渐渐成为稀缺的网络资源。这个时候要想拥有好的域名&#xff0c;抢注优质老域名就成了广大米友的路径之一。 优质的高价值域名都有一个特点&#xff0c;那…

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题 Tomcat多实例动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat 二、NginxTomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1 原理1.2 Nginx配置反向代理的主要参数 2、Nginx动静分离实现原理2.1 原理2.2 Nginx静态处理优势 3、动静分离配…

AIGC(生成式AI)试用 7 -- 桌面小程序

生成式AI&#xff0c;别人用来写作&#xff0c;我先用来写个桌面小程序。 桌面小程序&#xff1a;计算器 需求 Python开发图形界面&#xff0c;标题&#xff1a;计算器 - * / 基本运算计算范围&#xff1a;-999999999 ~ 999999999** 乘方计算&#xff08;例&#xff0c;2*…

第78步 时间序列建模实战:随机森林回归建模

基于WIN10的64位系统演示 一、写在前面 之前我们以决策树为例子&#xff0c;展示了各种花里胡哨的时间序列建模。 从这一期开始&#xff0c;我们继续基于python构建各种机器学习和深度学习的时间序列预测模型。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》…

python - os模块 常用api方法和demo练习

文章目录 前言python-os模块常用api方法和demo练习1. 常用方法2. demo 练习3. demo 执行结果 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#…

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好&#xff1f;这是一个常见的问题&#xff0c;特别是对于初学者来说。在编程世界中&#xff0c;前端开发和后端开发分别代表着用户界面和数据逻辑&#xff0c;就像城市的两个不同街区一样。但是&#xff0c;究竟哪个街区更适合我们作为开发者呢…

chatgpt 只会死记硬背吗

本周写两篇关于 chatgpt 的随感&#xff0c;我不善于写文档&#xff0c;所以我的文字多是输出直感和观点&#xff0c;而不是知识&#xff0c;没有关于 chatgpt 的原理和应用&#xff0c;甚至术语也不匹配&#xff0c;反正就是想到哪算哪吧。 都说 chatgpt 没有内在逻辑&#xf…

51单片机用IIc控制OLED显示数组内容

为了能够看到51单片机接收到的串口数据&#xff0c;我选择了用oled显示收到的数据&#xff0c;特此花重金买了一块oled屏128X64的屏幕大概10来块钱吧&#xff01;首先要达成的小目标就是能够显示数组的内容&#xff0c;建立一个字符数组&#xff0c;用来接收串口收到的数据&…

北斗智能终端:助力森林保护的新利器

北斗智能终端&#xff1a;助力森林保护的新利器 近年来&#xff0c;大兴安岭图强林业局利用北斗等技术&#xff0c;推进森林保护的数字化进程&#xff0c;为高质量发展注入了新的动力和活力。 据了解&#xff0c;当地利用北斗终端对森林资源进行精准管理。为88名管护员和10名监…

软件设计模式系列之十九——中介者模式

中介者模式目录 1 模式的定义2 举例说明3 结构4 实现步骤5 代码实现6 典型应用场景7 优缺点8 类似模式9 小结 1 模式的定义 中介者模式是一种行为型设计模式&#xff0c;它用于降低对象之间的直接通信&#xff0c;通过引入一个中介者对象来管理对象之间的交互。这种模式有助于…

如何配置代理

打开Clask&#xff0c;设置为系统代理&#xff0c;选择规则判断&#xff0c;规则判断就是需要走代理的走代理&#xff0c;不需要走的就不用走代理 本地使用代理 如何想要让某个地方使用代理&#xff0c;可以直接在该地方的终端进行设置 先复制一下终端代理命令&#xff0c;然…