MHA高可用集群

MHA概述
mysql服务器中master高可用
一套优秀的MySQL高可用环境下故障切换和主从复制的软件
MHA的出现就是解决MySQL单点的问题
MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换
MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用

MHA的组成
MHA Manager(管理节点)

MHA Node(数据节点)

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

一主两从高可用结构
MHA高可用集群_第1张图片

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

MHA高可用集群_第2张图片
配置主从同步
开启日志文件
在 Master节点开启二进制日志文件
Slave1、Slave2 节点 开启二进制日志文件及中继日志文件
MHA高可用集群_第3张图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MHA高可用集群_第4张图片
在这里插入图片描述
在 所有节点上都创建两个软链接

#因为后面配置的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’; #从数据库同步使用

MHA高可用集群_第5张图片
manager授权

#所有数据库节点进行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; #刷新权限

MHA高可用集群_第6张图片
在 Master 节点查看二进制文件和同步点

show master status; #查看二进制文件和同步点

在这里插入图片描述
在 Slave1、Slave2 节点执行同步操作

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进程

MHA高可用集群_第7张图片
设置从库必须设置为只读模式

set global read_only=1;

验证主从同步
插入数据测试数据库同步

在 Master 主库插入条数据,
create database yjx;
use yjx;
create table ky18(id int);
insert into ky18 values (1);

MHA高可用集群_第8张图片
slave1、slave2查看是否同步

show databases;
use yjx;
select * from ky18;

MHA高可用集群_第9张图片
MHA高可用集群_第10张图片
安装 MHA 软件
在这里插入图片描述
MHA高可用集群_第11张图片
安装 MHA 软件包,先在所有服务器上必须先安装 node 组件
在这里插入图片描述
MHA高可用集群_第12张图片
在 MHA-manager 节点上安装 manager 组件
在这里插入图片描述
MHA高可用集群_第13张图片
manager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个
MHA高可用集群_第14张图片

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

MHA高可用集群_第15张图片
MHA高可用集群_第16张图片

#在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.50
ssh-copy-id 192.168.239.40

MHA高可用集群_第17张图片
MHA高可用集群_第18张图片

#在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.60
ssh-copy-id 192.168.239.40

MHA高可用集群_第19张图片
MHA高可用集群_第20张图片

#在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.239.60
ssh-copy-id 192.168.239.50

MHA高可用集群_第21张图片
MHA高可用集群_第22张图片
对故障切换脚本的配置
MHA高可用集群_第23张图片
MHA高可用集群_第24张图片
MHA高可用集群_第25张图片
对manager服务进程进行配置
MHA高可用集群_第26张图片
在这里插入图片描述
MHA高可用集群_第27张图片
第一次配置需要在 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

在这里插入图片描述
在这里插入图片描述
在 manager 节点上启动 MHA

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高可用集群_第28张图片
查看 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 的方式关闭。

MHA高可用集群_第29张图片
在这里插入图片描述
MHA高可用集群_第30张图片
故障模拟

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

在这里插入图片描述
MHA高可用集群_第31张图片
在这里插入图片描述
MHA高可用集群_第32张图片
MHA高可用集群_第33张图片
故障修复
修复mysql
在这里插入图片描述
修复主从
MHA高可用集群_第34张图片

#在原主库服务器 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;

MHA高可用集群_第35张图片
在 manager 节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)
MHA高可用集群_第36张图片
在 manager 节点上启动 MHA
在这里插入图片描述

你可能感兴趣的:(mysql,服务器,数据库)