数据库MHA实现高可用架构
一、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。