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己经集成,直接可以使用。

最新文章

  1. Android 自定义View (五)&mdash;&mdash;实践
  2. 浅析Java.lang.Runtime类
  3. arc下dealloc得处理
  4. salesforce 零基础学习(二十二)Test简单使用
  5. mac下Android开发环境搭建
  6. Java基础知识强化之IO流笔记72:NIO之 NIO核心组件(NIO使用代码示例)
  7. npm check failed 解决办法
  8. emoji表情字符串 mysql 普通 utf8 格式无法存入
  9. javascript 未结束的字符串常量
  10. JS它DOM
  11. 四个漂亮的CSS样式表
  12. Tiny6410之LED裸机驱动
  13. HDFS在Linux下的命令
  14. SQLServer低版本附加高版本的数据库常用处理方法
  15. Java基础:Java简介及安装配置(1)
  16. Cesium学习网址
  17. Vmware 控制脚本
  18. spring boot项目升级到2.0.1,提示java.lang.ClassNotFoundException: org.apache.log4j.Logger错误
  19. what&#39;s the python之模块
  20. ubuntu14.04 安装系统/搜狗/QT/qq/wps/CAJviewer

热门文章

  1. 论文阅读 | TextBugger: Generating Adversarial Text Against Real-world Applications
  2. mongo fork
  3. python录音并调用百度语音识别接口
  4. 数据传输协议protobuf的使用及案例
  5. 阿里RDS
  6. 数据检索grep
  7. python-day7(正式学习)
  8. Ruby Rails学习中:Ruby内置的辅助方法,基础内容回顾补充
  9. python基础知识0-5(单双向队列)
  10. [Jenkins]初次访问Jenkins,输入密码后,页面卡在空白界面一直未加载出内容_解决方案