架构图如下:

# 架构图说明:上图的读写分离部分并不包括在mysql-mmm的架构中,是我自己画进去的,如果要实现上述的架构,还需要在前端编写读写分离程序。

MySQL-MMM介绍:

MMM即Multi-Master Replication Manager for MySQL(mysql多主复制管理器)。它可以实现mysql主主复制配置的监控、故障转移和管理,确保在任何时候只有一个节点可以被写入。这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组SLAVE服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,更牛的是如果当前的主服务器挂掉后,会将你后端的从自动转向新的主服务器进行同步复制,不用手工更改同步资料。

资料来源: http://mysql-mmm.org/   http://blog.chinaunix.net/uid-20639775-id-3337488.html

方案优缺点:

优点:安全性、稳定性高,可扩展性好,高可用,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。

缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,对程序来说是个挑战。

monitor角色属于单点.

适用场景:

MMM的适用场景为数据库访问量大,业务增长快,并且能实现读写分离的场景。

Mmm主要功能由下面三个脚本提供

mmm_mond  负责所有的监控工作的监控守护进程,决定节点的移除等等

mmm_agentd  运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点

mmm_control  通过命令行管理mmm_mond进程

部署实施:

1、环境介绍

角色 IP server-id write-VIP read-VIP
monitor 192.168.0.100
master-01 192.168.0.102 1 192.168.0.188 192.168.0.202
master-02 192.168.0.103 2 192.168.0.188 192.168.0.203
slave 192.168.0.101 100 192.168.0.201

其中:mysql主主已经配置完毕,不会配置的童鞋查看我的其他博客进行配置。

mysql主从也已经配置完毕,slave的master-ip指向为 master-01

主从同步账户为: rep        密码为 :123456 -->在后边的配置文件中会用到

2、在数据库节点上,分别执行下列命令进行安装mysql-mmm

cd /mnt/tools/
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
yum install -y mysql-mmm-agent

在monitor节点上,执行下面命令

cd /mnt/tools/
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
yum install -y mysql-mmm*

3. 在master-01,master-02,slave 上授权不同角色

# 由于我的配置文件忽略了同步 mysql和information_schema数据库,所以才需要分别执行!
# 否则的话,在主执行一次,其余数据库就会自动同步过去了。
mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.0.%' IDENTIFIED BY 'gang123';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.0.%' IDENTIFIED BY 'gang123';
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

4. 在所有服务器上配置/etc/mysql-mmm/mmm_common.conf

# 可以修改一台,然后同步到其他服务器,记住,是所有服务器,包括DB,monitor

[root@master-01 tools]# vim /etc/mysql-mmm/mmm_common.conf active_master_role      writer<host default>cluster_interface       eth0pid_path                /var/run/mysql-mmm/mmm_agentd.pidbin_path                /usr/libexec/mysql-mmm/replication_user        repreplication_password    123456agent_user              mmm_agentagent_password          gang123
</host>
#定义master-01主机 peer定义主主角色成员 mode指定读/写角色
<host db1>ip      192.168.0.102  mode    masterpeer    db2
</host>
#定义master-02主机 peer定义主主角色成员 mode指定读/写角色
<host db2>ip      192.168.0.103mode    masterpeer    db1
</host>
#定义slave主机
<host db3>ip      192.168.100.101mode    slave
</host>
# 定义 write-VIP
<role writer>hosts   db1, db2ips     192.168.0.188mode    exclusive
</role>
# 定义 read-VIP
<role reader>hosts   db1, db2ips     192.168.0.201 192.168.0.202 192.168.0.203mode    balanced
</role>

5. 修改所有MySQL数据库主机的/etc/mysql-mmm/mmm_agent.conf配置文件,使之和mmm_commom.conf中匹配

例如,修改master-02为

include mmm_common.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.
this db2
#此处为db2...

6. 修改monitor主机的配置文件/etc/mysql-mmm/mmm_mon.conf

[root@slave tools]# vim /etc/mysql-mmm/mmm_mon.conf include mmm_common.conf<monitor>ip                  127.0.0.1pid_path            /var/run/mysql-mmm/mmm_mond.pidbin_path            /usr/libexec/mysql-mmmstatus_path         /var/lib/mysql-mmm/mmm_mond.statusping_ips            192.168.0.101 192.168.0.102 192.168.0.103auto_set_online     15
# ping_ips 表示mmm-monitor服务监控的数据库服务器
# auto_set_online 表示自动切换时间间隔,15秒失去联系,启动切换角色# 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><host default>monitor_user        mmm_monitor   #之前数据库授权监控进程用户monitor_password    gang123       #数据库授权密码
</host>debug 0

7. 在三台 MySQL数据库节点启动agent进程

[root@master tools]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [  OK  ]

在monitor服务器开启monitor进程

[root@monitor tools]# /etc/init.d/mysql-mmm-monitor start
Starting MMM Monitor Daemon:                               [  OK  ]

#至此,配置已经完成。

遇到的问题:启动Minotor进程失败...未启动,目前正在解决中。

[root@monitor monitor]# /etc/init.d/mysql-mmm-monitor start

Starting MMM Monitor Daemon: 2014/06/04 06:29:37  INFO STARTING...

2014/06/04 06:29:37 DEBUG Created pid file '/var/run/mysql-mmm/mmm_mond.pid' with pid 41144

2014/06/04 06:29:37  INFO Waiting for network connection...

2014/06/04 06:29:37  INFO Spawning checker 'ping_ip'...

转载于:https://blog.51cto.com/jishuweiwang/1421617

MySQL高可用之mysql-mmm环境搭建相关推荐

  1. gitee如何搭建mysql_MySQL高可用架构集群环境搭建手册.md

    # MySQL高可用架构集群环境搭建手册 ## 环境准备 ### 机器规划 | 节点 | IP | 配置 | 角色 | | -------- | -------------- | ---- | --- ...

  2. 【MySQL高可用】MySQL高可用之MGR部署

    [MySQL高可用]MySQL高可用之MGR部署 参考:https://www.xmmup.com/dbbao45mysqlgaokeyongzhimgrconsuljiagoubushu.html ...

  3. MySQL高可用方案-PXC环境部署记录

    之前梳理了Mysql+Keepalived双主热备高可用操作记录,对于mysql高可用方案,经常用到的的主要有下面三种: 一.基于主从复制的高可用方案:双节点主从 + keepalived 一般来说, ...

  4. mysql高可靠部署_可能是我见过最好的 MySQL 高可用解决方案 MySQL InnoDB Cluster 中文教程!...

    公众号关注 「运维之美」设为「星标」,每天带你玩转 Linux ! 这篇文章将详细地介绍 MySQL 的高可用解决方案-- MySQL InnoDB Cluster. 说到高可用性,首先要了解一下什么 ...

  5. 详解 MySQL 高可用群集,MMM搭建高可用

    目录: 1·MMM 简介 2·MMM 各个角色说明 3·案例环境介绍 4·案例实施 5·总结 一:MMM 简介: 1)MMM 是什么:说得简单点,就是 MySQL 主主复制的管理器.之前的一篇文章讲述 ...

  6. ssh mysql环境搭建_搭建一个MySQL高可用架构集群环境

    架构 使用一台MHA manager.一台MySQL master节点.两台MySQL slave节点 软件版本 虚拟机:Ubuntu 18 MySQL:5.7.32 MHA:0.54 环境检查 安装 ...

  7. MySQL高可用群集------配置MMM高可用架构

    MMM简介: MMM(Master-Master replication manager for Mysql,Mysql 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Pe ...

  8. keepalived实现mysql高可用_keepalived+MySQL实现高可用

    (一)keepalived概述 Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移.当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务 ...

  9. Redis Cluster高可用(HA)集群环境搭建详细步骤

    1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...

  10. (5.7)mysql高可用系列——MySQL中的GTID复制(理论篇)【转】

    转自:https://blog.csdn.net/wmq880204/article/details/53160078 一.GTID的概述: 1.全局事物标识:global transaction i ...

最新文章

  1. JavaScript面向对象编程
  2. 【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库
  3. tar打包和解压命令
  4. VTK:PolyData之ColorCells
  5. java模式匹配_用Java匹配模式
  6. Android Root原理初探
  7. 可定制的PHP缩略图生成程式(需要GD库支持)
  8. JSK-115 单独的数字(二)【位运算】
  9. [转载] python中numpy库的使用
  10. JsLib组件,扩展WSH功能(新版本)
  11. T - hiho字符串 HihoCoder - 1485 (..map的使用把)
  12. (转)区块链:CITA
  13. leetcode 两数之和 java版本
  14. WebWork深入浅出(http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)
  15. 微型计算机主板usb电源损坏,自已动手彻底解决主板USB供电不足的问题
  16. Hacker News API
  17. Emacs之魂(七):变量捕获与卫生宏
  18. Typora图床设置
  19. esp8266 nvs应用
  20. 哈达玛矩阵 matlab,哈达玛变换矩阵.ppt

热门文章

  1. python降级-关于卸载:如何从Python 3.2降级到2.7?
  2. suse linux不能识别u盘,SUSE Linux mount u盘
  3. Java多线程编程核心技术笔记
  4. JAVA写接口傻瓜(#)教程(四)
  5. Mint-UI 的 DatetimePicker 日期时间插件的安装与使用
  6. docker 网络 实现
  7. Spring-Boot项目部署到单独tomcat运行
  8. ADO.NET之一:连接层
  9. 八、word-space与letter-space
  10. linux split