mysql-mmm实现高可用和部署时须要考虑的问题
mysql-mmm简介
Multi-Master Replication Manager for MySQL,简称mmm,官方的介绍可以参考mmm官网。好处自然不用说,读写分离,官方称读能做到负载均衡。我们在实际应用中只用到了master的高可用,所有的slave在net scaler后端做的负载均衡。
实现原理
两台master互为主从,一台为只读,做为备份,应急时可做为写master.其中mmm_mond进程定时心跳检测,失败则将write ip 浮动到另外一台master。
安装部署
讲mmm安装部署的文章有好多,推荐官方安装教程。本例中去掉了slave的虚拟ip,信息如下:

本实例中有一个write ip:192.168.48.22, 只用到了master的高可用,所以省略掉了slave的虚IP,这样也算是节省资源,搭建的过程中可以用epel解决perl包依赖的问题。
测试
[root@localhost mysql-mmm]# mmm_control show
db1(192.168.48.21) master/ONLINE. Roles: writer(192.168.48.22)
db2(192.168.48.106) master/ONLINE. Roles:
db3(192.168.48.161) slave/ONLINE. Roles:
如上可以看到writer vip分配给了db1,在db1上执行ip add命令,可以看到在eth0上增加了vip:48.22。
[root@localhost mysql]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:3b:da:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.48.21/23 brd 192.168.49.255 scope global eth0
inet 192.168.48.22/32 scope global eth0
inet6 fe80::20c:29ff:fe3b:da3d/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
通过如下命令对vip进行切换,从db1漂到db2:
[root@localhost mysql-mmm]# mmm_control move_role writer db2
OK: Role 'writer' has been moved from 'db1' to 'db2'. Now you can wait some time and check new roles info!
[root@localhost mysql-mmm]# mmm_control show
db1(192.168.48.21) master/ONLINE. Roles:
db2(192.168.48.106) master/ONLINE. Roles: writer(192.168.48.22)
db3(192.168.48.161) slave/ONLINE. Roles:
以上完成了基本的搭建和vip迁移,对前端应用来讲是透明的,只要连那个vip就可以,读操作通过其它负载均衡手段来实现。
FAQ
1.perl包少装一些可以么?
答:不可以,没报错并不代表运行稳定,出问题就没钱买后悔药了。
2.两台master可以不在一个网段么?
答:不可以,虚ip是不变的,虚ip和双master一定要同一网段。
3.从库如何设置master_host?选择vip会不会更好?
答:我也有过这样的疑惑,实际测试中发现,mmm比我们智能的多,他会跟据master的binlog,pos自动切主。
4.可以将多个slave分别连到不同的master上么?
答:不可以,记住mmm虽然是双主,但为了保证一致性,只有一个可写,也可以理解整个体系只有一台master,这样mmm对从库进行切主时更方便。
5.我可以对slave做级联么?
答:可以,和正常的没区别。
6.如何设置read_only参数?
答:初始化时全部指定read_only=on, mmm会识别主库并将read_only关闭。
7.如何设置log_slave_update参数?
答:简单粗暴的做法是关闭,防止切master后造成双写的问题。
7.怎么应对mmm_mond监控进程单点问题?
答:暂时没有好的办法,开多个mmm_mond只会造成混乱,就像ZF是的,你说国际接轨,他和你说国情,你说国情,他要你和国际接轨。话说回来,谁有perl开发功力,可以偿试下。
8.什么是flapping?
答:就是说vip来回漂移,master在offline和online之间来回变化。可以取消prefer选项,并设置auto_set_online=n,在n秒之内不参与选择。
9.当前master挂掉,binlog没有传到另外一台master怎么办?
答:如果担心突然宕机造成数据丢失,可以考虑用goole插件,semi-sync,percona版本mysql己经集成,直接可以使用。
mysql-mmm实现高可用和部署时须要考虑的问题的更多相关文章
- mysql-master-ha 实现mysql master的高可用。
常用的mysql 高可用有下面几种方案: 名称 原理 特点 mysqlmha Perl脚本对mysql master做心跳,master down了以后,选举new master ,是要改代理层的 ...
- 常见的Mysql十款高可用方案
简介 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作 ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...
- mysql数据库的高可用方法总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一 些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无 ...
- 浅谈mysql主从复制的高可用解决方案
1.熟悉几个组件(部分摘自网络)1.1.drbd —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...
- MySQL系列:高可用架构之MHA
前言 从11年毕业到现在,工作也好些年头,入坑mysql也有近四年的时间,也捣鼓过像mongodb.redis.cassandra.neo4j等Nosql数据库.其实一直想写博客分享下工作上的零零碎碎 ...
- Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...
- MySQL数据库的高可用方案总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...
- 25 mysql怎么保证高可用
上一篇介绍了binlog的基本内容,在主备关系中,是每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有的binlog,都可以传到备库并被正确执行,备库就能跟主库一致的状态, ...
随机推荐
- git合并时忽略某个文件
因为开发现场跟部署的环境不同,有很多ip地址每次都要改来改去;于是开两个分支master(用来保存部署现场的ip)和dev(开发环境的ip),开发功能时在dev分支,然后使用master合并,每个分支 ...
- 【18.065】Lecture2
由于这一课的教材放出来了,所以直接将整个pdf放上来.   
- 【机器学习】数据处理中白化Whitening的作用图解分析
之前在看斯坦福教程中whiteining这一章时,由于原始图像相邻像素值具有高度相关性,所以图像数据信息冗余,对于白化的作用的描述主要有两个方面:1,减少特征之间的相关性:2,特征具有相同的方差(协方 ...
- SQuirreL连接Phoenix报java.util.concurrent.TimeoutException
1.表象 java.util.concurrent.TimeoutException at java.util.concurrent.FutureTask.get(FutureTask.java:20 ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
- C语言Ⅰ博客作业09
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10029 我在这个课程的 ...
- Javascript学习笔记四——操作表单
Javascript学习笔记 大多网页比如腾讯,百度云之类的需要登陆,用户输入账号密码就可以登陆,那么浏览器是如何获取用户的输入的呢?今天就记录一下操作表单. 操作表单与操作DOM是差不多的,表单本身 ...
- 第五周课程总结&实验报告(四)
第五周课程总结 本周主要学习了 1.抽象类 抽象类的定义格式 abstract class抽象类名称{ 属性; 访问权限返回值类型方法名称(参数){ //普通方法 [return返回值]; } 访问权 ...
- Java基础 面试总结(一)
一.java基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机( ...
- LC 155 Min Stack
问题描述 Design a stack that supports push, pop, top, and retrieving the minimum element in constant tim ...