200 ? "200px" : this.width)!important;}
-->

介绍

本篇文章主要介绍搭建MMM方案以及MMM架构的原理。这里不介绍主从、主主的搭建方法,MMM方案不适用对数据一致性要求很高的业务。

 架构

部署

1.修改hosts

在所有的服务器中执行相同的操作。

vim /etc/hosts

  1. 192.168.137.10 master
  2. 192.168.137.20 backup
  3. 192.168.137.30 slave
  4. 192.168.137.40 monitor

2.添加mysql用户

只需要在所有的数据库端执行即可,监控端不需要。

  1. GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDENTIFIED BY 'mmm_monitor';
  2. GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.137.%' IDENTIFIED BY 'mmm_agent';
  3. flush privileges;

注意:repl用户在搭建主从服务的时候已经创建好了。

 3.安装监控软件

注意:监控端全部安装,但是监控端只需要用到mysql-mmm-monitor,mysql-mmm-agent不需要启动。数据库端只需要安装mysql-mmm-agent

1.在监控服务器执行

  1. wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
  2. rpm ivh epel-release-6-8.noarch.rpm
  3. yum y install mysql-mmm*

2.在数据库服务器上执行,每个数据库服务器上都要执行

  1. wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
  2. rpm ivh epel-release-6-8.noarch.rpm
  3. yum -y install mysql-mmm-agent

路径说明:

4.配置文件

db服务器配置文件:mmm_agent.conf,mmm_common.conf

监控服务器的配置文件:mmm_mon.conf,mmm_common.conf(该文件所有服务器一样)

配置db服务器

1.修改master服务器

  1. vim /etc/mysql-mmm/mmm_common.conf
  1. active_master_role writer ###积极的master角色的标示,所有的db服务器都需要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。
  2.  
  3. <host default>
  4. cluster_interface eth0 #####群集的网络接口
  5. pid_path /var/run/mysql-mmm/mmm_agentd.pid ####pid路径
  6. bin_path /usr/libexec/mysql-mmm/ #####可执行文件路径
  7. replication_user repl #######复制用户
  8. replication_password repl #######复制用户密码
  9. agent_user mmm_agent #######代理用户,用于更改只读操作
  10. agent_password mmm_agent #######代理用户密码
  11. </host>
  12.  
  13. <host master> ##########master1的host名
  14. ip 192.168.137.10 #####master1的ip
  15. mode master ########角色属性,master代表是主
  16. peer backup ########与master1对等的服务器的host名,也就是master2的服务器host名
  17. </host>
  18.  
  19. <host backup> ####和master的概念一样
  20. ip 192.168.137.20
  21. mode master
  22. peer master
  23. </host>
  24.  
  25. <host slave> #####从库的host名,如果存在多个从库可以重复一样的配置
  26. ip 192.168.137.30 ####从的ip
  27. mode slave #####slave的角色属性代表当前host是从
  28. </host>
  29.  
  30. <role writer> ####writer角色配置
  31. hosts master,backup ####能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。
  32. ips 192.168.137.100 #####对外提供的写操作的虚拟IP
  33. mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP
  34. </role>
  35.  
  36. <role reader> #####read角色配置
  37. hosts backup,slave ######对外提供读操作的服务器的host名,当然这里也可以把master加进来
  38. ips 192.168.137.120,192.168.137.130,192.168.137.140 ###对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip
  39. mode balanced ###balanced代表负载均衡
  40. </role>

同时将这个文件拷贝到其它的服务器包括监控服务器,配置不变

  1. scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/
  2. scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/
  3. scp /etc/mysql-mmm/mmm_common.conf monitor:/etc/mysql-mmm/

2.代理文件配置

vim /etc/mysql-mmm/mmm_agent.conf

注意:这个配置只配置db服务器,监控服务器不需要配置,this后面的host名改成当前服务器的host名,master2和slave也改成对应的服务器的host名。

3.启动代理进程

  1. chkconfig mysql-mmm-agent on
  1. service mysql-mmm-agent start

每台db服务器上都需要启动

配置监控服务器

  1. vim /etc/mysql-mmm/mmm_mon.conf
  1. include mmm_common.conf
  2. <monitor>
  3. ip 127.0.0.1
  4. pid_path /var/run/mysql-mmm/mmm_mond.pid
  5. bin_path /usr/libexec/mysql-mmm
  6. status_path /var/lib/mysql-mmm/mmm_mond.status #####群集的状态文件,也就是执行mmm_control show操作的显示来源。
  7. ping_ips 192.168.137.10,192.168.137.20,192.168.137.30 ######被监控的db服务器的ip地址
  8. auto_set_online 0 ####设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online
  9.  
  10. # The kill_host_bin does not exist by default, though the monitor will
  11. # throw a warning about it missing. See the section 5.10 "Kill Host
  12. # Functionality" in the PDF documentation.
  13. #
  14. # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host
  15. #
  16. </monitor>
  17.  
  18. <host default>
  19. monitor_user mmm_monitor ####监控db服务器的用户
  20. monitor_password mmm_monitor ####监控db服务器的密码
  21. </host>
  22.  
  23. debug 0 #######debug 0正常模式,1为debug模式

注意:配置文件中的注释是为了便于理解,在部署的时候最好把注释去掉以免因为注释造成的潜在影响。

启动监控进程

  1. chkconfig mysql-mmm-monitor on
  2. service mysql-mmm-monitor start

注意:无论是在db端还是在监控端如果有对配置文件进行修改操作都需要重启代理进程和监控进程。

操作分析

日志文件

日志文件往往是分析错误的关键,所以要善于利用日志文件进行问题分析。

db端:/var/log/mysql-mmm/mmm_agentd.log

监控端:/var/log/mysql-mmm/mmm_mond.log

命令文件

  1. mmm_agentd db代理进程的启动文件
  2. mmm_mond :监控进程的启动文件
  3. mmm_backup :备份文件
  4. mmm_restore :还原文件
  5. mmm_clone
  6. mmm_control:监控操作命令文件

db服务器端只有mmm_agentd程序,其它的都是在monitor服务器端。

mmm_control用法

mmm_control程序可以用于监控群集状态、切换writer、设置online\offline操作等。

  1. Valid commands are:
  2. help - show this message ###帮助信息
  3. ping - ping monitor ###ping当前的群集是否正常
  4. show - show status ####群集在线状态检查
  5. checks [<host>|all [<check>|all]] - show checks status #####执行监控检查操作
  6. set_online <host> - set host <host> online ####将host设置为online
  7. set_offline <host> - set host <host> offline ###将host设置为offline
  8. mode - print current mode. ####打印输出当前的mode
  9. set_active - switch into active mode.
  10. set_manual - switch into manual mode.
  11. set_passive - switch into passive mode.
  12. move_role [--force] <role> <host> - move exclusive role <role> to host <host> ####移除writer服务器为指定的host服务器
  13. (Only use --force if you know what you are doing!)
  14. set_ip <ip> <host> - set role with ip <ip> to host <host>

1.检查所有的db服务器群集状态

  1. [root@monitor mysql-mmm]# mmm_control checks all
  2. master ping [last change: 2016/06/07 16:31:24] OK
  3. master mysql [last change: 2016/06/07 16:31:24] OK
  4. master rep_threads [last change: 2016/06/07 16:31:24] OK
  5. master rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
  6. slave ping [last change: 2016/06/07 16:31:24] OK
  7. slave mysql [last change: 2016/06/07 16:31:24] OK
  8. slave rep_threads [last change: 2016/06/07 16:31:24] OK
  9. slave rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
  10. backup ping [last change: 2016/06/07 16:31:24] OK
  11. backup mysql [last change: 2016/06/07 16:31:24] OK
  12. backup rep_threads [last change: 2016/06/07 16:31:24] OK
  13. backup rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null

检查项包括:ping、mysql是否正常运行、复制线程是否正常等

2.检查群集环境在线状况

  1. [root@monitor mysql-mmm]# mmm_control show
  2. backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120)
  3. master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
  4. slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

3.对指定的host执行offline操作

  1. [root@monitor mysql-mmm]# mmm_control set_offline backup
  2. OK: State of 'backup' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
  3. [root@monitor mysql-mmm]# mmm_control show
  4. backup(192.168.137.20) master/ADMIN_OFFLINE. Roles:
  5. master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
  6. slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)

4.对指定的host执行onine操作

  1. [root@monitor mysql-mmm]# mmm_control set_online backup
  2. OK: State of 'backup' changed to ONLINE. Now you can wait some time and check its new roles!
  3. [root@monitor mysql-mmm]# mmm_control show
  4. backup(192.168.137.20) master/REPLICATION_FAIL. Roles:
  5. master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
  6. slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)
  7.  
  8. [root@monitor mysql-mmm]# mmm_control show
  9. backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120)
  10. master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100)
  11. slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

5.执行write切换

1.查看当前的slave对应的master

  1. [root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'
  2. Warning: Using a password on the command line interface can be insecure.
  3. *************************** 1. row ***************************
  4. Slave_IO_State: Waiting for master to send event
  5. Master_Host: 192.168.137.10
  6. Master_User: repl
  7. Master_Port: 3306
  8. Connect_Retry: 60
  9. Master_Log_File: mysql-bin.000073
  10. Read_Master_Log_Pos: 1461
  11. Relay_Log_File: mysql-relay-bin.000006
  12. Relay_Log_Pos: 283
  13. Relay_Master_Log_File: mysql-bin.000073
  14. Slave_IO_Running: Yes
  15. Slave_SQL_Running: Yes

2.writer切换,要确保mmm_common.conf文件中的writer属性有配置对应的host,否则无法切换

  1. [root@monitor mysql-mmm]# mmm_control move_role writer backup
  2. OK: Role 'writer' has been moved from 'master' to 'backup'. Now you can wait some time and check new roles info!
  3. [root@monitor mysql-mmm]# mmm_control show
  4. backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120), writer(192.168.137.100)
  5. master(192.168.137.10) master/ONLINE. Roles:
  6. slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)

3.save从库自动切换到了新的master

  1. [root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'
  2. Warning: Using a password on the command line interface can be insecure.
  3. *************************** 1. row ***************************
  4. Slave_IO_State: Waiting for master to send event
  5. Master_Host: 192.168.137.20
  6. Master_User: repl
  7. Master_Port: 3306
  8. Connect_Retry: 60
  9. Master_Log_File: mysql-bin.000039
  10. Read_Master_Log_Pos: 120
  11. Relay_Log_File: mysql-relay-bin.000002
  12. Relay_Log_Pos: 283
  13. Relay_Master_Log_File: mysql-bin.000039
  14. Slave_IO_Running: Yes
  15. Slave_SQL_Running: Yes

其它处理问题

如果不想让writer从master切换到backup(包括主从的延时也会导致写VIP的切换),那么可以在配置/etc/mysql-mmm/mmm_common.conf时,去掉<role write>中的backup

  1. <role writer> ####writer角色配置
  2. hosts master ###这里只配置一个Hosts
  3. ips 192.168.137.100 #####对外提供的写操作的虚拟IP
  4. mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP
  5. </role>

这样的话当master出现故障了writer写操作不会切换到backup服务器,并且slave也不会指向新的master,此时当前的MMM之前对外提供写服务。

之前写的复制相关文章:

主从复制:http://www.cnblogs.com/chenmh/p/5089919.html

主主复制:http://www.cnblogs.com/chenmh/p/5153184.html

总结

主从的延时会导致写VIP的切换,下一篇文章会写关于半同步复制结合MMM方案,可以更有效的解决切换数据不一致性的问题,欢迎关注。

1.对外提供读写的虚拟IP是由monitor程序控制。如果monitor没有启动那么db服务器不会被分配虚拟ip,但是如果已经分配好了虚拟ip当monitor程序关闭了原先分配的虚拟ip不会立即关闭外部程序还可以连接访问(只要不重启网络),这样的好处就是对于monitor的可靠性要求就会低一些,但是如果这个时候其中的某一个db服务器故障了就无法处理切换,也就是原先的虚拟ip还是维持不变,挂掉的那台DB的虚拟ip会变的不可访问。

2.agent程序受monitor程序的控制处理write切换,从库切换等操作。如果monitor进程关闭了那么agent进程就起不到什么作用,它本身不能处理故障。

3.monitor程序负责监控db服务器的状态,包括Mysql数据库、服务器是否运行、复制线程是否正常、主从延时等;它还用于控制agent程序处理故障。

4.monitor会每隔几秒钟监控db服务器的状态,如果db服务器已经从故障变成了正常,那么monitor会自动在60s之后将其设置为online状态(默认是60s可以设为其它的值),有监控端的配置文件参数“auto_set_online”决定,群集服务器的状态有三种分别是:HARD_OFFLINE→AWAITING_RECOVERY→online

5.默认monitor会控制mmm_agent会将writer db服务器read_only修改为OFF,其它的db服务器read_only修改为ON,所以为了严谨可以在所有的服务器的my.cnf文件中加入read_only=1由monitor控制来控制writer和read,root用户和复制用户不受read_only参数的影响

6.monitor会控制slave指向master,如果当前master故障了MMM会控制slave指向新的master,由于MMM是非抢占机制所以新的master将一直承担写服务。

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

MySQL MMM高可用方案的更多相关文章

  1. Oracle和MySQL的高可用方案对比【转】

    关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...

  2. Mysql MMM 高可用

    一.Mysql MMM 高可用概况: mmm_mond  负责所有的监控工作的监控守护进程,决定节点的移除等: mmm_agentd  运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给 ...

  3. mysql的MMM高可用方案

    1    MMM高可用mysql方案 1.1  方案简介 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复 ...

  4. mysql之MMM高可用方案简介

    MMM(Master-Master Replication Manager for MySQL) MySQL主主复制管理器,提供了MySQL主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件.在 ...

  5. 分布式数据存储 - MySQL主从复制高可用方案

    前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...

  6. MYSQL数据库高可用方案探究

    MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...

  7. 搭建MySQL MMM高可用

    搭建MMM: 1,安装 agent 节点执行 yum install -y mysql-mmm-agent 2, monitor 节点执行 yum install -y mysql-mmm-monit ...

  8. MySQL数据库高可用方案

    一.什么是高可用性: 高可用性=可靠性,它的本质就是通过技术和工具提高可靠性,尽可能长时间保持数据可用和系统运行,实现高可用性的原则,首先要消除单点故障,其次通过冗余机制实现快速恢复,还有就是实现容错 ...

  9. centos6.6部署mysql mmm高可用架构

    一.环境简述 1.工作逻辑图 2.MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是 ...

随机推荐

  1. 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件

    有一个小需求: 在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可. 基于这个需求,有了下面这段代码:[JDK  1.8] package c ...

  2. [spring源码学习]十、IOC源码-conversionService

    一.代码示例 1.我们在之前的Person类里新增一个两个属性,分别是客户的兴趣和生日,兴趣爱好有很多,我们使用list进行保存,生日使用日期进行保存 public class Person { pr ...

  3. Effective C++ 笔记1

    条款1:视C++为一个语言联邦 1.C.Object-Oriented C++.Template C++ .STL 组成了C++,高效编程取决你使用C++的哪一部分 条款2:尽量用const ,enu ...

  4. T-SQL Recipes之Database Backups

    The Problem 在DBA和T-SQL码奴日常工作中,比如常规检查,服务管理,数据库管理, 是其中最具挑战性的一个领域. 在相似任务中,比如索引碎片管理,统计管理,数据库备份是异常重要的,对任何 ...

  5. [8.3] Magic Index

    A magic index in an array A[0...n-1] is defined to be an index such that A[i] = i. Given a sorted ar ...

  6. Python开发工具PyCharm个性化设置(图解)

    Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...

  7. 出现了内部错误-网站中X509Certificate2加载证书时出错

    今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509Certificat ...

  8. c# 局域网文件传输实例

    一个基于c#的点对点局域网文件传输小案例,运行效果截图 //界面窗体 using System;using System.Collections.Generic;using System.Compon ...

  9. springBoot上传文件大小设置

    框架架构: springboot+hibernate+freemarker+ueditor, tomcat内嵌在springboot里面,由于是内嵌,用ueditor上传图片,tomcat默认上传为1 ...

  10. 更改机器名后,打开TFS提示工作区错误的处理

    1,打开vs下的"开发人员命令提示"2,按下面格式输入命令:tf workspaces 查看, 假设显示如下: C:\Program Files (x86)\Microsoft V ...