一、
**简介
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。
二、
**MHA 服务
MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):
MHA Manager:
通常单独部署在一*立机器上管理多个 master/slave 集群(组),每个 master/slave 集群称作一个 application,用来管理统筹整个集群。
MHA node:
运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。
主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲 node 就是用来收集从节点服务器上所生成的 bin-log 。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。
在这里插入图片描述
由上图我们可以看出,每个复制组内部和 Manager 之间都需要ssh实现无密码互连,只有这样,在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能。
话不多说,开始部署:
关闭防火墙
systemctl stop firewalld
setenforce 0
配置ssh连接
每一台都要做无秘链接
ssh-keygen
ssh-copy-id root@192.168.150.206
ssh-copy-id root@192.168.150.207
ssh-copy-id root@192.168.150.208
ssh-copy-id root@192.168.150.209
MySQL主从搭建
主节点
yum -y install mariadb mariadb-server
vim /etc/my.cnf
server-id = 1 #集群中的各节点的id不能重复,必须唯一
log-bin = mysql-log #开启二进制日志
relay-log = mysql-relay #开启中继日志
systemctl restart mariadb
部署两台slave
yum -y install mariadb mariadb-server
vim /etc/my.cnf
[mysqld]
server-id = 2 #集群中的各节点的id不能重复,必须唯一
relay-log = mysql-relay #开启中继日志
log-bin = mysql-log #开启二进制日志
read_only = ON #启用只读属性
relay_log_purge = 0 #是否自动清空不再需要中继日志
log_slave_updates = 1 #更新的数据写进二进制日志中
systemctl restart mariadb
yum -y install mariadb mariadb-server
vim /etc/my.cnf
[mysqld]
server-id = 3 #集群中的各节点的id不能重复,必须唯一
relay-log = mysql-relay #开启中继日志
log-bin = mysql-log #开启二进制日志
read_only = ON #启用只读属性
relay_log_purge = 0 #是否自动清空不再需要中继日志
log_slave_updates = 1 #更新的数据写进二进制日志中
systemctl restart mariadb
一主多从
1)master操作
grant all on *.* to 'tom'@'%' identified by '123'; #授权用户
flush privileges; #刷新权限
show master status; #查看master的状态
2)两台slave操作
stop slave;
change master to master_host='192.168.150.206', master_user='tom', master_password='123', master_log_file='mysql-log.000003', master_log_pos=442;
start slave;
show slave status \G;
两台都是双yes,那就说明主从成功了
配置MHA
在manager配置
yum -y install perl-DBD-MySQL epel-release
yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm
在其余三个节点上配置
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
在master上授权:
grant all on *.* to 'mhaadmin'@'%' identified by '123';
flush privileges;
定义MHA配置文件
mkdir -p /etc/mha
mkdir -p /var/log/mha/app1
vim /etc/mha/app1.cnf
[server default]
user=mhaadmin #mha用户
password=123 #mha密码
manager_log=/var/log/mha/app1/manager #日志路径
manager_workdir=/var/log/mha/app1 #工作路径
master_binlog_dir=/var/lib/mysql
ping_interval=2
repl_user=tom #数据库用户
repl_password=123 #数据库密码
ssh_user=root #ssh登录用户
#slave配置
[server1]
hostname=192.168.150.206
port=3306
[server2]
hostname=192.168.150.207
port=3306
[server3]
hostname=192.168.150.208
port=3306
本步骤完成后开始检测各节点间 ssh 互信通信配置是否 ok
我们在 Manager 机器上输入下述命令来检测
masterha_check_ssh --conf=/etc/mha/app1.cnf
检测MySQL复制集群的连接配置参数
masterha_check_repl --conf=/etc/mha/app1.cnf
如果出错,在master重新授权一下
grant all on *.* to 'tom'@'%' identified by '123';
flush privileges;
然后在执行以上命令
启动MHA
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
查看master节点
masterha_check_status --conf=/etc/mha/app1.cnf
去master节点停止mysql看是否自动slave机变为master
systemctl stop mariadb
借鉴博客:https://blog.csdn.net/weixin_51886255/article/details/111573325