目录
MHA
MHA全称是MySQL Master High Availability,它是一款开源的高可用程序,专门为MySQL的主从复制架构设计,提供了自动化的主节点故障转移功能。
概念
- 是一套优秀的MySQL高可用环境下故障切换和主从复制的软件
- MySQL故障过程中,MHA能做到0-30秒内自动完成故障切换
MHA的组成
- MHA Manager(管理节点)
- MHA Node(数据节点)
特点
- 在发生故障自动切换的过程中,MHA会尝试从故障的主服务器上保存二进制日志,最大程度保证数据不丢失
- 使用半同步复制,可以大大降低数据丢失的风险
- 目前MHA支持一主多从架构,最少3台服务器,也就是一主两从
案例介绍
(1)案例需求
本案例要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业务。
(2)案例实现思路
- 安装MySQL 数据库
- 配置MySQL一主两从
- 安装MHA软件
- 配置无密码认证
- 配置MySQL MHA 高可用
- 模拟master故障切换
(3)案例拓扑图
(4)案例环境
主机 |
操作系统 |
IP 地址 |
角色 |
服务器 |
CentOS7.9 |
192.168.10.101 |
管理节点,安装 node、manager 组件 |
服务器 |
CentOS7.9 |
192.168.10.102 |
Master 节点,安装 node 组件 |
服务器 |
CentOS7.9 |
192.168.10.103 |
Slave 节点,安装 node 组件 |
服务器 |
CentOS7.9 |
192.168.10.104 |
Slave 节点,安装 node 组件 |
测试机 |
CentOS7.9 |
192.168.10.105 |
作为客户端测试结果 |
案例步骤
基本环境配置
关闭防火墙和内核安全机制
打开除了测试机的其他四台作为服务器的主机,都连接上XShell
因为接下来有相同操作,右键终端空白处给4台数据库主机都开启会话同步
使用disable永久关闭防火墙,修改selinux文件来永久关闭内核安全机制,为了实现每个主机都能通过名称的方式互相通信,在hosts文件末尾追加以下内容
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled # 修改参数为disabled
[root@localhost ~]# vim /etc/hosts
192.168.10.101 MHA-manager
192.168.10.102 Mysql1
192.168.10.103 Mysql2
192.168.10.104 Mysql3
# 保存并退出
安装数据库
此时需要安装数据库,而101作为管理服务器的角色,用不到数据库所以不用安装,把101的会话同步关掉,然后安装数据库软件包
此时会话同步的主机应该是102、103、104,101是关闭会话同步的
在102输入
使用yum为3个主从服务器安装mariadb服务端
[root@localhost ~]# yum -y install mariadb-server
修改mysql的配置文件,在[mysqld]单元下方添加以下内容
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id=102
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true
- relay-log-purge:如果=1,表示在SQL线程执行完中继日志的语句后,删除掉该中继日志,如果=0,执行完语句后保留该日志
- 在高可用环境中,每一个节点都有可能成为主节点,所以要长期保存生成的日志信息,所以=0
- log-slave-updates:允许从节点同步主节点的数据并扩展给其他节点
因为开着会话同步,但是server-id的参数又不能重复,所以先关闭全部会话同步,然后修改另外两个主机的server-id
# 103主机改为:
server-id=103
# 104主机改为:
server-id=104
授权
然后再开启会话同步,和刚才一样,把101的会话同步关闭,只同步三台服务器的会话
在102输入
启动mariadb数据库,设置密码,然后登录进去
[root@Mysql1 ~]# systemctl start mariadb
[root@Mysql1 ~]# mysqladmin -uroot password 'pwd123'
主从复制的授权
使用grant语句授权给从服务器可以访问所有库的所有表
MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
高可用MHA的授权
指定网段和主机名的连接权限
MHA是整个架构的管理者,所以授权设为all,因为mha的权限很大。所以mha的权限应该授权给装有MHA的主机来使用
如果要基于IP地址来连接:可以指定为IP地址
如果要基于主机名来连接:可以指定为主机名,比如:'mha'@'Mysql1'
如果觉得192.168.10.0的网段范围太大了,可以单独指定多个IP设置
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
MariaDB [(none)]> flush privileges; # 刷新权限
输入完上方的语句就可以关闭会话同步了