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实现高可用和部署时须要考虑的问题的更多相关文章

  1. mysql-master-ha 实现mysql master的高可用。

    常用的mysql 高可用有下面几种方案: 名称 原理 特点 mysqlmha Perl脚本对mysql master做心跳,master down了以后,选举new master   ,是要改代理层的 ...

  2. 常见的Mysql十款高可用方案

    简介 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作 ...

  3. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...

  4. mysql数据库的高可用方法总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一 些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无 ...

  5. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...

  6. MySQL系列:高可用架构之MHA

    前言 从11年毕业到现在,工作也好些年头,入坑mysql也有近四年的时间,也捣鼓过像mongodb.redis.cassandra.neo4j等Nosql数据库.其实一直想写博客分享下工作上的零零碎碎 ...

  7. Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)

    Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...

  8. MySQL数据库的高可用方案总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...

  9. 25 mysql怎么保证高可用

    上一篇介绍了binlog的基本内容,在主备关系中,是每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有的binlog,都可以传到备库并被正确执行,备库就能跟主库一致的状态, ...

随机推荐

  1. MySQL安装Write configuration file 提示:configuration file template my.ini Error code-1

    在安装MySQL的时候, 在最后安装时,最后一步出现Write configuration file没成功勾选,并提示:configuration file template D:\mysql\my- ...

  2. zabbix3.0升级到4.0

    升级步鄹: 3.0->3.2 1.停服务 service zabbix-server stop 2.备份配置文件 #cp /etc/zabbix/zabbix_server.conf /data ...

  3. 内存块是一种数据结构,内核对象&句柄

    内核对象&句柄 目录 1 内核对象的概念 2 内核对象的使用计数 3 句柄 4 句柄表   项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解. ...

  4. 移动端1px的边框

    我们知道,在移动端存在物理像素(physical pixel)和设备独立像素(density-independent pixel)的概念.物理像素也称为设备像素,它是显示设备中一个最微小的物理部件,每 ...

  5. PTA(Advanced Level)1075.PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  6. memcached命令行、Memcached数据导出和导入

    1.memcached命令行 telnet 127.0.0.1 11211set key2 0 30 2abSTOREDget key2VALUE key2 0 2abEND  如: set key3 ...

  7. SQL Server 下载与安装

    1.首先去Microsoft官网下载对应的安装程序,下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.运行安 ...

  8. oracle——学习之路(SQL基础)

    使用create语句创建表 create table 表名 ( 列名 类型 [null     |     not null], 列名 类型 [null     |     not null] ) 在 ...

  9. Python—格式化输出

    Python提供了很多种格式化方式(包括但不限于以下几种): [,]分隔 name = 'jack' age = -0.5 print(name, 'is', age, 'years old.') j ...

  10. JS中的继承(上)

    JS中的继承(上) 学过java或者c#之类语言的同学,应该会对js的继承感到很困惑--不要问我怎么知道的,js的继承主要是基于原型(prototype)的,对js的原型感兴趣的同学,可以了解一下我之 ...