MySQL双主高可用架构之MMM实战
MMM简介:
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),是关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能基于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
MMM项目来自 Google:http://code.google.com/p/mysql-master-master
mmm_control :通过命令行管理mmm_mond进程
关于此架构的优缺点:
优点:安全性、稳定性高,可扩展性好,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,可以在程序扩展上比较难实现。同时对主从(双主)同步延迟要求比较高!因此不适合数据安全非常严格的场合。
实用场所:高访问量,业务增长快,并且要求实现读写分离的场景。
环境:
MMM_Monitor: 192.168.8.31-----(MySQL-MON)
MySQL_Master1: 192.168.8.32-----(MySQL-M1)
MySQL_Master2: 192.168.8.33-----(MySQL-M2)
VIP_Write: 192.168.8.30-----(VIP0)
VIP_Read1: 192.168.8.34-----(VIP1)
VIP_Read2: 192.168.8.35-----(VIP2)
cat >>/etc/hosts<<EOF
192.168.8.31 MySQL-MON
192.168.8.32 MySQL-M1
具体安装过过程略,如果不会安装 mysql的可以不用看本教程了!
log-bin = /data/mysql/binlog/mysql-bin
relay-log-index=mysql-relay.index
log-bin = /data/mysql/binlog/mysql-bin
relay-log-index=mysql-relay.index
wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm
[root@MySQL-M1 mysql-mmm]# rpm -qa |grep mysql-mmm
mysql> grant file, replication salve on *.* to 'repl'@'192.168.8.%' identified by "repl";
mysql> grant replication client on *.* to "mmm_monitor"@"192.168.8.%" identified by "mmm_monitor";
要注意一点是:由于MySQL-M1和MySQL-M2之间有复制,所以只要在一台服务器上执行就可以了,不过要在MySQL-MON上执行后面两条!
2.1 把MySQL-M1服务器作为MySQL-M2服务器主
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 107 | | mysql |
+------------------+----------+--------------+------------------+
Query OK, 0 rows affected (0.07 sec)
Query OK, 0 rows affected (0.00 sec)
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Log_File: mysql-bin.000003
Relay_Log_File: mysql-relay.000002
Relay_Master_Log_File: mysql-bin.000003
2.2 把MySQL-M2服务器作为MySQL-M1服务器主
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 605 | | |
+------------------+----------+--------------+------------------+
Query OK, 0 rows affected (0.06 sec)
Query OK, 0 rows affected (0.00 sec)
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Log_File: mysql-bin.000003
Relay_Log_File: mysql-relay.000002
Relay_Master_Log_File: mysql-bin.000003
OK...主主模式配置成功!主主复制同步测试这里不再说明,接着下面的步骤。
1. 在三台服务器修改mmm_common.conf配置文件(三台服务器此配置文件内容相同)
pid_path /var/run/mysql-mmm/mmm_agentd.pid
bin_path /usr/libexec/mysql-mmm/
replication_user repl #前面创建的复制账号
replication_password repl #前面创建的复制账号密码
agent_user mmm_agent #前面创建的代理账号
agent_password mmm_agent #前面创建的代理账号密码
ip 192.168.8.32 #MySQL-M1服务器IP
hosts MySQL-M1, MySQL-M2 #能够作为Write的服务器
ips 192.168.8.30 #Write节点虚拟IP,应用的写请求将直接连接到这个IP
hosts MySQL-M1, MySQL-M2 #作为Reader的服务器
ips 192.168.8.34, 192.168.8.35 #Reader节点虚拟IP,应用的读请求将直接连接到这些IP
exclusive:在这种模式下任何时候只能一个主机拥有该角色
通常情况下writer是exclusive,reader是balanced
2. 在MySQL-M1服务器上修改mmm_agent.conf配置文件
# The 'this' variable refers to this server. Proper operation requires
# that 'this' server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
3. 在MySQL-M2服务器上修改mmm_agent.conf配置文件
# The 'this' variable refers to this server. Proper operation requires
# that 'this' server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
4. 在MySQL-MON服务器上配置mmm_mon.conf配置文件
pid_path /var/run/mysql-mmm/mmm_mond.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 192.168.8.32,192.168.8.33 #可以ping的真实agent服务器的IP
auto_set_online 10 #发现节点丢失则过10秒进行切换
# The kill_host_bin does not exist by default, though the monitor will
# throw a warning about it missing. See the section 5.10 "Kill Host
# Functionality" in the PDF documentation.
# kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host
monitor_user mmm_monitor#前面创建的监控账号
monitor_password mmm_monitor #前面创建的监控账号密码
[root@MySQL-M1 mysql-mmm]# cat /etc/default/mysql-mmm-agent
[root@MySQL-M2 mysql-mmm]# cat /etc/default/mysql-mmm-agent
/etc/init.d/mysql-mmm-agent start
/etc/init.d/mysql-mmm-monitor start
[root@MySQL-MON mysql-mmm]# mmm_control show
MySQL-M1(192.168.8.32) master/ONLINE. Roles: reader(192.168.8.35), writer(192.168.8.30)
MySQL-M2(192.168.8.33) master/ONLINE. Roles: reader(192.168.8.34)
[root@MySQL-MON mysql-mmm]# mmm_control checks all
MySQL-M2 ping [last change: 2012/10/15 05:07:35] OK
MySQL-M2 mysql [last change: 2012/10/15 05:07:35] OK
MySQL-M2 rep_threads [last change: 2012/10/15 05:07:35] OK
MySQL-M2 rep_backlog [last change: 2012/10/15 05:07:35] OK: Backlog is null
MySQL-M1 ping [last change: 2012/10/15 05:07:35] OK
MySQL-M1 mysql [last change: 2012/10/15 05:07:35] OK
MySQL-M1 rep_threads [last change: 2012/10/15 05:07:35] OK
MySQL-M1 rep_backlog [last change: 2012/10/15 05:07:35] OK: Backlog is null
[root@MySQL-MON mysql-mmm]# mmm_control mode
[root@MySQL-M1 mysql-mmm]# cat /var/log/mysql-mmm/mmm_agentd.log
2012/10/15 05:06:06 INFO We have some new roles added or old rules deleted!
2012/10/15 05:06:06 INFO Added: reader(192.168.8.35), writer(192.168.8.30)
[root@MySQL-M2 mysql-mmm]# cat /var/log/mysql-mmm/mmm_agentd.log
2012/10/16 14:53:51 INFO We have some new roles added or old rules deleted!
2012/10/16 14:53:51 INFO Added: reader(192.168.8.34)
[root@MySQL-MON ~]# cat /var/log/mysql-mmm/mmm_mond.log
[root@MySQL-MON ~]# ps aux |grep mmm
root 19176 0.0 2.8 115784 14320 ? S 05:07 0:00 mmm_mond
root 19178 0.3 14.4 331756 71556 ? Sl 05:07 0:18 mmm_mond
root 19185 0.1 1.8 105824 9376 ? S 05:07 0:06 perl /usr/libexec/mysql-mmm/monitor/checker ping_ip
root 19188 0.0 2.2 137644 10940 ? S 05:07 0:05 perl /usr/libexec/mysql-mmm/monitor/checker mysql
root 19190 0.0 1.8 105824 9384 ? S 05:07 0:02 perl /usr/libexec/mysql-mmm/monitor/checker ping
root 19308 0.0 0.1 61228 720 pts/1 R+ 06:42 0:00 grep mmm
[root@MySQL-M1 mysql-mmm]# ps aux |grep mmm
root 1371 0.0 0.1 61228 724 pts/1 R+ 06:40 0:00 grep mmm
root 24228 0.0 2.2 106096 11068 ? S 04:58 0:00 mmm_agentd
root 24230 0.2 2.6 140148 13204 ? S 04:58 0:16 mmm_agentd
[root@MySQL-M1 mysql-mmm]# service mysqld stop
[root@MySQL-M1 mysql-mmm]# ps aux |grep mysqld |grep -v grep
[root@MySQL-MON ~]# mmm_control show
MySQL-M1(192.168.8.32) master/HARD_OFFLINE. Roles:
[root@MySQL-M1 mysql-mmm]# service mysqld start
[root@MySQL-M1 mysql-mmm]# ps aux |grep mysqld |grep -v grep
[root@MySQL-MON ~]# mmm_control show
MySQL-M1(192.168.8.32) master/ONLINE. Roles: reader(192.168.8.34)
MySQL-M2(192.168.8.33) master/ONLINE. Roles: reader(192.168.8.35), writer(192.168.8.30)
可以看到MySQL-M1恢复后又OK了。。。。但是MySQL-M1此时不再提供写代理了,只提供读代理了!
[root@MySQL-M1 mysql-mmm]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.1.32/24 brd 192.168.1.255 scope global eth0
inet 192.168.8.34/32 scope global eth0
[root@MySQL-M2 mysql-mmm]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.8.33/24 brd 192.168.8.255 scope global eth0
inet 192.168.8.35/32 scope global eth0
inet 192.168.8.30/32 scope global eth0
总结:mmm_mond监控各mysql-server的运行状态
这里只测试下MySQL-MMM故障转移,有兴趣的朋友还要以测试下当主主复制出现问题时,会导致MMM出现什么问题!
[root@MySQL-MON ~]# /usr/sbin/mmm_control help
help - show this message #查看帮助信息
ping - ping monitor #ping监控,用于监控检测agent服务器
set_online <host> - set host <host> online #设置某host为online状态
set_offline <host> - set host <host> offline #设置某host为offline状态
mode - print current mode. #打印当前的模式,是ACTIVE、MANUAL、PASSIVE(默认是ACTIVE模式)
set_active - switch into active mode. #更改为active模式
set_manual - switch into manual mode. #更改为manual模式
set_passive - switch into passive mode. #更改为passive模式
(Only use --force if you know what you are doing!)
set_ip <ip> <host> - set role with ip <ip> to host <host> help #为host设置ip,只有passive模式的时候才允许更改!
MySQL双主高可用架构之MMM实战相关推荐
- Keepalived+Haproxy+Mysql(双主)高可用架构部署
Keepalived+Haproxy+Mysql(双主)高可用架构部署 一.背景 公司原部署的Mysql架构为keepalived+Mysql双主,但是这个架构有个缺陷是所有的读写请求都在一台机器上( ...
- MySQL集群(四)之keepalived实现mysql双主高可用
前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Kee ...
- 基于keepalived的mysql_【实用】基于keepalived的mysql双主高可用系统
原标题:[实用]基于keepalived的mysql双主高可用系统 mysql单节点存储时,系统出现故障时服务不可用.不能及时恢复的问题,因此实际使用时,一般都会使用mysql双机方案,使用keepa ...
- keepalived+mysql双主高可用配置
具体架构图如下 两个节点一主一从(从库上面也可以再挂一个从库),或者是双主,再利用keepalived在出现容灾时进行高可用切换. Keepalived原理说明: 其实这个原理可以很简单的用一个故事说 ...
- haproxy实现mysql双主高可用的详细过程
一.安装haproxy 1.找到haproxy的包 http://pkgs.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.7.9.tar.gz 也可以直接 ...
- MySQL集群高可用架构
MySQL集群高可用架构 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个 ...
- MySQL常见的高可用架构
MySQL常见的高可用架构 概述: 1.基于共享存储的方案SAN 优点: 限制或缺点: 2.基于磁盘复制的方案 MySQL+DRDB架构 优点: 限制或缺点: 3.MySQL+MHA架构 优点: 缺点 ...
- 阿里双11高可用架构演进之路
阿里巴巴平台的业务规模在过去的8年呈指数级增长,给双11所带来的技术挑战是世界性的,特别是如何在零点峰值到来时确保系统的稳定性.零点技术挑战的本质是用有限的成本去实现最大化的集群整体吞吐能力和最佳的用 ...
- MySQL(11)数据库实现高可用架构之MMM
文章目录 一.MySQL MMM介绍 1.1 什么是 MMM? 1.2 MMM的组成 2.1 MySQL M搭建的步骤(理论) 2.1.1 搭建步骤 2.1.2故障测试 2.2 MySQL M搭建具体 ...
- 浅谈 MySQL 集群高可用架构
作者:霸都民工哥,原名储成友 关注于Linux系统运维及各类运维架构技术,目前正研究学习大数据与自动化运维,热爱开源,拥抱开源. 一,前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库 ...
最新文章
- Python中sys模块详解
- error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug...
- FT1248开发笔记
- JAVA基础--IO输入输出(File使用)17
- leetcode刷题笔记(3)(python)
- Tushare 简介与使用
- android 添加一维数组,Android:打造“万能”Adapter与ViewHolder
- Java、JSP网吧自动计费收费管理系统
- 微信小程序疑难杂症---修改数组里的某个属性的值
- 利用selenium框架爬取京东省市区数据时,网页里面内嵌的一个窗口遇到的NoSuchElementException的 bug,原因是iframe
- 安徽自招计算机基础考试试题,点划自招|东南大学、中国药大2017年自主招生考情揭秘,附真题。...
- 使用spilt遇到问题
- 黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)
- 雷神加速器无限更新失败️️️
- uhs3内存卡有哪些_存储卡的读写速度的区别:class 10,UHS-1(U1 U3),UHS-3
- 项目的战前、战中与战后
- 轨道交通通信施工学习总结(三)区间光电缆敷设
- 51单片机学习笔记【七】——蜂鸣器和继电器
- Java程序设计——事务管理(JDBC编程)
- IDEA添加外部插件-yuicompressor压缩js/css
热门文章
- Hadoop学习笔记(4)hadoop集群模式安装
- CSS圆角兼容IE6
- ARM中C和汇编混合编程及示例(转)
- c#获取或修改配置文件
- android cpu降温代码,Android手机CM设置中CPU模式解释
- Android 高通 Wi-Fi 驱动
- arm汇编—str,mov等指令
- ffmpeg 如何音视频同步
- B - 最短路径问题
- TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor