MMM架构方案与实施

             MMM架构方案与实施

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

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。

MMM项目来自 Google:http://code.google.com/p/mysql-master-master

官方网站为:http://mysql-mmm.org

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

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

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

mmm_control :通过命令行管理mmm_mond进程

关于此架构的优缺点:

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

缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,可以在程序扩展上比较难实现。同时对主从(双主)同步延迟要求比较高!因此不适合数据安全非常严格的场合。

实用场所:高访问量,业务增长快,并且要求实现读写分离的场景。

环境部署:

master1 ip :192.168.1.10

master2 ip :192.168.1.20

slave1  ip :192.168.1.30

slave2  ip:192.168.1.40

monitor ip:192.168.1.50

所有主机都要安装MMM的依赖包这里就单以master1为例进行演示其他四台均是如此,无任何的修改变动。

#yum -y install perl-*  libart_lgpl.x86_64  rrdtool.x86_64  rrdtool-perl.x86_64

安装perl库,使用centos7的互联网yum源安装

#cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiResParams::Validate Net::ARP

为了防止后续环境中出现报错信息这里进行修改;给出解决方法:

解决方法:

# cpan Proc::Daemon
# cpan Log::Log4perl

在所有主机上配置/etc/hosts文件,添加如下内容:这里还是以master1为例;其他四台均是如此

在这里我们使用monitor对其他四台主机进行ping命令测试,查看是否可以互通:

在master1、master2、slave1、slave2主机上安装mysql5.7和配置复制

master1和master2互为主从,slave1、slave2为master1的从

在每个mysql的配置文件/etc/my.cnf中加入以下内容, 注意server_id不能重复。

master1服务器:

master2服务器

slave1服务器

slave2服务器

 

在完成了对my.cnf的修改后,通过systemctl restart mysqld重新启动mysql服务

4台数据库主机若要开启防火墙,要么关闭防火墙或者创建访问规则:

firewall-cmd --permanent --add-port=3306/tcp

firewall-cmd --reload

 在这里我们采用关闭防火墙;但如果应用在生产环境当中,此做法不可取,可使用上面的方式,开放3306端口

 主从配置(master1和master2配置成主主,slave1和slave2配置成master1的从):

 在master1上授权:

 mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘123456‘;

 在master2上授权:

 mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘123456‘;

把master2、slave1和slave2配置成master1的从库:

在master1上执行show master status; 获取binlog文件和Position点

mysql> show master status;

 

在master2、slave1和slave2执行

mysql> change master to master_host=‘192.168.1.10‘,master_port=3306,master_user=‘rep‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=451;

master2执行:

slave1执行:

slave2执行:

执行成功之后开始验证主从复制结果:

mysql> start slave;

mysql> show slave status\G;

首先对master2进行验证结果let‘s go

 

接下来是slave1验证:

 

最后是对slave2进行验证:

 

通过以上结果表明这四台数据库的主从复制已经搭建好了;但是我们需要的是master1和master2是主主复制,所以接下来还要对master1进行配置:

把master1配置成master2的从库:

在master2上执行show master status ;获取binlog文件和Position点

mysql> show master status;

 

在master1上执行:

mysql> change master to master_host=‘192.168.1.20‘,master_port=3306,master_user=‘rep‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000002‘,master_log_pos=154;

 

验证master1和master2的主主复制:

mysql> start slave ;

mysql> show slave status\G;

 

我们来捋一捋思路;这里master1和master2是主主复制

slave1和slave2与master1是主从复制的关系,接下来配置MMM的配置;

首先:在4台mysql节点上创建用户{master1、2和 slave1、2}

创建代理账号:

mysql> grant super,replication client,process on *.* to ‘mmm_agent‘@‘192.168.1.%‘ identified by ‘123456‘;

创建监控账号:

mysql> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.1.%‘ identified by ‘123456‘;

这里还是以master1为例,由于他们已经是主从同步的关系了,所以其他三台主机也有这两个账号。

这里呢我们以其中的一台slave2为例查看下是否存在呢?

 

可以看到在master1上创建的两个账号,在slave2上面已经同步过来了。

mmm_monitor用户:mmm监控用于对mysql服务器进程健康检查

mmm_agent用户:mmm代理用来更改只读模式,复制的主服务器等

二:mysql-mmm的安装

在monitor主机上安装监控程序:

tar -zxf mysql-mmm-2.2.1.tar.gz

cd mysql-mmm-2.2.1

make install

 

在数据库{master1,master2,slave1,slave2上安装代理}

tar -zxf mysql-mmm-2.2.1.tar.gz

cd mysql-mmm-2.2.1

make install

主:此软件必须在每台MySQL上面进行安装;这个不能同步。

master1服务器;

 

master2服务器:

 

slave1服务器:

 

slave2服务器:

 

接下来进入激动人心的时刻了,大家提起点精神,开始配置MMM的文件,五台文件要保持一致。{mmm_commin.conf}

所有的配置文件都放到了/etc/mysql-mmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf,内容如下:

 

 

 

将以上的文件拷贝到其他四台服务器上确保这五台服务器的此文件内容相同。此外:

还有一个mmm_agent.conf需要修改,其内容是:

includemmm_common.conf

this master1

这里以master1为例:其他三台修改为{master2、slave1、slave2}monitor除外

启动代理进程 其他三台也是monitor除外,这里以master1为例:

在 /etc/init.d/mysql-mmm-agent的脚本文件的#!/bin/sh下面,加入如下内容

 

加入系统服务

 

启动服务会报错解决方法:

# cpan Proc::Daemon
# cpan Log::Log4perl

就可以解决

在此重启的结果

 

以上都是以master1为例,其他三台配置方式和master1方式相同, 但在mmm_agent.conf文件修改不同上面已经指出。

 

编辑 monitor主机上的/etc/mysql-mmm/mmm_mon.conf

includemmm_common.conf

 

启动监控进程:

在 /etc/init.d/mysql-mmm-monitor的脚本文件的#!/bin/sh下面,加入如下内容 
source /root/.bash_profile

 

添加成系统服务并设置为自启动

#chkconfig --add mysql-mmm-monitor

#chkconfig mysql-mmm-monitor on

#/etc/init.d/mysql-mmm-monitor start

启动会报错。解决方法

安装下列perl的库

#cpan Proc::Daemon

#cpan Log::Log4perl

在此启动

 

 

接下来查看群集状态:

以及服务器上线的命令:

 

群集状态:

 

查看所有群集的状态:

 

接下来可以将主master1的服务器模拟宕机,查看vip是否会漂移到master2上面。这里不再重复。

这就是今天为大家带来的MMM架构,如果有什么疑问可以在评论中提问。

 

时间: 2024-11-03 21:04:06

MMM架构方案与实施的相关文章

15、 Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节

15. Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 参考自:http://oldboy.blog.51cto.com/2561410/1240412 heartbeat和keepalived应用场景及区别 很多网友说为什么不使用keepalived而使用长期不更新的heartbeat,下面说一下它们之间的应用场景及区别: 1.对于web,db,负载均衡(lvs,haproxy,nginx)等,heartbeat和keepalived都可以实现 2.lvs最好和keepa

mysql复制(高可用架构方案的基础)

mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以在全部改变中根据业务需求选择部分库和部分表的复制复制的场景: 1.数据库容灾 2.需求:创建一个从数据服务器,做数据的测试和分析 3.负载均衡 4.复制时高可用架构方案的基础 mysql高可用架构特点1.数据库故障的检测与排除2.主从数据库的切换3.数据的备份和保护 mysql高可用架构常用方案1.

基于Ruby的watir-webdriver自动化测试方案与实施(二)

接着基于Ruby的watir-webdriver自动化测试方案与实施(一) http://www.cnblogs.com/Javame/p/4159360.html 继续 ... ... 回顾 软件自动化测试的概述 Web自动化测试的方案设计 功能方案设计 业务方案设计 Web自动化测试的方案实施 自动化测试脚本的录制和编写 自动化测试的执行和具体实现 测试操作和测试数据的回收 自动化测试脚本设计和录制 •工具: WatirRecorder++ 统一预置参数输入规则,提供规则模板,做到一个用例一

基于Ruby的watir-webdriver自动化测试方案与实施(四)

接着基于Ruby的watir-webdriver自动化测试方案与实施(三) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 首先回忆下我们的系统架构,然后谈谈具体的实现. 该自动化测试框架分三个模块:Test用例.Control控制层.Tools工具类.model总控. Test用例 基于ruby的watir-webdriver开发 统一预置参数输入规则,提供规则模板,做到一个用例一个类,一个方法一个输出.(一个类可以多个方法) 统

几种常见的微服务架构方案,2018年是否还一如既往的火

微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程. 本文盘点了四种常用的微服务架构方案,分别是ZeroC IceGrid.Spring Cloud.基于消息队列与Docker Swarm. ZeroC IceGrid微服务架构 ZeroC IceGrid作为一种微

【转】常见的微服务架构方案

背景: 工业领域,服务可能涉及多种语言,C++, Java,C#,python 最先考虑thrift,但thrift毕竟只是RPC框架,不包含服务治理的内容,且这个开源项目的维护状况并不算好,因此写个原型之后,仍然pass Zeroc Ice表现优异,基于RPC框架Ice,发展而来的IceGrid包含了完善的服务治理功能,服务发现.负载均衡.发布更新.事件通知... 商用软件,最近两年也开源了,靠服务收费,因此英文的技术手册还算是齐,但是离完善和问题解决还是有距离. 中文资料只一本2015年出版

几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程.本文选自<架构解密:从分布式到微服务>一书,了解本书详情请点击阅读原文. 本文盘点了四种常用的微服务架构方案,分别是ZeroC IceGrid.Spring Cloud.基于消息队列与Docker Swarm 1

MySQL双主(主主)架构方案

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入口,增加高可用.不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题. 主从同步复制原理 在开始之前,我们先来了解主从同步复制原理. 复制分成三步: 1. master将改变记录到二进制日志(binary

【转】微信、陌陌 架构方案分析

来源:http://www.wubiao.info/401 作者:wubiao 微信.陌陌 架构方案分析 近两年.手机应用.莫过于微信.陌陌之类最受欢迎.但实现原理,分享文章甚少. 故,提出两种方案,供分享:不正确之处.敬请留言学习. 目标 解决大型应用(微信.陌陌级别)中.用户经纬度在不断更新.用户查找频繁的问题. (每分钟1000W级) ==============================================================================