MHA架构部署

一、

**简介
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 才能顺利的连接进去,实现主从切换功能。

MHA架构部署

话不多说,开始部署:

关闭防火墙

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

MHA架构部署
借鉴博客:https://blog.csdn.net/weixin_51886255/article/details/111573325

上一篇:深入浅出谈MySQL高可用架构(MHA)与Atlas读写分离


下一篇:MHD高可用