简介:
MMM也就是Master-Master replication Manager for MySQL,MySQL主主复制管理器。关于MySQL主主复制配置的监控,故障转移和管理的一套可伸缩的脚本套件,可以用这个套件在一组居于复制的服务器启动虚拟IP,除此以外,还有对从服务器的延迟监控,主从数据备份,节点之间重新同步功能。通过MMM方案可以实现MySQL服务器的故障转移,从而实现MySQL的高可用。但这个工具没有读负载均衡,这样会很难对主服务器进行读负载的分担,而且在进行主从切换时容易造成数据丢失。
配置MMM架构需要三台服务器,其中两台进行配置主主复制,第三台作为从服务器的同时作为一个监控节点对主主复制进行一个监控。这里使用192.168.0.2和192.168.0.5作为主服务器配置主主复制的链路,而192.168.0.3作为一个从服务器,其对应的主服务器是192.168.0.2
一、配置主主(192.168.0.2和192.168.0.5),主从(192.168.0.2和192.168.0.3)架构
1、先在192.168.0.2上先导出数据文件,然后创建一个主从复制的用户,配置主主复制链路
systemctl start mysqld
#启动MySQL服务
mysqldump --single-transaction --master-data=a --all-databases -u root -p > wen.sql
#导出数据库文件
scp wen.sql 192.168.0.5:/root
#传送到192.168.0.5的服务器上,存放的路径在/root下
scp wen.sql 192.168.0.3:/root
#传送到192.168.0.3的服务器上,存放的路径在/root下
mysql -u root -p
#进入到MySQL服务界面
create user repl@'192.168.0.%' identified by '1234';
#创建一个用于主从复制的用户,用户名为repl,密码为1234,在192.168.0的网段中
grant replication slave on *.* to repl@'192.168.0.%';
#给repl用户赋予主从复制的权限对于所有数据库
#设置主从复制链路
change master to master_host='192.168.0.5', #设置这台服务器所对应的主节点IP为192.168.0.5
master_user='repl', #主从复制的用户名为repl
master_password='1234', #主从复制的用户密码为1234
master_log_file='mysql-bin.000020', #主从复制文件的信息,可以通过 more wen.sql得到
master_log_pos=1016; #主从复制文件的信息,可以通过 more wen.sql得到
start slave;
#开启主从复制链路
show slave status \G
#查看主从复制链路的信息以及状态,能看到master_host=192.168.0.5等信息
#############################################################################################
报错提示:Slave failed to initialize relay log info structure from the repository, Error_code: 1872
遇到这种问题就要在MySQL的配置文件my.cnf文件上添加一个server-id和relay_log=(路径)了,然后在MySQL界面中输入reset slave命令,再进行主从链路的配置。
#############################################################################################
2、在192.168.0.5服务器上导入数据库文件,然后设置主主复制链路
mysql -u root -p < wen.sql
#将数据库文件导入到数据库中
mysql -u root -p
#进入到MySQL服务界面中
#设置主从复制链路状态
change master to master_host='192.168.0.2',
master_user='repl',
master_password='1234',
master_log_file='mysql-bin.000020',
master_log_pos=1016;
start slave;
#启动主从复制链路
show slave status \G
#查看主从复制链路的状态,能看到master_host=192.168.0.2以及其他的信息
3、在192.168.0.3上导入数据库文件,然后配置和192.168.0.2的主从复制拓扑
mysql -u root -p < wen.sql
mysql -u root -p
change master to master_host='192.168.0.2',
master_user='repl',
master_password='1234',
master_log_file='mysql-bin.000020',
master_log_pos=1016;
start slave;
二、安装和配置MMM以及数据库节点
1、在192.168.0.2,192.168.0.3,192.168.0.5这三台服务器上同样的步骤进行(可以先配置一下阿里云yum源,为安装的时候做一下准备:https://blog.csdn.net/vincen123/article/details/81436167)
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#下载epel源,这个链接适用于Redhat/Centos的7或者7以上的版本
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#下载remi源,这个链接适用于Redhat/Centos的7或者7以上的版本
rpm -ivh remi-release-7.rpm
#使用rpm的方式进行安装
rpm -ivh epel-release-latest-7.noarch.rpm
#使用rpm的方式进行安装
#安装了这两个yum源工具后,会在/etc/yum.repo.d/的目录下生成repo文件
vim /etc/yum.repo.d/epel.repo
enable=1
vim /etc/yum.repo.d/remi.repo
注释掉mirrorlist开头的那一行配置
#安装MMM架构的代理功能呢
yum -y install mysql-mmm-agent.noarch
#安装MMM的所有包
yum -y insatll mysql-mmm-*
2、在192.168.0.2中创建监控用户,代理用户并修改MMM共享配置信息
mysql -u root -p
grant replication client on *.* to 'mmm_mon'@'192.168.0.%' identified by '1234';
#创建一个用于监控的用户,用户名为mmm_mon,密码为1234
grant super,replication client, process on *.* to 'mmm_agent'@'192.168.0.%' identified by '1234';
#创建一个用于代理的用户,用户名为mmm_agent,密码为1234
exit
#退出MySQL界面
vim /etc/mmm_common.conf
active_master_role writer
<host default>
cluster_interface ens33 #用于三台服务器ping通的网卡名
pid_path /run/mysql-mmm-agent.pid
bin_path /usr/libexec/mysql-mmm/
replication_user repl #主从复制的用户名
replication_password 1234 #主从复制用户的密码
agent_user mmm_agent #MMM架构的代理用户
agent_password 1234 #代理用户的密码
</host>
<host db1> #db1的信息
ip 192.168.0.2 #IP
mode master #模式是主节点
peer db2 #相关联的是db2
</host>
<host db2> #db2的信息
ip 192.168.0.5 #IP
mode master #模式是主节点
peer db1 #相关联的是db1
</host>
<host db3> #db3的信息
ip 192.168.0.3 #IP
mode slave #模式是从节点
</host>
<role writer> #写操作的服务器信息
hosts db1, db2 #db1和db2是主节点
ips 192.168.0.20 #设置一个虚拟写ip
mode exclusive #模式是只写
</role>
<role reader> #读操作的服务器信息
hosts db1,db2,db3 #有db1,db2,db3
ips 192.168.0.21,192.168.0.22,192.168.0.23 #设置三个虚拟的读IP
mode balanced #模式是均衡
</role>
3、将这个配置文件传送到另外两台服务器上并做修改
scp /etc/mysql-mmm/mmm_common.conf root@192.168.0.3:/etc/mysql-mmm
#将这个配置配置文件拷贝传送到192.168.0.3服务器的/etc/mysql-mmm目录下
scp /etc/mysql-mmm/mmm_common.cong root@192.168.0.5:/etc/mysql-mmm
#将这个配置配置文件拷贝传送到192.168.0.3服务器的/etc/mysql-mmm目录下
在192.168.0.2的文件里
cat /etc/mysql-mmm/mmm_agent.conf
配置文件里的this db1 确认是这个就没错了
在192.168.0.5
vim /etc/mysql-mmm/mmm_agent.conf
this db2
在192.168.0.3
vim /etc/mysql-mmm/mmm_agent.conf
this db3
4、在192.168.0.3服务器上配置监控节点服务,用于监控这个集群的状态.并且在三台服务器上启动MMM的代理服务
vim /etc/mysql-mmm/mmm_mon.conf
在<monitor>下的
ping_ips 192.168.0.2,192.168.0.5,192.168.0.3
在<host default>下的
monitor_user mmm_mon #监控用户名
monitor_password 1234 #监控用户的密码
保存并退出
systemctl start mysql-mmm-agent.service
#启动MMM架构的代理服务
在另外两台服务器上用同样的方式启动MMM架构的代理
systemctl start mysql-mmm-agent.service
5、在192.168.0.3中启动MMM架构的监控服务,监控这个集群中的状态
systemctl start mysql-mmm-monitor.service
#启动MMM架构的监控服务
6、在监控节点192.168.0.3上查看当前的集群状态,可以看到三个节点都是在线的状态,并且192.168.0.2服务器上有上面配置的4个虚拟IP
mmm_control show #查看集群状态的命令
db1(192.168.0.2) master/ONLINE. Roles: reader(192.168.0.21), reader(192.168.0.22), reader(192.168.0.23), writer(192.168.0.20)
db2(192.168.0.5) master/ONLINE. Roles:
db3(192.168.0.3) slave/AWAITING_RECOVERY. Roles:
7、在192.168.0.2服务器的主节点中,ens33这个网卡会增加四个虚拟IP
ip addr | grep ens33 #查看enss33这个网卡的信息
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global ens33
inet 192.168.0.21/32 scope global ens33
inet 192.168.0.22/32 scope global ens33
inet 192.168.0.23/32 scope global ens33
inet 192.168.0.20/32 scope global ens33
三、测试当其中一台主服务器不能提供服务的时候是否会进行主主切换。
1、关闭192.168.0.2服务器上的MySQL服务(模拟当一个主节点宕机后的情景)
systemctl stop mysqld
#在192.168.0.2的服务器中停止MySQL服务
2、在监控节点192.168.0.3上查看集群的状态,看到db1节点是处于关闭状态,并且虚拟IP转移到192.168.0.5这个节点上,实现了故障转移。在192.168.0.5这个节点上可以通过ip addr | grep ens33看到ens33这个网卡多出了四个虚拟IP
mmm_control show
# Warning: agent on host db1 is not reachable
db1(192.168.0.2) master/HARD_OFFLINE. Roles:
db2(192.168.0.5) master/ONLINE. Roles: reader(192.168.0.21), reader(192.168.0.22), reader(192.168.0.23), writer(192.168.0.20)
db3(192.168.0.3) slave/AWAITING_RECOVERY. Roles: