本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn

MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。对于那些对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。

实现原理

两台master互为主从,一台为只读,做为备份,应急时可做为写master.其中mmm_mond进程定时心跳检测,失败则将write ip 浮动到另外一台master。

MySQL-MMM优缺点

  1. 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作。
  2. 缺点:Monitor节点是单点,可以结合Keepalived实现高可用
  3. 由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。对于那些对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。

安装mysql软件

在每台服务器上安装mysql软件,安装参照《linux 6 源码安装mysql5.6》 在每台服务器上关闭selinux,关闭防火墙 在配置文件my.cnf里增加如下内容:

[mysqld]
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql #下面为新添加的内容
default-storage-engine = innodb replicate-ignore-db = mysql
binlog-ignore-db= mysql server-id =
log-bin = /usr/local/mysql/logs/mysql-bin.log
log_bin_index = /usr/local/mysql/logs/mysql-bin.log.index
relay_log = /usr/local/mysql/logs/mysql-bin.relay
relay_log_index = /usr/local/mysql/logs/mysql-bin.relay.index
expire_logs_days=
max_binlog_size = 100M
log_slave_updates
sync-binlog =

在/etc/hosts里配上所有主机信息

192.168.10.131 db1
192.168.10.132 db2
192.168.10.133 db3
192.168.10.134 db4
192.168.10.135 db5

配置主主复制

即两个主master(db1、db2)互为主从,与主从类似,只是需要逆向配置一下。
a、先查看db1 db2 binlog日志和pos值
db1

db2

b、在db1执行:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.10.%' IDENTIFIED BY 'replication';
mysql> flush privileges;
mysql> change master to master_host='192.168.10.132', master_user='replication',master_password='replication', master_log_file='mysql-bin.000003',master_log_pos=120;
mysql> start slave; #启动同步

c、在db2执行:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.10.%' IDENTIFIED BY 'replication';
mysql> flush privileges;
mysql> change master to master_host='192.168.10.131', master_user='replication',master_password='replication', master_log_file='mysql-bin.000001',master_log_pos=120;
mysql> start slave; #启动同步

db3、db4作为db1的从库slave

在db3、db4上执行

mysql> change master to master_host='192.168.10.131', master_user='replication',master_password='replication', master_log_file='mysql-bin.000001',master_log_pos=120;
mysql> start slave; #启动同步

MYSQL-MMM的安装

(1)epel源安装
CentOS 默认没有 mysql-mmm 软件包,官方推荐使用 epel 的网络源,五台都安装epel:

wget http://mirrors.hustunique.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://mirrors.hustunique.com/epel/RPM-GPG-KEY-EPEL-6
rpm --import RPM-GPG-KEY-EPEL-
rpm -ivh epel-release--.noarch.rpm

(2)monitor节点安装db5
在db5上执行

yum -y install mysql-mmm-monitor  

(3)四台db节点上安装agent
在db1 db2 db3 db4上执行

yum -y install mysql-mmm-agent

(4)四台db节点上授权monitor访问
在db1 db2 db3 db4执行

mysql -uroot -p
mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.10.%' IDENTIFIED BY 'monitor';
mysql> GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.10.%' IDENTIFIED BY'agent';

(5)在db1上修改mmm_common.conf文件(5台相同)

vi /etc/mysql-mmm/mmm_common.conf

active_master_role  writer
<host default>
cluster_interface eth0
pid_path/var/run/mysql-mmm/mmm_agentd.pid
bin_path/usr/libexec/mysql-mmm/
replication_userreplication
replication_passwordreplication
agent_user mmm_agent
agent_password agent
</host> <host db1>
ip 192.168.10.131
modemaster
peerdb2
</host> <host db2>
ip 192.168.10.132
modemaster
peerdb1
</host> <host db3>
ip 192.168.10.133
modeslave
</host> <host db4>
ip 192.168.10.134
modeslave
</host> <role writer>
hosts db1, db2
ips 192.168.10.128
modeexclusive #只有一个虚拟IP可以写
</role> <role reader>
hosts db3, db4
ips 192.168.10.129, 192.168.10.130
modebalanced #多个虚拟ip可以读
</role>

传到其它4个节点

scp /etc/mysql-mmm/mmm_common.conf root@192.168.10.132:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.10.133:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.10.134:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@192.168.10.135:/etc/mysql-mmm/

若无scp命令,安装一下包

yum install openssh-clients

(6)修改四台db代理端 mmm_agent.conf 文件
在db1 db2 db3 db4上修改

vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1 #分别修改为本机的主机名,即db1、db2、db3和db4

(7)修改管理端的mmm_mon.conf文件
在db5上执行

vi /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf
<monitor>
ip 127.0.0.1
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_ips192.168.10.,192.168.10.132,192.168.10.133,192.168.10.133,192.168.10.134 #真实数据库IP,来检测网络是否正常
auto_set_online #恢复后自动设置在线的时间
</monitor>
<host default>
monitor_usermmm_monitor
monitor_passwordmonitor
</host>
debug

启动MYSQL-MMM

(1)db代理端启动db1 db2 db3 db4

[root@db1 ~]# /etc/init.d/mysql-mmm-agent start
[root@db1 ~]# chkconfig mysql-mmm-agent on

(2)monitor管理端启动 db5

[root@db5 ~]# /etc/init.d/mysql-mmm-monitor start
[root@db5 ~]# chkconfig mysql-mmm-monitor on

测试集群

(1)查看集群状态db5
mmm_control show

(2)故障转移
模拟停掉db1数据库后

看它的状态变了

CENTOS6.6下mysql MMM架构搭建的更多相关文章

  1. CentOS6.8下MySQL MHA架构搭建笔记

    转载请注明出处,本文地址:http://www.cnblogs.com/ajiangg/p/6552855.html 以下是CentOS6.8下MySQL MHA架构搭建笔记 IP资源规划: 192. ...

  2. CENTOS6.6 下mysql MHA架构搭建

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是自己搭建的一篇mysql MHA文章 前面的安装步骤基 ...

  3. ubuntu下mysql的环境搭建及使用

    ubuntu下mysql的环境搭建及使用 环境安装 使用如下命令分别安装服务端程序,客户端程序,及客户端依赖库 sudo apt-get install mysql-server sudo apt-g ...

  4. ubuntu 下 mysql数据库的搭建 及 数据迁移

    1.mysql的安装 我是使用apt-get直接安装的 :sudo apt-get install mysql-server sudo apt-get install mysql-client 2.配 ...

  5. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  6. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  7. mysql MHA架构搭建过程

    [环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 系统 IP 主机名 备注 版本 xx系统 192.168.142. ...

  8. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)

    原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...

  9. CentOS6.4下Mysql数据库的安装与配置

    原文连接:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 说到数据库,我们大多想到的是关系型数据库,比如 ...

随机推荐

  1. linux 下 tomcat 安装

    下载 根据已安装的jdk版本选择合适的版本,否则不兼容 https://tomcat.apache.org/whichversion.html 选择合适的压缩包 源码 二进制:已针对固定的操作系统和机 ...

  2. hadoop问题: bin/hadoop fs -ls ls: `.': No such file or directory

    问题描述:bin/hadoop fs -ls ls: `.': No such file or directory 问题分析:版本问题,用法不同 https://stackoverflow.com/q ...

  3. shell 实现主板测试

    初接触shell,只能需要用到什么功能现学先用了.本文总结一下完成测试程序当中遇到的技巧和问题. 01. 变量生存期的问题,在函数中的变量无法在其他地方使用,在函数中只能使用在函数前定义的全局变量: ...

  4. python_开发规范

    对于python有哪些开发规范? 1. 每行代码不超过80字符 2. 不要在逗号, 分号, 冒号前加空格, 应该之后加空格 3. 列表, 索引,切片的左括号前不加空格 4. 比较运算前后 加一个空格 ...

  5. js随机生成验证码及其颜色

    今天迎来了2018年第一场雪,这个美好的日子,总的写点什么纪念一下,在这里写了一个在js中使用Math.random()函数,随机生成四位数的验证码及其验证码换颜色. js代码如下: var arra ...

  6. 同时装了Python3和Python2,使用pip

    第一种方法: pip安装: py -2 -m pip install -- py -3 -m pip install -- 运行代码: py -2 py.py py -2 py.py 第二种方法: 运 ...

  7. 关于HTTP GET & POST的区别(转)

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE. URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTT ...

  8. python 之进程篇

    多线程给我们的感觉 1.因为GIL的存在,一个进程的多线程同一时刻只能进去一个,感觉是假的并发 2.只适合I/O密集型的任务 3.针对计算密集型,就挂了(变成串行了) 在python中想要充分利用多核 ...

  9. Golang时间格式化

    PHP中格式化时间很方便,只需要一个函数就搞定: date("Y-m-d H:i:s") 而在Golang中,用的是"2006-01-02 15:04:05"这 ...

  10. Ubuntu14.04 安装vmware虚拟机

    下载VMware 链接:VMware 14  密码:5okh 移动VMware14 到 /opt #mv VMware-Workstation-Full-14.0.0-6661328.x86_64.b ...