目录
概念
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
报错修复