数据库MHA实现高可用架构

发布时间 2023-03-28 15:58:30作者: twistfate123

一、mysql MHA介绍
MHA(MasterHigh Availability)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。

1.1什么是MHA?
MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题。
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

1.2MHA的组成
(1)MHA Node(数据节点)
MHA Node 运行在每台 MySQL 服务器上。

(2)MHA Manager(管理节点)
MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

1.3 MHA 的特点

自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失;
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性;
目前MHA支持一主多从架构,最少三台服务,即一主两从.

 

二,mysql MHA搭建
实验思路:
1.MHA架构部分

1)数据库安装
2)一主两从
3)MHA搭建

2.故障模拟部分

1)主库失效
2)备选主库成为主库
3)原故障主库恢复重新加入到MHA成为从库

3 . 环境准备
服务器类型 系统和IP地址 需要安装的组件
MHA manager 节点服务器 CentOS7.4(64 位) manager/192.168.80.40 安装MHA node 和 manager 组件
Master 节点服务器 CentOS7.4(64 位) mysql2/192.168.80.10 安装mysql5.7、MHA node 组件
Slave1 节点服务器 CentOS7.4(64 位) mysql2/192.168.80.20 安装mysql5.7、MHA node 组件
Slave2 节点服务器 CentOS7.4(64 位) mysql2/192.168.80.30 安装mysql5.7、MHA node 组件
2.1 MySQL MHA搭建的步骤(理论)
2.1.1 搭建步骤

关闭防火墙和SElinux

准备主从复制环境

Master执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=100
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 
#添加完毕保存退出
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
show master status;
#查看记录二进制日志位置,一会从配置使用
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.30.%' identified by 'Admin@123';
#建立mha管理账户
 
2个slave执行:
vim  /etc/my.cnf
#[mysqld]此行下添加内容,开启主从复制和二进制日志
server_id=102
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
skip_name_resolve=1
general_log 
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
mysql -uroot -pAdmin@123
#登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
CHANGE MASTER TO
  MASTER_HOST='192.168.30.11',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;
#配置master信息
start slave
#开启主从复制
show slave status;
#查看配置是否成功

  

MHA服务器上检查 mha 环境并启动mha

masterha_check_ssh --conf=/etc/mastermha/app1.cnf
#检查mha的ssh免密登录环境
 All SSH connection tests passed successfully
#结尾行出现此信息表示无问题
masterha_check_repl --conf=/etc/mastermha/app1.cnf
#检查mha主从环境
MySQL Replication Health is OK.
#结尾行出现此信息表示无问题
masterha_check_status --conf=/etc/mastermha/app1.cnf
#查看mha状态,默认是停止状态stop
masterha_manager --conf=/etc/mastermha/app1.cnf 
#开启mha,需要等待较长时间启动成功
masterha_check_status --conf=/etc/mastermha/app1.cnf 
#重新查看状态是running

  

关闭master的mysql查看是否备1成为主且备2的slave信息变为备2的且备1的slave信息为空

master:
systemctl stop mysqld
#主关闭mysql
slave1:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息为空
slave2:
mysql -uroot  -p'Admin@123'
#登录数据库
show  slave  status;
#slave信息中Master_Host:变为slave1的ip地址
 
##注意就算重新开启master的数据库也不会成为主,需要手动添加为slave。