mysql高可用之MMM

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

博主QQ819594300

博客地址:http://zpf666.blog.51cto.com/

有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!

一、MMM简介

MMM即Multi-MasterReplication Manager for MySQL:mysql多主复制管理器MMM是perl语言编写的

MMM的特点

基于perl实现,关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入);

MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip;

除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。

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

MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。

这个方案是目前比较成熟的解决方案,想了解详情请看官网:http://mysql-mmm.org

wKioL1jx1nfSY6JDAAJkyb6PKvU090.jpg

优点

①高可用性(不但能做主主的高可用还能做从从的高可用);

②扩展性好

③出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。

缺点

monitor节点是单点,不过这个你也可以结合keepalived或者haertbeat做成高可用;至少三个节点,对主机的数量有要求,需要实现读写分离,还需要在前端编写读写分离程序。在读写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题。

不适用场景

MMM方案并不太适应于对数据安全性要求很高,并且读、写繁忙的环境中

适用场景

MMM的适用场景为数据库访问量大,并且能实现读写分离的场景

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

mmm_mond  负责所有的监控工作的监控守护进程,决定节点的移除(mmm_mond进程定时心跳检测,失败则将write ip浮动到另外一台master)等等

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

mmm_control  通过命令行管理mmm_mond进程

授权用户

在整个监管过程中,需要在mysql中添加相关授权用户,授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户

二、环境介绍:

OS:centos7.2(64位)数据库系统:mysql5.7.13

角色

IP

hostname

Server-id

Write vip

Read vip

Master1

192.168.1.5

master1

1

192.168.1.10


Master2(backup)

192.168.1.6

master2

2


192.168.1.20

Slave1

192.168.1.7

slave1

3


192.168.1.30

Slave2

192.168.1.8

slave2

4


192.168.1.40

monitor

192.168.1.9

monitor



三、实验步骤

1在monitor上配置ntp,让全部主机时间同步,并且全部主机都关闭selinux

wKiom1jx1neyotwJAACsupdO8tw795.jpg

wKioL1jx1niAf0F_AACwzcAGkCQ511.jpg

wKioL1jx1njzmt5WAACK1A82YMM744.jpg

wKiom1jx1nmQrPaBAAHWaiL_gxE812.jpg

wKiom1jx1nnRgkk8AAErvSZ3WHA421.jpg

现在在其他四台主机上都进行如下操作

wKiom1jx1nnQ7P5BAABWWxVGAe8586.jpg

wKioL1jx1nriVupNAABzc8mxVrY855.jpg

至此,现在五台主机时间都同步了。

下面的关闭selinux在五台主机都要操作

wKioL1jx1nqiGyLHAAFTLkrlooA539.jpg

wKiom1jx1nrQCfEwAAAwySLavcs945.jpg

2在所有主机上配置/etc/hosts文件,添加如下内容

(在master1上添加,其他四台全部用scp命令拷贝一份即可)

先修改五台主机的主机名:分别为master1、master2、slave1、slave2、monitor

wKioL1jx1nuzywBqAABSb5FrS-Y697.jpg

wKiom1jx1nvRRbPXAAAvbyWdRjo866.jpg

下面正式开始修改各自的hosts文件(五台全部一样)

wKiom1jx2XLggjGvAAFnOehjelQ665.jpg

3在所有主机上安装perl perl-devel  perl-CPANlibart_lgpl.x86_64 rrdtool.x86_64  rrdtool-perl.x86_64包(注:必须使用centos7在线yum源安装)

wKiom1jx1nzz_ADEAABbLxfRcCM798.jpg

4在所有主机上安装perl的相关库

wKioL1jx1nyR7wZ0AACA8XE4ZDQ065.jpg

截图看不清的可以看下面的粘贴的内容

#cpan-i Algorithm::Diff  Class::Singleton DBIDBD::mysql  Log::Dispatch  Log::Log4perl Mail::Send Net::Ping  Proc::Daemon  Time::HiRes  Params::Validate  Net::ARP

wKiom1jx1nySi5uhAAD5WHu9v6E182.jpg

wKioL1jx1n3Dag6mAAJstwhDJwc117.jpg

wKiom1jx1n7AKroIAAIALirHQoA069.jpg

注意:DBD::mysql和Net::Ping这两个库非常的难装,大家一定要看清楚!

注1:DBD::mysql安装不上,我们可以首先尝试单独安装DBD::mysql(命令是:cpan  DBD::mysql),如果不行,则可能是因为你的mysql服务器上libmysqlclient.so.18和libmysqlclient.so.20两个共享对象文件共存了,系统默认使用老版本,所以我们要把libmysqlclient.so.18删除掉,而libmysqlclient.so.18的是因为我们系统安装了mariadb-libs.x86_64 这个包,我们卸载这个包就可以把libmysqlclient.so.18删除(命令是:rpm -e mariadb-libs.x86_64  --nodeps),然后我们就可以单独安装DBD::mysql(命令是:cpan -f DBD::mysql)了。

注2:Net::Ping安装不上,我们也可以先尝试单独安装Net::Ping(命令是:cpan -f Net::Ping),如果不行,则可能是因为Net::Ping编译后要测试,在测试那没通过,所以后面也不让Net::Ping安装,Net::Ping模块是由Net-Ping-2.58.tar.gz这个包提供的,它下载后存放的路径是:

/root/.local/share/.cpan/sources/authors/id/R/RU/RURBAN/Net-Ping-2.58.tar.gz

然后我们去手动tar解压缩Net-Ping-2.58.tar.gz这个包,按照下面的顺序来手动安装:

perlMakefile.PL  &&  make  &&  make install

两个模块安装完毕后,重启mysqld服务即可。

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

注1:在实际生产环境中,两台master也要加read_only=1这个配置项,本次实验我只在slave上加,master就不加了。

注2:mysql5.7我已安装完毕,因此安装过程略。

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

wKiom1jx1n7QOTxUAALcRNsjEKI350.jpg

wKioL1jx1n-B3-y8AALUxf8vm8U458.jpg

wKiom1jx1oCjQpulAAH-3hldzZw692.jpg

wKioL1jx1oDxZBdnAAIN3vWPK4M799.jpg

四台mysql的my.cnf配置文件修改完毕后,都需要重启mysqld服务

wKiom1jx1oDTfFXyAABj6Ojg2mE983.jpg

6四台mysql主机要开启防火墙,要么关闭防火墙或者创建访问规则

wKioL1jx1oGzrT98AADgBaHR3MM807.jpg

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

在master1上授权

wKioL1jx1oGgSuZ7AAEAOyuNtp4961.jpg

在master2上授权

wKiom1jx1oHC9vBOAADzvUXS1kE794.jpg

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

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

wKiom1jx1oLzL4PQAAEvwlXg_Kw122.jpg

分别在master2、slave1和slave2执行如下命令

wKioL1jx1oKzYiAuAACjHj_sAgk734.jpg

验证主从复制:(保证master2、slave1、slave2三台主机都是双yes即为成功)

wKioL1jx1oOhUQsiAAFo1JbfrfI040.jpg

9把master1配置成master2的从库(因为要互为主从)

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

wKiom1jx1oPD0jwGAAFFhuxdKys725.jpg

在master1上执行如下命令

wKioL1jx1oOQo7hKAADU293BWPI962.jpg

验证主从复制

wKiom1jx1oTCTeZsAAHDT6NVEFE374.jpg

10mysql-mmm配置

分别在四台mysql节点上创建如下的用户

创建代理账号

wKioL1jx1qeQpplCAAB746WP6MU593.jpg

创建监控账号

wKiom1jx1qjwXAEyAAB_IRg_7i8147.jpg

注1:因为之前的主从复制,以及主从已经是ok的,所以上面的创建用户的命令我只在master1服务器执行就ok了(即只在master1上创建这两个用户,其他三台都可以自动同步

检查master2和slave1、slave2三台db上是否都存在监控和代理账号

wKiom1jx1qjQatqgAAD6E808uZo256.jpg

或者

wKioL1jx1qjzZBNQAADnE79vpcg988.jpg

wKioL1jx1qmAcE24AAEWUPHfZW8368.jpg

注2

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

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

11mysql-mmm安装

在monitor主机(192.168.1.9)上安装监控程序

wKiom1jx1qmiaNWiAADMRTgd4UM225.jpg

图片中的下载地址是

wget http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251d3183328f0249461e/mysql-mmm-2.2.1.tar.gz

wKiom1jx1qmg3EzKAADye2Ul9v0757.jpg

12在数据库服务器(master1、master2、slave1、slave2)上安装代理(即mysql-mmm)(同11步操作)

先在monitor上把mysql-mmm软件推送给四台mysql服务器

wKioL1jx1qrwJahVAACSUoz7m7c252.jpg

然后再每台mysql服务器上分别安装各自的mysql-mmm软件

wKiom1jx1qrQq201AAEEfaMQaPY099.jpg

13配置mmm

注意{编写配置文件,五台主机必须一致:}

完成安装后,所有的配置文件都放到了/etc/mysql-mmm/下面了。

管理服务器(即monitor)和数据库服务器(即四台mysql)上都要包含一个共同的文件mmm_common.conf,五台的mmm_common.conf文件都修改成如下内容:(下面我只以master1为例)

wKioL1jx1qqh3VQ7AAB9tzHW0UA243.jpg

wKioL1jx1quSDQR7AAD4PvkydsY012.jpg

配置项解释如下:

active_master_role   writer                                #积极的master角色的标示,所有的db服务器要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。

<hostdefault>

cluster_interface              eno16777736                #群集的网络接口

pid_path       /var/run/mmm_agentd.pid                  #pid路径

bin_path       /usr/lib/mysql-mmm/                       #可执行文件路径

replication_user         zpf                               #复制用户(即授权用户)

replication_password    123456                            #复制用户密码

agent_user            mmm_agent                         #代理用户

agent_password      123456                               #代理用户密码

wKiom1jx1qux8uquAADNcumrc90031.jpg

配置项解释如下:

<hostmaster1>                                     #master1的host名

ip                       192.168.1.5       #master1的ip

        mode               master                  #角色属性,master代表是主

        peer               master2                #与master1对等的服务器的host名,也就是master2的服务器host名

</host>

<hostmaster2>                                   #和master的概念一样

ip                                 192.168.1.6

mode                    master

peer                     master1

</host>

wKiom1jx1quSZo6oAACOCAYVsX0630.jpg

配置项解释如下:

<hostslave1>                                    #从库的host名,如果存在多个从库可以重复一样的配置

ip                            192.168.1.7          #从的ip

        mode    slave                         #slave的角色属性代表当前host是从

</host>

<hostslave2>                                  #和slave的概念一样

ip                           192.168.1.8

mode     slave

</host>

wKioL1jx1qzgVJHTAAC4tnGKnq0570.jpg

配置项解释如下:

<rolewriter>                                  #writer角色配置

        hosts      master1,master2           #能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。

ips         192.168.1.10             #对外提供的写操作的虚拟IP

        mode    exclusive                 #exclusive代表只允许存在一个主,也就是只能提供一个写的IP

</role>

<rolereader>                               #read角色配置

        hosts  master2,slave1,slave2       #对外提供读操作的服务器的host名,当然这里也可以把master加进来

ips      192.168.1.20, 192.168.1.30, 192.168.1.40         #对外提供读操作的虚拟ip,这三个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip

        mode      balanced                #balanced代表负载均衡

</role>

一台配置完毕,然后把这个文件拷贝到其他的四台主机,配置都不变

wKioL1jx1qzgZxYDAAE3sQvruQc325.jpg

代理文件配置

编辑四台mysql节点机上的/etc/mysql-mmm/mmm_agent.conf

wKiom1jx1qyChmcYAADomSnMekw844.jpg

wKiom1jx1q3C2053AADD3dGe7fQ785.jpg

wKioL1jx1q2S54O-AAC_PorNml4303.jpg

wKiom1jx1q3hguNOAAC_fVyG5YE765.jpg

注意:这个配置只配置mysql服务器,监控服务器(即monitor)不需要配置,this后面的host名改成当前服务器的主机名。

启动代理进程(如下步骤也都是在四台mysql主机上操作,这里我就以master1为例来操作了

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

wKioL1jx1q6AVyUgAAF45sZ13K4495.jpg

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

wKiom1jx1q-hjApwAAKyzFvpKN0321.jpg

失败说明:添加source /root/.bash_profile目的是为了mysql-mmm-agent服务能启机自启。

自动启动和手动启动的唯一区别,就是激活一个console 。那么说明在作为服务启动的时候,可能是由于缺少环境变量。

解决办法

wKioL1jx1q_z_Cp6AABE_1QnTTo012.jpg

wKiom1jx1q_S5g-wAABJXl4yYmA966.jpg

再次试着开启服务

wKioL1jx1rDBAFh2AAIds5a01YE407.jpg

这次成功了

查看一下服务是否在运行

wKioL1jx1rDBdvVuAAC6qBZ5kNc388.jpg

配置防火墙

wKiom1jx1rGTSOuVAAEpNHc1bCY271.jpg

注:以上操作都必须在四台mysql主机上都操作完成了,然后方可下面的操作

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

wKioL1jx1rGiAEpgAAIS0N-2-cg736.jpg

各个配置项解释如下

includemmm_common.conf

<monitor>

ip    127.0.0.1                             #为了安全性,设置只在本机监听,mmm_mond默认监听9988

pid_path      /var/run/mmm_mond.pid

bin_path      /usr/lib/mysql-mmm/

status_path/var/lib/misc/mmm_mond.status

ping_ips     192.168.1.5,192.168.1.6,192.168.1.7,192.168.1.8  #用于测试网络可用性 IP 地址列表,只要其中有一个地址 ping 通,就代表网络正常,这里不要写入本机地址

auto_set_online  0                         #设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online

</monitor>

 

<checkdefault>

check_period    5          #描述:检查周期默认为5s,默认值:5s

trap_period     10         #描述:一个节点被检测不成功的时间持续trap_period秒,就慎重的认为这个

点失败了,默认值:10s

timeout         2          #描述:检查超时的时间,默认值:2s

 #restart_after     10000   #描述:在完成restart_after次检查后,重启checker进程,默认值:10000

max_backlog     86400     #描述:记录检查rep_backlog日志的最大次数,默认值:60

</check>

 

<hostdefault>

monitor_usermmm_monitor    #监控db服务器的用户

monitor_password  123456    #监控db服务器的密码

</host>

debug0                         #debug 0正常模式,1为debug模式

启动监控进程

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

wKiom1jx1rHQSaeDAAEc14785UY690.jpg

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

wKioL1jx1rKxFLEKAAJIR3PB5Qo232.jpg

解决方法:安装下列perl的库

wKioL1jx1rLyJYw-AABOOuipPlc815.jpg

wKiom1jx1rPRgjJIAABRyWc-dDk116.jpg

再次试着启动服务

wKiom1jx1rOS3ORuAAFSHnhljz0989.jpg

这次成功了

查看一下服务是否在运行

wKiom1jx1ybR-Z2zAAC6pOaYyKw863.jpg

注1:无论是在mysql端还是在监控端(monitor)如果有对配置文件进行修改操作都需要重启代理进程和监控进程

注2:MMM启动顺序:先启动monitor,再启动agent

配置防火墙

wKiom1jx1yaBQXPpAAErbcoQfaU807.jpg

14检查集群状态

wKiom1jx1yeCaJ7aAAEkx29H55Y084.jpg

从上图可以看出四台主机都是离线状态(这也是它们的原始状态)

如果服务器状态不是ONLINE,可以用如下命令将服务器上线

格式:#mmm_controlset_online主机名

我们现在把四台主机都处于复苏状态

wKiom1jx1yfDVmGJAAG3uhjYeWM931.jpg

再次查看群集状态

wKiom1jx1yiAc5gcAAE2c-vLFl0515.jpg

从上图显示可以看到,写请求的VIP在master1上,所有从节点也都把master1当做主节点

15查看是否启用vip

wKioL1jx1yjSGyzxAAF_oUIaLVk818.jpg

wKioL1jx1ymwLXb5AAF0WIyrrMU661.jpg

wKiom1jx1ymhK9kdAAF8hTgFACA887.jpg

wKiom1jx1yqzDKlCAAGAO5j8KGU972.jpg

16在master2,slave1,slave2主机上分别查看主mysql的指向

wKioL1jx1yqDtOF3AAHNcZUr2Mw156.jpg

wKioL1jx1yuA8kjBAAHdVCFh73g536.jpg

wKiom1jx1yuBfttqAAHYs-t0A-Q713.jpg

17MMM高可用性测试

说明:服务器读写采有VIP地址进行读写,出现故障时VIP会漂移到其它节点,由其它节点提供服务。

首先查看整个集群的状态,可以看到整个集群状态正常

wKiom1jx1yyCjQjRAAFG-ECjl3U233.jpg

模拟master1宕机,手动停止mysql服务,观察monitor日志,master1的日志如下

wKioL1jx1yyRFI7nAAC1TyvYibA862.jpg

wKioL1jx1y3CXHoOAAJRwiDEs8o033.jpg

查看群集的最新状态

wKiom1jx1y2BCrLPAAEvMbuHwY0561.jpg

从显示结果可以看出master1的状态有ONLINE转换为HARD_OFFLINE,写VIP转移到了master2主机上

检查所有的mysql服务器群集状态

wKiom1jx1y3zLU8XAAHIXjKKdrI587.jpg

从上面截图可以看到master1能ping通,说明只是服务死掉了

18查看master2、slave1、slave2

查看master2主机

wKioL1jx1y7DhwGVAAGbZsbmsic701.jpg

查看slave1主机

wKiom1jx1y6xMraNAAHQQ8xUq24221.jpg

查看slave2主机

wKioL1jx1y_jDVaWAAHXtXOR9lo432.jpg

19现在再把master1主机的mysql服务启动,再次观察monitor日志:

wKiom1jx1zDCGgQIAAC3jXFit4Q667.jpg

wKioL1jx1zCCBXdxAAG4Le2nROE851.jpg

从上面截图可以看到master1的状态由hard_offline改变为awaiting_recovery状态

20用下面的命令将服务器master上线

wKiom1jx1zDS_oQeAADAdsqqyu8008.jpg

21再次查看群集的最新状态

wKiom1jx1zGRc5LFAAEPtkA2MUw313.jpg

从上图可以看到原主master1重新启动后不会接管主,只有现有的主(即master2)宕机了,master1才会接管

总结:

(1)master2备选主节点宕机不影响集群的状态,就是移除了master2备选节点的读状态。

(2)master1主节点宕机,由master2备选主节点接管写角色,slave1,slave2指向新master2主库进行复制,slave1,slave2会自动change master到master2.

(3)如果master1主库宕机,master2复制应用又落后于master1时就变成了主可写状态,这时的数据主无法保证一致性。

如果master2,slave1,slave2延迟于master1主,这个时master1宕机,slave1,slave2将会等待数据追上db1后,再重新指向新的主node2进行复制操作,这时的数据也无法保证同步的一致性。

(4)如果采用MMM高可用架构,主,主备选节点机器配置一样,而且开启半同步进一步提高安全性或采用MariaDB/mysql5.7进行多线程从复制,提高复制的性能。

附:

1日志文件

说明:日志文件往往是分析错误的关键,所以要善于利用日志文件进行问题分析。

db(即mysql服务器端):

wKioL1jx1zHx5Ma5AACHsnOj4P0795.jpg

监控端(即monitor端):

wKioL1jx1zHydukPAACF7ZHhLEA273.jpg

2命令文件

wKiom1jx1zKwqNK4AAE0GMmLnmI599.jpg

说明:db服务器端(即mysql服务器端)只有mmm_agentd程序,其它的都是在monitor服务器端。

3mmm_control用法

作用:mmm_control程序可以用于监控群集状态、切换writer、设置online\offline操作等。

wKioL1jx1zLCKuARAAJoTAo2Cyg720.jpg

wKiom1jx1zSBnGkbAAP7Lq25XTs296.jpg

检查所有的db服务器群集状态

wKioL1jx1zWwO2J5AABdcZ4rbkc519.jpg

该命令检查项包括:ping、mysql是否正常运行、复制线程是否正常等。

 

检查群集环境在线状况

wKiom1jx1zXTrkzZAABNa7MYe6M716.jpg


对指定的host执行offline操作

wKioL1jx1zWyNHC5AABxv1bLs64560.jpg


对指定的host执行onine操作

wKiom1jx13bCGMugAABms__T6Zc978.jpg


执行write切换(手动切换):

首先查看当前的slave对应的master

wKioL1jx13exeXFTAACrx2mTot0099.jpg

然后进行writer切换,要确保mmm_common.conf文件中的writer属性有配置对应的host,否则无法切换

wKiom1jx13fwt_wLAACZdIvLaWA324.jpg

查看一下writer是否转到master1:

wKioL1jx13egqUhFAAEhkWuJt28366.jpg

再次查看一下slave是否自动切换了新master:(下图中可以确定slave切换了新master)

wKioL1jx13ijpfASAACogHspLaQ904.jpg

4其它处理问题

原因:如果不想让writer从master切换到backup(包括主从的延时也会导致写VIP的切换),那么可以在配置/etc/mysql-mmm/mmm_common.conf时,去掉<role write>中的backup

wKiom1jx13iTzl1UAAHnFSH5xWM020.jpg

5总结

①对外提供读写的虚拟IP是由monitor程序控制。如果monitor没有启动那么db服务器不会被分配虚拟ip,但是如果已经分配好了虚拟ip,当monitor程序关闭了原先分配的虚拟ip不会立即关闭外部程序还可以连接访问(只要不重启网络),这样的好处就是对于monitor的可靠性要求就会低一些,但是如果这个时候其中的某一个db服务器故障了就无法处理切换,也就是原先的虚拟ip还是维持不变,挂掉的那台DB的虚拟ip会变的不可访问。

      ②agent程序受monitor程序的控制处理write切换,从库切换等操作。如果monitor进程关闭了那么agent进程就起不到什么作用,它本身不能处理故障。

      ③monitor程序负责监控db服务器的状态,包括Mysql数据库、服务器是否运行、复制线程是否正常、主从延时等;它还用于控制agent程序处理故障。

       ④monitor会每隔几秒钟监控db服务器的状态,如果db服务器已经从故障变成了正常,那么monitor会自动在60s之后将其设置为online状态(默认是60s可以设为其它的值),有监控端的配置文件参数“auto_set_online”决定,群集服务器的状态有三种分别是:HARD_OFFLINE→AWAITING_RECOVERY→online

       ⑤.默认monitor会控制mmm_agent会将writer db服务器read_only修改为OFF,其它的db服务器read_only修改为ON,所以为了严谨可以在所有的服务器的my.cnf文件中加入read_only=1由monitor控制来控制writer和read,root用户和复制用户不受read_only参数的影响。


本文转自Mr大表哥 博客,原文链接:  http://blog.51cto.com/zpf666/1916289   如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
3月前
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
28 4
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
90 1
|
2月前
|
监控 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
49 6
|
3月前
|
SQL 关系型数据库 MySQL
Mysql高可用,索引,事务与调优:提高数据库性能的关键技术
在当今互联网时代,高可用性、稳定性和性能是数据库的三大关键要素。本文将深入探讨Mysql高可用、索引、事务和调优等方面的技术,为读者提供实用的解决方案和经验。
24 0
|
3月前
|
监控 关系型数据库 MySQL
MySQL高可用与性能优化综述
MySQL作为一种常用的关系型数据库管理系统,高可用性、索引优化、事务处理和性能调优一直是开发人员和运维人员关注的重点。本文将从MySQL高可用性解决方案、索引设计与优化、事务处理最佳实践以及性能调优策略等方面进行探讨,为读者提供全面的MySQL技术知识概览。
|
3月前
|
SQL 缓存 关系型数据库
MySQL高可用与性能优化——从索引到事务
MySQL是一款常用的关系型数据库,但在实际应用中,如何保证其高可用性与性能优化依然是一个值得探讨的话题。本文将从索引的创建和优化、事务的处理以及常见的性能瓶颈入手,为读者提供MySQL高可用与性能优化的实践经验。
|
3月前
|
缓存 固态存储 关系型数据库
从索引到事务,MySQL高可用调优全攻略
MySQL是目前最流行的关系型数据库之一,但是在高并发情况下,它的性能和可靠性会受到很大的挑战。本文将介绍MySQL高可用方案中的索引优化、事务管理以及调优技巧,帮助读者提升MySQL应用的性能和可靠性。
49 0
|
4月前
|
存储 关系型数据库 MySQL
史上最全MySQL剖析:优化+存储+查询+索引+复制+可扩展+高可用
在互联网行业,MySQL数据库毫无疑问已经是最常用的数据库,LAMP (Linux +Apache + MySQL + PHP)甚至已经成为专有名词,也是很多中小网站建站的首选技术架构。
|
4月前
|
运维 监控 关系型数据库
百度搜索:蓝易云【mysql的mmm高可用详解。】
总结: MMM是一种基于MySQL主从复制的高可用性解决方案,通过使用双主复制架构和自动故障检测与切换机制,实现了MySQL数据库的高可用性和数据同步。使用MMM可以提供更高的系统可靠性和可用性,并减少系统停机时间。但需要注意的是,MMM并不是万能的解决方案,仍需要根据实际需求和系统规模来评估是否适合使用。
52 1