• ADADADADAD

    MySQL基操---高可用架构MMM搭建与容灾测试[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:56:35

    作者:文/会员上传

    简介:

    MMM介绍MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    MMM介绍

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

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

    MySQL-MMM优缺点

    优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。

    缺点:Monitor节点是单点,可以结合Keepalived实现高可用。

    MySQL-MMM工作原理

    MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,

    并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。

    mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。

    mmm_agentd:运行在每个mysql服务器上(Master和Slave)的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。

    mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令。

    mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移

    至其他mysql。在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果

    想使用mmm的备份工具则还要添加一个mmm_tools用户。

    实验基本环境

    实验系统:CentOS 7_x86_64

    实验前提:防火墙和selinux都关闭!

    实验说明:本实验共有5台主机,IP分配如表

    实验软件:mariadb mysql-mmm mysql-mmm-monitor mysql-mmm-agent

    功能,IP地址与别名分配表

    功能IPid主服务器一192.168.137.10M1主服务器二192.168.137.11M2从服务器一192.168.137.12s1从服务器二192.168.137.13s2mmm监控192.168.137.14mo

    实验描述拓扑图

    操作!

    所有机器中!

    关闭所有机器的防火墙和安全策略systemctlstopfirewalld.servicesetenforce0获取阿里云的yum基础配置wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo安装epel源yum-yinstallepel-release清空yum缓存,重新建立元数据yumcleanall&&yummakecache安装mariadb,MMM的客户端和服务端yuminstallmariadb-servermariadb–yyuminstallmysql-mmm*-y

    M1中

    修改m1配置文件,配置mariadb#vim/etc/my.cnf替换以下内容[mysqld]log_error=/var/lib/mysql/mysql.errlog=/var/lib/mysql/mysql_log.loglog_slow_queries=/var/lib/mysql_slow_queris.logbinlog-ignore-db=mysql,information_schemacharacter_set_server=utf8log_bin=mysql_binserver_id=1log_slave_updates=true//允许slave更新日志sync_binlog=1auto_increment_increment=2auto_increment_offset=1启动服务systemctlstartmariadb.service

    使用scp命令把my.cnf这个配置文件同步复制到其他的三台mysql主机上,除了监控机器MO。scp/etc/my.cnfroot@192.168.137.11:/etc/scp/etc/my.cnfroot@192.168.137.12:/etc/scp/etc/my.cnfroot@192.168.137.13:/etc/务必单独修改每台机器/etc/my.cnf中server_id=1这里M2改成了server_id=2以此类推

    逐个验证时候成功安装

    [root@cent~]#mysqlWelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis2Serverversion:5.5.60-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>

    主从复制,主主复制

    M1,M2中

    查看日志以及位置参数MariaDB[(none)]>showmasterstatus;两台得出的结果是相同的MariaDB[(none)]>showmasterstatus;+------------------+----------+--------------+--------------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+------------------+----------+--------------+--------------------------+|mysql_bin.000003|245||mysql,information_schema|+------------------+----------+--------------+--------------------------+1rowinset(0.00sec)M1,M2互相授权M1,M2:MariaDB[(none)]>grantreplicationslaveon*.*to'replication'@'192.168.137.%'identifiedby'123456';同步M1:changemastertomaster_host='192.168.137.11',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;M2:changemastertomaster_host='192.168.137.10',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;

    S1,S2中的同步,这里都以M1为同步对象。

    changemastertomaster_host='192.168.137.10',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;flushprivileges;//刷新

    验证salve

    启动salveMariaDB[(none)]>startslave;QueryOK,0rowsaffected(0.00sec)查看slave状态MariaDB[(none)]>showslavestatus\G看到这两项为yes即成功Slave_IO_Running:YesSlave_SQL_Running:Yes

    配置MMM

    随便一台机器

    修改如下

    vim/etc/mysql-mmm/mmm_common.conf<hostdefault>cluster_interfaceens33//修改网卡名称pid_path/run/mysql-mmm-agent.pidbin_path/usr/libexec/mysql-mmm/replication_userreplicationreplication_password123456//密码agent_usermmm_agentagent_password123456//密码<hostdb1>ip192.168.137.10//M1地址modemasterpeerdb2//指向M2</host><hostdb2>ip192.168.137.11//M2地址modemasterpeerdb1//指向M1</host><hostdb3>ip192.168.137.12//S1地址modeslave</host><hostdb4>ip192.168.137.13//S2地址modeslave</host><rolewriter>hostsdb1,db2//M1与M2ips192.168.137.100//M1与M2共同虚拟一个IPmodeexclusive</role><rolereader>hostsdb3,db4//S1与S2ips192.168.137.200,192.168.137.150//S1,S2的虚拟IPmodebalanced</role>复制到其他四台主机,包括MO监控机scp/etc/mysql-mmm/mmm_common.confroot@192.168.137.11:/etc/mysql-mmm/

    MO监控机操作

    vim/etc/mysql-mmm/mmm_mon.conf修改如下<monitor>ip127.0.0.1pid_path/run/mysql-mmm-monitor.pidbin_path/usr/libexec/mysql-mmmstatus_path/var/lib/mysql-mmm/mmm_mond.statusping_ips192.168.137.10,192.168.137.11,192.168.137.12,192.168.137.13,192.168.137.14//列出所有数据库IPauto_set_online10//链接等待时间#Thekill_host_bindoesnotexistbydefault,thoughthemonitorwill#throwawarningaboutitmissing.Seethesection5.10"KillHost#Functionality"inthePDFdocumentation.##kill_host_bin/usr/libexec/mysql-mmm/monitor/kill_host#</monitor><hostdefault>monitor_usermmm_monitormonitor_password123456//密码</host>debug0

    再MySQL中给MMM授权,每台机器都要。

    grantsuper,replicationclient,processon*.*to'mmm_agent'@'192.168.137.%'identifiedby'123456';grantreplicationclienton*.*to'mmm_monitor'@'192.168.137.%'identifiedby'123456';flushprivileges;//刷新

    更新每台机器的server名,不能相同,我设置了12345。

    vim/etc/mysql-mmm/mmm_agent.conf修改如下thisdb1

    设置五台!

    启动服务

    M1,M2,S1,S2启动agentsystemctlstartmysql-mmm-agent.servicesystemctlenablemysql-mmm-agent.service监控机启动监控服务systemctlstartmysql-mmm-monitor.service

    监控服务的查验,如下一切正常!

    查看被监控的主机[root@zcent4mysql-mmm]#mmm_controlshowdb1(192.168.137.10)master/ONLINE.Roles:writer(192.168.137.100)db2(192.168.137.11)master/ONLINE.Roles:db3(192.168.137.12)slave/ONLINE.Roles:reader(192.168.137.200)db4(192.168.137.13)slave/ONLINE.Roles:reader(192.168.137.150)切换虚拟ip绑定的主机[root@zcent4mysql-mmm]#mmm_controlmove_rolewriterdb2OK:Role'writer'hasbeenmovedfrom'db1'to'db2'.Nowyoucanwaitsometimeandchecknewrolesinfo![root@zcent4mysql-mmm]#mmm_controlshowdb1(192.168.137.10)master/ONLINE.Roles:db2(192.168.137.11)master/ONLINE.Roles:writer(192.168.137.100)db3(192.168.137.12)slave/ONLINE.Roles:reader(192.168.137.200)db4(192.168.137.13)slave/ONLINE.Roles:reader(192.168.137.150)检测监控功能完善性[root@zcent4mysql-mmm]#mmm_controlchecksalldb4ping[lastchange:2018/09/0723:02:12]OKdb4mysql[lastchange:2018/09/0723:03:06]OKdb4rep_threads[lastchange:2018/09/0723:11:57]OKdb4rep_backlog[lastchange:2018/09/0723:11:52]OK:Backlogisnulldb2ping[lastchange:2018/09/0722:57:09]OKdb2mysql[lastchange:2018/09/0722:57:09]OKdb2rep_threads[lastchange:2018/09/0722:57:09]OKdb2rep_backlog[lastchange:2018/09/0722:57:09]OK:Backlogisnulldb3ping[lastchange:2018/09/0723:02:09]OKdb3mysql[lastchange:2018/09/0723:02:50]OKdb3rep_threads[lastchange:2018/09/0723:11:42]OKdb3rep_backlog[lastchange:2018/09/0723:11:36]OK:Backlogisnulldb1ping[lastchange:2018/09/0722:57:09]OKdb1mysql[lastchange:2018/09/0722:57:09]OKdb1rep_threads[lastchange:2018/09/0722:57:09]OKdb1rep_backlog[lastchange:2018/09/0722:57:09]OK:Backlogisnull

    故障测试!

    首先M1,M2授权给测试机器

    MariaDB[(none)]>grantallon*.*to'testdb'@'192.168.137.14'identifiedby'123456';QueryOK,0rowsaffected(0.01sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.00sec)

    用监控机当客户机测试,成功登陆

    [root@zcent4mysql-mmm]#mysql-utestdb-p123456-h192.168.137.100WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis2430Serverversion:5.5.60-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>

    客户机创建数据库,使用主服务器查看

    客户机:MariaDB[(none)]>createdatabaseteest;QueryOK,1rowaffected(0.00sec)M1:MariaDB[(none)]>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mood||mysql||performance_schema||teest||test|+--------------------+6rowsinset(0.00sec)

    模拟M2掉线,查看是否自动切换主服务器的虚拟IP

    M2:[root@cent~]#systemctlstopmariadb.service监控机:[root@zcent4mysql-mmm]#mmm_controlshowdb1(192.168.137.10)master/ONLINE.Roles:writer(192.168.137.100)db2(192.168.137.11)master/HARD_OFFLINE.Roles:db3(192.168.137.12)slave/ONLINE.Roles:reader(192.168.137.200)db4(192.168.137.13)slave/ONLINE.Roles:reader(192.168.137.150)

    显然是可以的!读写复制正常

    上线M2,但是注意!M2并不会抢占,不带这个功能!

    模拟S2掉线,观察情况

    S2:[root@cent~]#systemctlstopmariadb.service监控机:[root@zcent4mysql-mmm]#mmm_controlshowdb1(192.168.137.10)master/ONLINE.Roles:writer(192.168.137.100)db2(192.168.137.11)master/ONLINE.Roles:db3(192.168.137.12)slave/ONLINE.Roles:reader(192.168.137.150),reader(192.168.137.200)db4(192.168.137.13)slave/HARD_OFFLINE.Roles:实行了顶替,期间读写复制正常

    总结

    1.monitor程序负责监控db服务器的状态,包括Mysql数据库、服务器是否运行、复制线程是否正常、主从延时等;它还用于控制agent程序处理故障。2.如果master-db1主库宕机,master-db2复制应用又落后于master-db1时就变成了主可写状态,这时的数据主无法保证一致性。3.monitor会每隔几秒钟监控db服务器的状态,如果db服务器已经从故障变成了正常,那么monitor会自动在60s之后将其设置为online状态(默认是60s可以设为其它的值),我上面改成了10.4.实验过程中遇到从服务器无法启动agent,重启解决了,原因不详。

    MySQL基操---高可用架构MMM搭建与容灾测试.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 测试mysql