MHA概述
mysql服务器中master高可用
一套优秀的MySQL高可用环境下故障切换和主从复制的软件
MHA的出现就是解决MySQL单点的问题
MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换
MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用
MHA的组成
MHA Manager(管理节点)
MHA Node(数据节点)
MHA的特点
自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
目前MHA支持一主多从架构,最少三台服务,即一主两从
MHA搭建的步骤
初始化环境
#在四台服务器上初始化环境
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
修改master、slave1、slave2节点的主机名后面我将会以主机名设置mysql用户的访问权限
#主服务器
hostnamectl set-hostname mysql1
su
#从1服务器
hostnamectl set-hostname mysql2
su
#从2服务器
hostnamectl set-hostname mysql3
su
在Master、Slave1、Slave2添加主机映射关系
#三台添加同样的配置
vim /etc/hosts
192.168.239.60 mysql1
192.168.239.50 mysql2
192.168.239.40 mysql3
配置主从同步
开启日志文件
在 Master节点开启二进制日志文件
Slave1、Slave2 节点 开启二进制日志文件及中继日志文件
#因为后面配置的MHA高可用要用到这两个命令所以做软连接让系统识别
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
ls /usr/sbin/mysql* #查看
登录数据库主从配置授权
#所有数据库节点进行mysql主从同步的授权
mysql -uroot -p
grant replication slave on . to ‘myslave’@‘192.168.239.%’ identified by ‘1999612’; #从数据库同步使用
#所有数据库节点进行manager授权
grant all privileges on . to ‘gb’@‘192.168.239.%’ identified by ‘1999612’; #manager使用
#所有数据库节点进行授权
grant all privileges on . to ‘gb’@‘mysql1’ identified by ‘1999612’;
grant all privileges on . to ‘gb’@‘mysql2’ identified by ‘1999612’;
grant all privileges on . to ‘gb’@‘mysql3’ identified by ‘1999612’;
flush privileges; #刷新权限
show master status; #查看二进制文件和同步点
change master to
master_host=‘192.168.239.60’,
master_user=‘myslave’,
master_password=‘1999612’,
master_log_file=‘master-bin.000001’,
master_log_pos=2032;
#配置同步,注意master_log_file和master_log_pos的值要与master查询值一致
start slave; #启动同步,如果有报错执行reset alsve;
show slave status\G; #查看slave状态确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes #负责与主机 io通信
Slave_SQL_Running: Yes #负责自己的slave mysql进程
set global read_only=1;
验证主从同步
插入数据测试数据库同步
在 Master 主库插入条数据,
create database yjx;
use yjx;
create table ky18(id int);
insert into ky18 values (1);
show databases;
use yjx;
select * from ky18;
安装 MHA 软件
安装 MHA 软件包,先在所有服务器上必须先安装 node 组件
在 MHA-manager 节点上安装 manager 组件
manager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个
masterha_check_ssh #检查 MHA 的 SSH 配置状况
masterha_check_repl #检查 MySQL 复制状况
masterha_manger #启动 manager的脚本
masterha_check_status #检测当前 MHA 运行状态
masterha_master_monitor #检测 master 是否宕机
masterha_master_switch #控制故障转移(自动或者手动)
masterha_conf_host #添加或删除配置的 server 信息
masterha_stop #关闭manager
在所有服务器上配置无密码认证
#在 manager 节点上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa #一路按回车键
ssh-copy-id 192.168.239.60
ssh-copy-id 192.168.239.50
ssh-copy-id 192.168.239.40
#在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.50
ssh-copy-id 192.168.239.40
#在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.60
ssh-copy-id 192.168.239.40
#在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.60
ssh-copy-id 192.168.239.50
对故障切换脚本的配置
对manager服务进程进行配置
第一次配置需要在 Master 节点上手动开启虚拟IP
ifconfig ens33:1 192.168.239.100/24
在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf
测试 mysql 主从连接情况
在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常
masterha_check_repl -conf=/etc/masterha/app1.cnf
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点
masterha_check_status --conf=/etc/masterha/app1.cnf
查看 MHA 日志,也以看到当前的 master 是 192.168.239.60。
cat /var/log/masterha/app1/manager.log | grep “current master”
查看 Mysql1 的 VIP 地址 192.168.239.100 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失
ifconfig
//若要关闭 manager 服务,可以使用如下命令。
masterha_stop --conf=/etc/masterha/app1.cnf
或者可以直接采用 kill 进程 ID 的方式关闭。
tail -f /var/log/masterha/app1/manager.log
#在 Master 节点 Mysql1 上停止mysql服务
systemctl stop mysqld
或
pkill -9 mysql
#正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。查看 mysql2 是否接管 VIP
ifconfig
#在原主库服务器 mysql1 执行同步操作
change master to master_host=‘192.168.239.50’,master_user=‘myslave’,master_password=‘1999612’,master_log_file=‘master-bin.000002’,master_log_pos=154;
start slave;
在 manager 节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)
在 manager 节点上启动 MHA