【MMM】

目录

概念

       MySQL-MMM工作原理

       该方案的优缺点

       和mac区别

       特点

准备环境

主要流程

部署

配置主主同步 (m1 、m2相互为主)

设置主从同步

安装MMM

测试


概念


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

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

MySQL-MMM工作原理

MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。

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

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

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

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

在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。

该方案的优缺点

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

缺点:monitor节点是单点,不过这个你也可以结合keepalived或者haertbeat做成高可用

和mac区别

mmm主最多两主多个从
      

特点

小 、容易丢数据

mc多个一主两从,监控器只需要监控每个主,所以可以建立多个主从结构

准备环境


准备五台虚拟机并关闭防火墙

主要流程


一、搭建mysql数据库

二、设置主主同步

三、设置主从同步

四、安装mmm(五台虚拟机都要安装)

五、故障检测

【db1】主m1 【master1】                   192.168.1.124

【db2】主m2 【master2】                   192.168.1.125

【db3】从1 【slave1】                        192.168.1.169

【db4】从2 【slave2】                        192.168.1.131

监控器 【monitor服务器】                    192.168.1.132

首先为了更好的识别

命令行修改用户名:对两主 、两从进行改名

hostnamectl set-hostname db(1-4)

bash:刷新主机名

部署


首先配置阿里源(五台虚拟机都要配置)

可使用rz命令将提前准备好的Centos-7.repo拖进虚拟机

使用rz进行拖拽时要在yum仓库下

也可使用以下命令进行安装

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

ll进行查看就拖拽进来了

安装epel-release源

yum -y install epel-release

安装mysql(监控服务器不用安装)

0yum -y install mariadb mariadb-server

修改主m1配置文件

在【mysqld】下添加以下内容原有内容不动

【mysqld】

log-bin=mysql-bin
log-slave-updates=true
server-id=1    #另一台master设置为2
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

重启mysqld

systemctl restart mariadb

然后查看3306端口发现被监听

netstat -anpt | grep 3306

修改m2配置文件

【mysqld】

log-bin=mysql-bin
log-slave-updates=true
server-id=2    #另一台master设置为2
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

修改slave1

【mysqld】

server-id=3
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

修改slave2

【mysqld】

server-id=4
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

配置主主同步 (m1 、m2相互为主)


在m1上为m2授予从的权限,在m2上也要为m1授予从的权限

先登录到mysql主m1数据库

mysql -uroot -p

创建授权用户

相互授权对方用户 主m1--主m2

主m1

grant replication slave on *.* to 'cjf'@'192.168.1.125' identified by '123456';

主m2

grant replication slave on *.* to 'cjf'@'192.168.1.124' identified by '123456';

刷新权限

flush privileges;

上面两步没有问题后,在m2登录数据库,使用命令查看记录日志文件名称和位置值

show master status;

回到主m1去指定主m2

前提要关闭服务后再去指定

【主m1】

stop slave;

CHANGE MASTER TO

  MASTER_HOST='192.168.1.125',

  MASTER_USER='cjf',

  MASTER_PASSWORD='123456',

  MASTER_LOG_FILE='mysql_bin.000003',

  MASTER_LOG_POS=473;

上面两步没有问题后,在m1登录数据库,使用命令查看记录日志文件名称和位置值

show master status;

回到主m2去指定主m1

【主m2】

CHANGE MASTER TO

  MASTER_HOST='192.168.1.124',

  MASTER_USER='cjf',

  MASTER_PASSWORD='123456',

  MASTER_LOG_FILE='mysql_bin.000004',

  MASTER_LOG_POS=551;

 然后再开启服务

start slave;

使用命令查看数据库状态

show slave status \G

【主m1】

 【主m2】

建库测试主主同步

使用命令查看 主m1数据库此刻的数据表

show databases;

 主m2数据库此刻的数据表

在m1上建个库,m2上可以看到

create database dba;

【主m1】

【主m2查看】

设置主从同步


在两台从(192.168.1.128和192.168.1.131)上做,注意日志文件和位置参数的改变。

让这两个从认m1(192.168.1.124)为主

主m1设置权限用户

grant replication slave on *.* to 'cjf'@'192.168.1.%' identified by '123456';

从1 、从2 设置权限用户给主m1

grant replication slave on *.* to 'cjf'@'192.168.1.124' identified by '123456';

在m1登录数据库,使用命令查看记录日志文件名称和位置值

show master status;

关闭服务

stop slave;

在两个从数据库输入下面命令

CHANGE MASTER TO

MASTER_HOST='192.168.1.124',

MASTER_USER='cjf',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000005',

MASTER_LOG_POS=326;

开启两台从服务器 服务

start slave;

查看从1 、从2数据库状态

show slave status\G

测试主从、主主、同步 情况

建立数据库,然后测试同步情况

主m1 创建aaa数据库

create database aaa;

查看

show databases;

主m2 、从1 、从2查看

show databases;

安装MMM


所有服务器都安装MMM

yum -y install mysql-mmm*

在所有数据库授权使monitor可以访问

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

super                        超级权限
    
replication client      客户端复制管理权限
    
process on              进程管理
   

安装结束后,对mmm进行配置

 vim /etc/mysql-mmm/mmm_common.conf

active_master_role      writer

<host default>
    cluster_interface       ens33                                 【网卡】
    pid_path                /run/mysql-mmm-agent.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        cjf                                       【复制用户】
    replication_password    123456                          【 复制用户的密码】
    agent_user              mmm                                   【管理用户】
    agent_password          123456                           【管理用户的密码】
</host>

<host db1>
    ip      192.168.1.124       【主m1】
    mode    master
    peer    db2              【指定主m2】
</host>

<host db2>
    ip      192.168.1.125        【主m2】
    mode    master
    peer    db1               【指定主m1】
</host>

<host db3>
    ip      192.168.1.128        【从1】
    mode    slave
</host>

<host db4>
    ip      192.168.1.131        【从2】
    mode    slave
</host>

<role writer>
    hosts   db1, db2
    ips     192.168.1.199    【虚拟ip自己编写即可】
    mode    exclusive
</role>

<role reader>
    hosts   db1, db2
    ips     192.168.1.197, 192.168.1.198 【虚拟ip自己编写即可】
    mode    balanced
</role>
 

【wq保存退出 并且其它所有服务器进行配置】

所有服务器修改角色 和配置文件里对应上

 vim /etc/mysql-mmm/mmm_agent.conf 

分别改为db1、db2、db3、db4

修改监控主机配置文件(192.168.1.132)

vim /etc/mysql-mmm/mmm_mon.conf 

ping_ips   【后面跟上所有服务器的真实ip】
    
<host default>
    monitor_user        mmm_agent 【管理用户】
    
    monitor_password    123456 【授权账户和密码 】
</host>

所有数据库启动mysql agent代理服务

systemctl start mysql-mmm-agen

启动监控

systemctl start mysql-mmm-monitor

【监控服务器】

查看状态

 mmm_control show

查看监控状态

mmm_control checks all

手动切换状态

  mmm_control move_role writer db1

没有手动切换之前虚拟ip在db2后面

切换之后虚拟ip到了db1 后面

测试


停止第一个主服务器

查看监控状态

【主m1】

关闭mysql

systemctl stop mariadb

【监控器查看状态】

 mmm_control show

 查看监控状态

mmm_control checks all

db1显示报错

重新启动主m1

systemctl start mariadb  【启动】

systemctl restart mariadb  【再重启】

 systemctl start mysql-mmm-agent   【所有数据库启动mysql agent代理服务】

systemctl start mysql-mmm-monitor   【启动监控】

然后再重新启动

systemctl restart mysql-mmm-agent 

systemctl restart mysql-mmm-monitor

【监控服务器】

 systemctl start mysql-mmm-agent   【所有数据库启动mysql agent代理服务】

systemctl start mysql-mmm-monitor   【启动监控】

然后再重新启动

systemctl restart mysql-mmm-agent 

systemctl restart mysql-mmm-monitor

再查看状态

 mmm_control show

 查看监控状态

mmm_control checks all

报错修复

停止主m2

systemctl stop mariadb

然后监控服务器查看状态

 mmm_control show

显示虚拟ip自动分配带db1后面

查看监控状态

mmm_control checks all

db2显示报错

主m2重新连接

systemctl start mariadb  【启动】

systemctl restart mariadb  【再重启】

 systemctl start mysql-mmm-agent   【所有数据库启动mysql agent代理服务】

systemctl start mysql-mmm-monitor   【启动监控】

然后再重新启动

systemctl restart mysql-mmm-agent 

systemctl restart mysql-mmm-monitor

【监控服务器】

 systemctl start mysql-mmm-agent   【所有数据库启动mysql agent代理服务】

systemctl start mysql-mmm-monitor   【启动监控】

然后再重新启动

systemctl restart mysql-mmm-agent 

systemctl restart mysql-mmm-monitor

再查看状态

 mmm_control show

 查看监控状态

mmm_control checks all

报错修复

猜你喜欢

转载自blog.csdn.net/2302_77750172/article/details/131471683
mmm