使用mysql-mmm实现MySQL高可用集群
背景:之前实现的mysql同步复制功能(见笔者之前文章http://blog.csdn.net/kingofworld/article/details/39210937)仅仅是双机热备功能,还不能做到Mysql链接的自己主动切换。
本配置实现真正的mysql集群。使得在某台机子的mysql应用停止时,能让应用程序自己主动切换到另外一台机子的mysql连接,实现应用的高稳定性。而且使得扩展Mysql服务成为可能。
本配置使用mysql-mmm(master-master Replication Manager for MySQL)组件实现集群功能。
本次演示的配置使用三台机器,架构例如以下:
Master1 和Master2两台机器实现双机热备。当中一台机器的mysql服务停止或机器宕机。应用程序都会将数据库连接自己主动切换到另外一台机子。
另外用一台机子实时备份master1的数据。
1、安装mysql-mmm服务
在三台机器都安装
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum -y install mysql-mmm*
完毕后查看 rpm -qa|grep mysql-mmm
有下面组件表示成功安装
Rhel5或centos5,32位:http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Rhel6或centos6,32位:http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
Rhel6或centos6,64位:http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
1、加入mysql的用户
在三台机器都加入mysql用户。分别用于复制、
进入mysql服务mysql -u root -p
use mysql;
grant REPLICATION slave,REPLICATION CLIENT on *.* to 'repl'@'%' identified by 'password'; //建立复制用户
grant PROCESS,SUPER,REPLICATION CLIENT on *.* to 'mmm_agent'@'%' identified by 'password'; //建立agent用户
grant REPLICATION CLIENT on *.* to 'mmm_monitor'@'%' identified by 'password'; //建立用户
FLUSH PRIVILEGES;
2、配置同步复制
配置复制的策略如架构图所看到的。
配置方法在我上一篇文章有介绍过,这里不再反复。见笔者之前文章http://blog.csdn.net/kingofworld/article/details/39210937
3、改动hosts
分别改动三台机器的hosts文件
vi /etc/hosts
加入
200.200.168.24 M1
200.200.168.25 M2
200.200.168.23 slave1
4、配置mysql-mmm
改动 /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_user repl
- replication_password password
- agent_user mmm_agent
- agent_password <span style="font-size: 13.3333339691162px;">password</span>
- </host>
- <host M1>
- ip 200.200.168.24
- mode master
- peer M2
- </host>
- <host M2>
- ip 200.200.168.25
- mode master
- peer M1
- </host>
- <host slave1>
- ip 200.200.168.23
- mode slave
- </host>
- <role writer>
- hosts M1,M2
- ips 200.200.168.26
- mode exclusive
- </role>
- <role reader>
- hosts M1,M2,slave1
- ips 200.200.168.27
- mode balanced
- </role>
注意:200.200.168.26和200.200.168.27是两个虚拟的IP地址,供应用程序调用,仅仅需用两个没人占用的IP就能够。分别用来提供写和读服务。为以后实现数据库的读写分离(但实现读写分离须要改动应用程序。mysql并不能自己主动识别并切换)。
改动/etc/mysql-mmm/mmm_agent.conf
三台机器分别设置为this M1、this M2、this slave1
改动/etc/mysql-mmm/mmm_mon.conf
仅仅是monitor(200.200.168.24)机子须要配置
- 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_ips 200.200.168.24,200.200.168.25,200.200.168.23
- auto_set_online 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>
- <host default>
- monitor_user mmm_monitor
- monitor_password password
- </host>
- debug 0
配置完毕后执行
三台机子都需执行:
/etc/init.d/mysql-mmm-agent start
Monitor机子执行
/etc/init.d/mysql-mmm-monitor start
5、查看服务状态及測试
在monitor机子执行mmm_control show
能够看到下面信息:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ29md29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
表示写server(200.200.168.26)使用的是200.200.168.24
读server(200.200.168.27)使用的是200.200.168.25
查看各个服务的状态:
mmm_control checks all
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ29md29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
6、測试:
将master1的mysql服务停止。然后mmm_control show查看状态
能够看到读写server都转移到了master2,这时servermaster1的流程应用还能够正常使用。能够进行申请流程測试
这时查看mmm_control checks all
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ29md29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
将master1 的mysql服务启动,再查看状态:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ29md29ybGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
读写server又分开了
使用mysql-mmm实现MySQL高可用集群的更多相关文章
- MHA-结合MySQL半同步复制高可用集群(Centos7)
目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- keepalived+MySQL高可用集群
基于keepalived搭建MySQL的高可用集群 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clus ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
- MySQL高可用集群方案
一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...
- corosync+pacemaker and drbd实现mysql高可用集群
DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...
- heatbeat-gui实现基于nfs的mysql高可用集群
一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...
- Mysql高可用集群环境介绍
MySQL高可用集群环境搭建 01.MySQL高可用环境方案 02.MySQL主从复制原理 03.MySQL主从复制作用 04.在Linux环境上安装MySQL 05.在MySQL集群环境上配置主从复 ...
- Mysql 高可用集群PXC
PXC是percona公司的percona xtraDB cluster,简称PXC.它是基于Galera协议的高可用集群方案.可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可 ...
- 部署MYSQL高可用集群
mysql-day08 部署MYSQL高可用集群 u 集群架构 ...
随机推荐
- 使用最新的log4cplus(1.1.1)隔离不同的 log 文件输出
部分参考了博客. http://www.cppblog.com/tx7do/articles/11719.html 基于脚本配置来过滤log信息 除了通过程序实现对log环境的配置之外,log4cpl ...
- hive regex insert join group cli
1.insert Insert时,from子句既能够放在select子句后,也能够放在insert子句前,以下两句是等价的 hive> FROM invites a INSERT OVERWRI ...
- 【OpenCV】漫水填充
漫水填充:也就是用一定颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果;漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区 ...
- 报错消息写在AT SELECTION-SCREEN OUTPUT和START-OF-SELECTION事件下的区别
今天面试没答上来的问题,其实我是知道的,以前也遇到过.... START-OF-SELECTION下的话会在左下角报错 AT SELECTION-SCREEN OUTPUT消息会弹出框,然后点击就没有 ...
- GetCursorPos/WindowFromPoint/SendMessage
GetCursorPos/WindowFromPoint/SendMessage (用API函数向Edit框发送字符) GetCursorPos(mPoint); DTWND:=WindowFromP ...
- Oracle表连接总结
1 简述 1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结 ...
- mysql 创建函数
<pre name="code" class="html">root 用户创建函数: delimiter $$ CREATE FUNCTION `l ...
- 【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.h
继续看yusugomori的代码,看逻辑回归.在DBN(Deep Blief Network)中,下面几层是RBM,最上层就是LR了.关于回归.二类回归.以及逻辑回归,资料就是前面转的几篇.套路就是设 ...
- ASP.NET 2.0 页(Page)生命周期概述
原文:ASP.NET 2.0 页(Page)生命周期概述 引用MSDNASP.NET 页生命周期概述 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初 ...
- 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密
原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页][源码下载] 与众不同 wi ...