MMM 之 MySQL

MMM 之 MySQL

MMM 简介


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


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


MMM 访问流程图



具体的配置信息如下所示


角色

ip地址

主机名字

server-id

monitoring 10.10.198.84 Db2 2
master1 10.10.149.199 Db1 1
master2 10.10.198.84 Db2 2
slave1 10.10.199.57 Db3 3


业务中的服务ip信息如下所示:


ip地址 角色 描述
W:192.168.0.180 R: 192.168.0.181 Write/Read 应用程序连接该ip对主库进行写请求
192.168.0.88 read 应用程序连接该ip进行读请求
192.168.0.98 read 应用程序连接该ip进行读请求


第一个能写也能读


具体的配置步骤如下:


主机配置


配置/etc/hosts,在所有主机中,添加所有的主机信息:


db1:



127.0.0.1 db1

10.10.149.199 db1

10.10.198.84 db2

10.10.199.57 db3


db2:



127.0.0.1 db2

10.10.149.199 db1

10.10.198.84 db2

10.10.199.57 db3


db3:



127.0.0.1 db3

10.10.149.199 db1

10.10.198.84 db2

10.10.199.57 db3


首先在3台主机上安装mysql和搭建复制(10.10.149.199和10.10.198.84互为主从,10.10.199.57为10.10.149.199的从)具体的复制搭建这里就省略,要是这都不会,那么该文章对你就没意思了。然后在每个mysql的配置文件中加入以下内容,注意server_id 不能重复


安装本地自带的依赖包



yum -y install postgresql-plperl.x86_64 perltidy.noarch perl-suidperl.x86_64 perl-parent.x86_64 perl-libxml-perl.noarch perl-libs.i686 perl-libintl.x86_64 perl-hivex.x86_64 perl-devel.i686 perl-core.x86_64 perl-YAML-Tiny.noarch perl-XML-XPath.noarch perl-XML-Writer.noarch perl-XML-Twig.noarch perl-XML-NamespaceSupport.noarch perl-Params-Validate rrdtool perl-Class-Singleton perl-Tie-DBI


yum install -y rrdtool-perl.x86_64 perl-DBD-MySQL

wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

rpm -ivh epel-release-5-4.noarch.rpm


安装其他依赖包(注意必须有序安装)


(这些在文件中有)



[root@localhost mysql-mmm]# rpm -ivh perl-Algorithm-Diff-1.1902-9.el6.noarch.rpm perl-IPC-Shareable-0.60-2.el6.rf.noarch.rpm perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm perl-Net-ARP-1.0.6-2.1.el6.x86_64.rpm perl-Proc-ProcessTable-0.44-4.el6.x86_64.rpm perl-Proc-Daemon-0.06-1.el6.noarch.rpm


warning: perl-Algorithm-Diff-1.1902-9.el6.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY

warning: perl-IPC-Shareable-0.60-2.el6.rf.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY

warning: perl-Net-ARP-1.0.6-2.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY

Preparing... ########################################### [100%]

1:perl-Proc-ProcessTable ########################################### [ 13%]

2:perl-Proc-Daemon ########################################### [ 25%]

3:rrdtool-perl ########################################### [ 38%]

4:perl-Net-ARP ########################################### [ 50%]

5:perl-Log-Log4perl ########################################### [ 63%]

6:perl-Log-Dispatch ########################################### [ 75%]

7:perl-IPC-Shareable ########################################### [ 88%]

8:perl-Algorithm-Diff ########################################### [100%]


解压安装



[root@localhost mysql-mmm]#cd /root/mmm/

[root@localhost mysql-mmm]# tar -xf mysql-mmm-2.2.1.tar.gz

[root@localhost mysql-mmm]# cd mysql-mmm-2.2.1

[root@localhost mysql-mmm-2.2.1]# make && make install


到这里已经完成了MMM的基本需求


配置文件设置


(配置文件存放地址: /etc/mysql-mmm )

接下来需要配置具体的配置文件,其中mmm_common.conf,mmm_agent.conf为agent端的配置文件,mmm_mon.conf为monitor端的配置文件。


配置agent端的配置文件,需要在db1,db2,db3上分别配置。

在db1主机上配置agent配置文件:



[root@db1 mysql-mmm]# cat mmm_common.conf

active_master_role writer


<host default>

cluster_interface eth0


pid_path /var/run/mmm_agentd.pid

bin_path /usr/lib/mysql-mmm/


replication_user repl

replication_password repl


agent_user mmm_agent

agent_password agent_password

</host>


<host db1>

ip 10.10.149.199

mode master

peer db2

</host>


<host db2>

ip 10.10.198.84

mode master

peer db1

</host>


<host db3>

ip 10.10.199.57

mode slave

</host>


<role writer>

hosts db1, db2

ips 10.10.149.180

mode exclusive

</role>


<role reader>

hosts db1,db2, db3

ips 192.168.0.181,192.168.0.88, 192.168.0.98

mode balanced

</role>



复制到db2 db3


scp ./mmm_common.conf root@10.10.199.57:/etc/mysql-mmm/

scp ./mmm_common.conf root@10.10.198.84:/etc/mysql-mmm/


前提先设置秘钥:


设置mmm_agent.conf


db1:



db2:



db3:



agent 、common 配置完毕


monitor可以配置在任何机器上面


monitor in db2



[root@db2 mysql-mmm]# cat mmm_mon.conf

include mmm_common.conf


<monitor>

ip 127.0.0.1

pid_path /var/run/mmm_mond.pid

bin_path /usr/lib/mysql-mmm/


status_path /var/lib/misc/mmm_mond.status

ping_ips 10.10.149.199, 10.10.198.84, 10.10.199.57

auto_set_online 10

</monitor>


<host default>

monitor_user mmm_monitor

monitor_password monitor_password

</host>


这里记得两个参数


一个是monitor 密码,二个是auto_set_online 10 10自动设置为online


设置同步权限


(db1,db2)


GRANT file,REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '123456';


这里上下的%请设置具体IP


设置数据库访问权限:


(db1,db2,db3)三台机器都设置 (或者先配置好同步环境自动同步即可)


GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%' IDENTIFIED BY 'monitor_password';

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'%' IDENTIFIED BY 'agent_password';

flush privileges;


启动mmm agent


db1:



db2:



db3:



开启mmm monitor:



查看mmm node status


手动上线node


如果mmm_common.conf 中设置了auto_set_online 10 就不需要


mmm_control set_online db1

mmm_control set_online db2

mmm_control set_online db3



查看every node virtual ip


db1:


[root@db2 mysql-mmm]#ip a



db2:



db3:



查看every node status


[root@db2 mysql-mmm]#mmm_control checks all



切换演示



如上图所知: db1 位db3的 master


模拟故障 :关闭 db1 看下 db3的 slave 是否自动切换到db2 writer的虚拟ip是否切换到


db2



停止db1 mysql服务 ,可以看到上图。vip已经切换



DB3 顺利切换到,db2为他的主库环境查看monitor切换log


总结


在生产环境中MMM的HA这块的还是很可观,基本达到无缝切换,保证Master不间断的提供服务,还能利用READ-VIP做读写分离,到达读写负载分担,而且后期也可以在MMM的基础上面扩展,如:master 垂直拆分多库 到 级联(利用多库多线程),在后面结合水平拆分,来实现在DB架构重构过程中,做个缓冲的DB架构,到最后实现彻底的分布式,分布式的内容后期献上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值