MySQL高可用MMM架构集群

简介:

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: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值