Mysql - 高可用方案之MMM(二)
一、概述
上一篇博客中(https://www.cnblogs.com/ddzj01/p/11535796.html)介绍了如何搭建MMM架构,本文将通过实验介绍MMM架构的优缺点。
二、优点
1. 写vip转移
关掉node1的mysql,看集群会发生什么变化
[root@mysqla ~]# service mysql stop
在monitor查看集群状态
[root@monitor ~]# mmm_control show

在node3中查看
(root@localhost)[(none)]> show slave status\G

可以看到写vip(10.40.16.71)已经漂移到node2,并且node3重新指向了node2
2. 读vip漂移
启动node1的mysql
[root@mysqla ~]# service mysql start
在monitor查看集群状态(可能需要等接近一分钟才能看到下面的状态)
如果长时间是AWAITING_RECOVERY状态,可以去日志中查看原因/var/log/mysql-mmm/mmm_mond.log,确认都没有问题可以使用手工将节点上线"mmm_control set_online db1"
[root@monitor ~]# mmm_control show

可以看到node1又重新加到集群中了,并且有一个读vip已经漂移到node1上了
关闭node3(从库)的mysql
[root@mysqlc ~]# service mysql stop
在monitor查看集群状态
[root@monitor ~]# mmm_control show

可以看到node3(从库)的读vip漂移到了node1上,node3(从库)没有任何读vip了
3. 读延迟
启动node3(从库)的mysql
[root@mysqlc ~]# service mysql start
在monitor查看集群状态
[root@monitor ~]# mmm_control show

在monitor中编辑/etc/mysql-mmm/mmm_mon.conf
添加max_backlog参数,这个参数指的是集群中从库落后于主库多长时间,就将从库上面的读vip摘除。默认是60。

在monitor上重启进程
[root@monitor ~]# service mysql-mmm-monitor restart
在node3(从库)将数据库锁住
(root@localhost)[(none)]> flush tables with read lock;
在node2(主库)对数据库随便做点修改
(root@localhost)[test1]> insert into t1 values(20);
在node3(从库)查看从库状态
(root@localhost)[(none)]> show slave status\G

可以看到从库已经落后了13秒了
在monitor查看状态
[root@monitor ~]# mmm_control checks all

可以看到node3显示ERROR: Backlog is too big
[root@monitor ~]# mmm_control show

可以看到node3的读vip又飘走了。
三、缺点
1. 新主如果落后于旧主,故障切换时,容易造成新主的数据丢失
这个好理解,mysql主从采用的是异步架构,主库的日志如果还没有传到从库上就已经down了,从库就丢失这部分事务了。MMM这种架构也不例外。
2. 事务重复提交的问题
在monitor中编辑/etc/mysql-mmm/mmm_mon.conf,将max_backlog参数删除

在monitor上重启进程
[root@monitor ~]# service mysql-mmm-monitor restart
在node3(从库)将数据库锁释放
(root@localhost)[(none)]> unlock tables;
在monitor查看状态
[root@monitor ~]# mmm_control show 
现在承担写角色的是节点2
先把node1的sql_thread停掉,模拟node1落后于node2的情况(这种情况是指node1已经接收到node2的日志,但是还没有应用)
(root@localhost)[test1]> stop slave sql_thread;
在node2上插入一条数据
(root@localhost)[test1]> insert into t1 values(20);
然后把node2的msyql关闭
[root@mysqlb ~]# service mysql stop
在monitor查看状态
[root@monitor ~]# mmm_control show

可以看到写vip飘到node1上了
再重启node1的slave进程
(root@localhost)[test1]> stop slave;
(root@localhost)[test1]> start slave;
再来查看node1和node3上t1这张表的数据
node1
(root@localhost)[test1]> select * from t1;

node3
(root@localhost)[test1]> select * from t1;

(root@localhost)[test1]> show slave status\G

可以看到新主变成node1,但是node3上面20却有两条,出现了事务重复提交的情况。
3. 从库丢失事务的情况
先把node2的msyql打开
[root@mysqlb ~]# service mysql start
在monitor查看状态
[root@monitor ~]# mmm_control show

在node1把t1表truncate
(root@localhost)[test1]> truncate table t1;
把node3的sql_thread停掉,模拟node3落后于node1的情况(这种情况是指node3已经接收到node1的日志,但是还没有应用)
(root@localhost)[test1]> stop slave sql_thread;
在node1上插入一条数据
(root@localhost)[test1]> insert into t1 values(10);
把node1的msyql关闭
[root@mysqlb ~]# service mysql stop
再重启node3的slave进程
(root@localhost)[test1]> stop slave;
(root@localhost)[test1]> start slave;
查看node3的复制状态
(root@localhost)[test1]> show slave status\G

可以看到节点重新指向了node2
查看各节点的t1数据
node2
(root@localhost)[test1]> insert into t1 values(20);
(root@localhost)[test1]> select * from t1;

node3
(root@localhost)[test1]> select * from t1;

可以看到现在是同步了,但是此时从库已经丢失了原主库的事务,即10这条数据。
四、总结
MMM这种高可用架构比较老了,从库的数据一致性很难保证,所以在生产上尽量不要使用这种架构。后面将给大家介绍mysql的另一种高可用架构MHA。
Mysql - 高可用方案之MMM(二)的更多相关文章
- Mysql - 高可用方案之MMM(一)
一.概述 本文将介绍mysql的MMM(Master-Master replication manager for MySQL)方案.官方文档地址:https://mysql-mmm.org/star ...
- MySQL高可用方案 MHA之二 master_ip_failover
异步主从复制架构master:10.150.20.90 ed3jrdba90slave:10.15.20.97 ed3jrdba9710.150.20.132 ed3jrdba132manager:1 ...
- [转载] MySQL高可用方案选型参考
原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao. ...
- MySQL高可用方案-PXC环境部署记录
之前梳理了Mysql+Keepalived双主热备高可用操作记录,对于mysql高可用方案,经常用到的的主要有下面三种: 一.基于主从复制的高可用方案:双节点主从 + keepalived 一般来说, ...
- 五大常见的MySQL高可用方案【转】
1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...
- [转]MYSQL高可用方案探究(总结)
前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://bl ...
- MySQL高可用方案MHA的部署和原理
MHA(Master High Availability)是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一 ...
- MySQL高可用方案MHA自动Failover与手动Failover的实践及原理
集群信息 角色 IP地址 ServerID 类型 Master ...
- MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解
MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...
随机推荐
- 相关性不一定等于因果性:从 Yule-Simpson’s Paradox 讲起
1. 两件事伴随发生,不代表他们之间有因果关系 - 从一些荒诞相关性案例说起 在日常生活和数据分析中,我们可以得到大量相关性的结论,例如: 输入X变量,有98%置信度得到Y变量 只要努力,就能成功 只 ...
- 如何切换本地的GIT账号
如何切换本地的GIT账号 1.为什么登陆第一次Git之后,就不用登陆了呢? 因为电脑已经将你的登陆凭据给保存起来了. 这也正是你不知道如何切换账号的原因. 2.在哪里能看已经保存的登陆凭证呢?并能够切 ...
- hospital:广西大学生计算机设计大赛
html 当时做到的就是这些了 <!DOCTYPE html><html lang="en"><head> <title>病人信息查 ...
- tensorflow学习笔记——AlexNet
1,AlexNet网络的创新点 AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中.AlexNet主要使用到的新技术点如下: (1)成功使用ReLU作为CNN的激活函 ...
- NRF5340首款双核处理器无线SoC
nRF5340基于Nordic经过验证并在全球范围广泛采用的nRF51和nRF52系列多协议SoC而构建,同时引入了具有先进安全功能的全新灵活双处理器硬件架构,支持包括蓝牙5.1/低功耗蓝牙 (Blu ...
- 压缩感知重构算法之OLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 回文自动机pam
目的:类似回文Trie树+ac自动机,可以用来统计一些其他的回文串相关的量 复杂度:O(nlogn) https://blog.csdn.net/Lolierl/article/details/999 ...
- FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题
FPGA_VIP_V101 摄像头视频采集 调试总结之SDRAM引起的水平条纹噪声问题 此问题困扰我很近,终于在最近的项目调整中总结了规律并解决了. 因为之前对sdram并不熟悉,用得也不是太多,于是 ...
- OV7670 RAW输出 bayer 解码
今天终于搞定OV7670 raw输出啦,兴奋!! 参考链接: https://pikacode.com/liplianin/s2-liplianin/commit/dab97f5d6e3b http: ...
- HA-高可用集群
原理:两台web服务器,通过心跳线进行通信,当主节点出现服务异常,备用节点通过探测判断主节点是否存活,若是不存活,就把服务接管过来. Web1和Web2中间有一根心跳线,检查对方的存活状态.流动IP: ...