本文来自我的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. Servlet--HttpServletResponse的2个操作流的方法

    前面已经说过无数多次了,我们的项目都是基于HTTP协议的一次请求,一次响应.实际编码中,我们在处理完逻辑后一般是跳转到一个页面上,或者用输出流返回json字符串.其实跳转到一个页面往往也就是JSP,J ...

  2. 【Java框架型项目从入门到装逼】第十四节 查询用户列表展现到页面

    这一节,我们来实现一下用户列表搜索,最终的效果如下: 这边我们要使用easyUI给我们提供的datagrid组件. HTML结构如下 <!-- 数据列表 --> <table id= ...

  3. NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤

    本文使用:Unity3d + opencv + Android Unity3d中可以调用opencv 编译好的.so 动态库,在生成Android apk时可以正常运行.   因为Android系统是 ...

  4. python --- queue模块使用

    1. 什么是队列? 学过数据结构的人都知道,如果不知道队列,请Google(或百度). 2. 在python中什么是多生产者,多消费模型? 简单来说,就是一边生产(多个生产者),一边消费(多个消费者) ...

  5. VUE脚手架搭建

    1.什么vue-cli    vue-cli是vue.js的脚手架,用于自动生成vue.js工程模板的. 步骤: 2.安装   ->全局安装   npm install vue-cli -g 或 ...

  6. 面向切面编程之手动JDK代理方式

    需求描述: 抽取dao层开启和提交事物交由代理类一并执行 分析: 假如UserDao接口中有很多方法,例如addUser().deleteUser().updateUser()等等,需要频繁的和数据库 ...

  7. ABP官方文档翻译 6.6 Javascript API

    JavaScript API AJAX 通知 消息 UI Block和Busy 事件总线 日志 其他实用功能 ABP提供了一套对象和函数,用来简化.标准化javascript的开发. 这里是ABP提供 ...

  8. ABP官方文档翻译 3.7 领域事件(事件总线)

    领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消 ...

  9. appium+python环境搭建

    一.环境 1.安装python. 2.安装appium. 3.安装pip 4.安装selenium 5.安装Appium-Python-Client       #cmd->cd setupto ...

  10. python基础 列表 的使用

    列表 首先定义一个列表 声明列表 列表名字=[值1,值2] list=[1,2,3,4,5] 这是一个列表,列表中有五个元素(1,2,3,4,5) 显示list列表 print   list 输出   ...