文章目录
一、关于 MMM:
(1)MMM 简介
MMM(Master-Master replication manager for MySQL):
1、是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。
2、MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。对于那些对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。
(2)优缺点
1、自动的主主Failover切换 2、多个Slave读的负载均衡。
2、无法完全保证数据的一致性(在db1宕机过程中,一旦db2落后于db1,这时发生切换,db2变成了可写状态,数据的一致性就无法保证)
3、无论何时,只有一个数据库可写;db1宕机后,write VIP会指向db2,当db1恢复后,db1不会自动变成可写主,需要手动move_role 或者db2宕机,所以read host要包括db1,不然容易造成浪费;
4、由于是使用虚拟IP浮动技术,类似Keepalived,故RIP(真实IP)要和VIP(虚拟IP)在同一网段;如果是在不同网段也可以,需要用到虚拟路由技术。但是绝对要在同一个IDC机房,不可跨IDC机房组建集群。
二、部署 MMM
角色 | IP地址 |
---|---|
主服务器 1 | 192.168.220.129 |
主服务器 2 | 192.168.220.131 |
从服务器 1 | 192.168.220.136 |
从服务器 2 | 192.168.220.137 |
监控主机 | 192.168.220.135 |
Write Vip | 192.168.220.100 |
Read Vip | 192.168.220.110;192.168.220.120 |
实验环境说明:
(1)五台虚拟机,其中两台为 mysql主服务器,两台为 mysql从服务器,还有一台作为Monitor监控,Monitor同时监控四台mysql服务器;
(2)两台主服务器相互同步,两台从服务器同时同步其中任意一台主服务器即可;
(3)配置虚拟ip地址,用户做写入或者读写操作只需要连接虚拟ip地址,其中写的操作由主服务器完成,读的操作由两台从服务器完成;
(4)实验验证:其中任意一台主服务器宕机,虚拟地址实现跳转到另外一台,不影响用户使用。
第一步:四台主机安装 Mysql数据库
(1)配置ALI云源,然后安装epel-release源,并清理yum缓存
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache
(2)搭建本地yum源
yum -y install mariadb-server mariadb
//安装 mariadb
systemctl stop firewalld.service //关闭防火墙
setenforce 0 //关闭安全性功能
systemctl start mariadb.service //开启 mariadb服务
(3)开启mariadb服务之后,修改 ml 主配置文件
vim /etc/my.cnf
替换 mysql模块内代码,插入以下代码:
[mysqld]
log_error=/var/lib/mysql/mysql.err
log=/var/lib/mysql/mysql_log.log
log_slow_queries=/var/lib/mysql_slow_queris.log
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1 //这是主机的id号,注意不同主机id号不一样
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
为了区别,我将四台主机id号分别设定为 1(master1) ,2(master2),11 (slave1),22(salve2),注意配置文件修改 id号。
(4)配置完成后,记得重启一下mariadb服务,并查看端口是否正常打开
systemctl restart mariadb //重启服务
netstat -natp | grep 3306 //查看端口
第二步:配置主主同步(复制)
(1)先各自查看一下两台主服务器上记录日志文件的名称和位置值
show master status; //查看状态
(2)配置主主复制
1、进入mysql数据库,在两台主服务器上都输入以下命令(这是两台主服务器都需要做的):
grant replication slave on *.* to 'replication'@'192.168.220.%' identified by '123456';
//这一步是授权,互相给对方授权
2、在第一台主服务器上指定第二台服务器的日志文件名和位置参数:
change master to master_host='192.168.220.131',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
3、同时第二台主服务器也要指定第一台服务器的日志文件名和位置参数:
change master to master_host='192.168.220.129',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
(3)开启salve功能,并查看状态:
start slave; //开启slave
show slave status\G; //查看状态
此时,两台主服务器已经部署好同步复制了,主服务器配置暂时可以了,接下来配置两台从服务器。
第三步:配置两台从服务器(实现主从同步)
首先要实现主从同步,两台从服务器都要同时指向一台主服务器,这里我指向的是第一台
进入数据库,输入以下指令:
change master to master_host='192.168.220.129',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
start slave; //开启slave
至此,主主、主从,四台 mysql服务器同步配置都已经完成
第四步:安装MMM(所有mysql服务器都需要)
(1)安装mmm
yum install mysql-mmm* -y
(2)配置文件
cd /etc/mysql-mmm/
vim mmm_common.conf
修改好各自主机的IP地址、以及读写的虚拟ip地址:
(3)修改好配置文件后,可以使用 scp远程同步的命令,将文件复制到其他四台主机(因为这个文件配置是一模一样的,直接复制就可以了)
scp mmm_common.conf root@192.168.220.131:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.220.136:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.220.137:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.220.135:/etc/mysql-mmm/
第五步:配置监控服务器(Monitor)
(1)首先准备环境,关闭防火墙
systemctl stop firewalld.service
setenforce 0
(2)安装源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum install mysql-mmm* -y
(3)修改 mmm_mon.conf 文件
1、添加 ips
2、修改 monitor 登录密码
第六步:在所有数据库上添加授权
(1)为 mmm_agent 授权
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.35.%' identified by '123456';
(2)mmm_monitor 授权
grant replication client on *.* to 'mmm_monitor'@'192.168.35.%' identified by '123456';
(3)修改所有数据库各自的 mmm_agent.conf 文件(不同主机,对应不同的名称)
第一台:
this db1
第二台:
this db2
第三台:
this db3
第四台:
this db4
(4)在所有数据库上启动mysql-mmm-agent
systemctl start mysql-mmm-agent.service
第七步:监控主机上验证
(1)启动 mysql-mmm-monitor 服务
systemctl start mysql-mmm-monitor
(2)查看各个节点情况
1、查看情况:
mmm_control show
此时,可以看出虚拟ip地址绑定在第一台虚拟机上,我们也可以使用命令,mmm_control move_role writer db2 ,来切换指定绑定。
2、检查所有情况是否正常,显示各种OK就可以了
mmm_control checks all
第八步:实验结果验证,故障测试
(1)模拟主服务器宕机,因为现在 虚拟IP地址 绑定的是第一台主服务器,现在模拟宕机,关闭第一台服务器 mariadb服务,查看虚拟地址是否会转移到第二台虚拟机上。
1、关闭服务:
systemctl stop mariadb.service
2、监控主机上查看各个节点情况:
注意:目前主服务器1 是宕机状态,如果再开启服务上线后,并不会抢占虚拟 IP,虚拟IP依旧绑定的是主服务器2,除非管理员手动切换。
(2)模拟从服务器宕机,关闭从服务器1 的mariadb服务,查看虚拟地址是否会转移到从服务器2 上。
1、slave1关闭服务:
systemctl stop mariadb.service
2、监控主机上查看各个节点情况:
3、salve1再次开启服务
systemctl start mariadb.service
4、在监控机上再次查看各节点情况,会自动恢复