一、MySQL MHA 架构概述:理解高可用核心组件
MySQL MHA(Master High Availability)是一套优秀的 MySQL 高可用解决方案,能在 Master 节点故障时,自动将其中一台 Slave 提升为新的 Master,并保证数据的一致性。MHA 架构主要由以下几个核心组件构成:
- Master:主数据库,处理写操作,其 Binlog 被所有 Slave 复制。
- Slave:从数据库,通过复制 Master 的 Binlog 来同步数据,通常配置为只读。
- MHA Node:部署在每个 MySQL 节点(Master 和 Slave)上的一个轻量级脚本集合,负责监控、故障转移时执行脚本等。
- MHA Manager:部署在一台独立服务器上的管理节点,负责检测 Master 节点健康状态,协调故障转移,并通知客户端更新 VIP(虚拟 IP)。
首先,我们通过一个流程图来直观展示 MHA 架构中各组件的协作关系。
该图清晰地展示了 MHA 架构中 Master、Slave、MHA Node 和 MHA Manager 之间的数据流向与控制关系。客户端通过 VIP 访问 Master,MHA Manager 负责监控和故障切换,MHA Node 在各数据库节点上执行具体操作。
二、环境准备与基础配置:为高可用铺路
在搭建 MHA 架构之前,需要准备好硬件和软件环境,并进行必要的基础配置。
2.1 环境规划
我们规划三台服务器,分别作为 Master、Slave 和 MHA Manager。为了实现高可用,还需要一个 VIP(虚拟 IP)。
- Master:IP 192.168.1.10
- Slave1:IP 192.168.1.11
- Slave2:IP 192.168.1.12
- MHA Manager:IP 192.168.1.20
- VIP:IP 192.168.1.100
2.2 系统与 MySQL 基础配置
- 关闭防火墙和 Selinux:确保各节点间网络互通。
```bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```
- 配置主机名与 hosts 文件:在三台服务器上分别设置主机名,并确保可以通过主机名互相 ping 通。
```bash
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
```
编辑 /etc/hosts 文件,添加以下内容:
```
192.168.1.10 master
192.168.1.11 slave1
192.168.1.12 slave2
192.168.1.20 mha-manager
```
- 安装并配置 MySQL:在三台服务器上安装相同版本的 MySQL,并配置主从复制。确保主从复制功能正常工作。
三、MHA Node 安装与配置:构建自动化切换引擎
MHA Node 是 MHA 架构的基础,需要部署在所有 MySQL 节点上。
3.1 安装 MHA Node
在 Master、Slave1 和 Slave2 节点上执行以下命令安装 MHA Node。
# 下载 MHA Node 软件包
wget https://github.com/yoshinorim/mha4mysql-node/archive/v0.58.tar.gz
tar -xzf v0.58.tar.gz
cd mha4mysql-node-0.58
# 安装依赖
perl Makefile.PL
make
make install
3.2 配置 SSH 免密登录
MHA Manager 需要通过 SSH 连接到所有 MySQL 节点来执行命令,因此需要配置免密登录。
- 在 MHA Manager 节点上生成 SSH 密钥对。
```bash
ssh-keygen -t rsa
```
- 将公钥复制到所有 MySQL 节点(Master、Slave1、Slave2)。
```bash
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave2
```
- 验证免密登录是否成功。
```bash
ssh root@master "hostname"
ssh root@slave1 "hostname"
ssh root@slave2 "hostname"
```
MHA Node 的配置相对简单,主要任务是确保 Manager 能通过 SSH 无缝管理各个数据库节点。其核心配置流程如下所示。
四、MHA Manager 安装与配置:部署监控与切换中心
MHA Manager 是整个架构的大脑,负责监控和决策。
4.1 安装 MHA Manager
在 MHA Manager 节点上执行以下命令安装 MHA Manager。
# 下载 MHA Manager 软件包
wget https://github.com/yoshinorim/mha4mysql-manager/archive/v0.58.tar.gz
tar -xzf v0.58.tar.gz
cd mha4mysql-manager-0.58
# 安装依赖
perl Makefile.PL
make
make install
4.2 配置 MHA Manager
MHA Manager 的核心配置文件是 app.cnf,需要创建并配置。
- 创建配置文件目录。
```bash
mkdir -p /etc/mha
```
- 创建
app.cnf文件。
```bash
vim /etc/mha/app.cnf
```
- 在
app.cnf中添加以下内容:
```ini
[server default]
manager_log=/var/log/mha_manager.log
manager_workdir=/var/log/mha_manager
master_binlog_dir=/var/lib/mysql
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=your_mysql_root_password
ping_interval=3
remote_workdir=/tmp
repl_password=your_repl_user_password
repl_user=repl_user
secondary_check=1
ssh_user=root
user=root
[server1]
hostname=master
port=3306
candidate_master=1
[server2]
hostname=slave1
port=3306
[server3]
hostname=slave2
port=3306
```
candidate_master=1表示该节点有资格被选为新 Master。repl_user和repl_password是用于复制的 MySQL 用户。password是用于登录 MySQL 的 root 密码。
MHA Manager 的配置流程概括了其关键配置步骤,确保其能够正确监控和执行切换操作。
五、故障模拟与自动切换实战:验证高可用性
配置完成后,我们可以启动 MHA Manager 并模拟 Master 节点故障,验证其自动切换能力。
5.1 启动 MHA Manager
在 MHA Manager 节点上启动 MHA Manager。
nohup masterha_manager --conf=/etc/mha/app.cnf --remove_dead_master_conf --ignore_last_failover > /var/log/mha_manager.log 2>&1 &
检查 MHA Manager 状态。
masterha_check_ssh --conf=/etc/mha/app.cnf
masterha_check_repl --conf=/etc/mha/app.cnf
5.2 模拟 Master 故障
在 Master 节点上模拟故障,例如杀死 MySQL 进程。
ssh root@master "pkill -9 mysqld"
当 Master 节点故障时,MHA 的自动切换流程如下所示。
这个时序图详细描绘了 MHA 从检测到故障到完成切换的完整自动化流程,确保了服务的高可用性。
5.3 验证切换结果
- 检查新 Master:在 Slave1 节点上查看是否已成为新的 Master。
```bash
mysql -u root -p -e "SHOW MASTER STATUS;"
```
- 检查 VIP:在 MHA Manager 节点上检查 VIP 是否已切换到 Slave1。
```bash
ip a | grep 192.168.1.100
```
- 检查日志:查看 MHA Manager 的日志文件,确认切换过程。
```bash
tail -f /var/log/mha_manager.log
```
六、总结与优化建议:提升 MHA 架构稳定性
通过以上步骤,我们成功搭建了 MySQL MHA 高可用架构,并验证了其自动故障切换功能。MHA 提供了强大的自动化能力,但在生产环境中,我们还可以通过以下方式进行优化:
- 监控与告警:将 MHA Manager 的状态和切换事件接入监控系统(如 Zabbix、Prometheus),并设置告警。
- VIP 脚本优化:默认的
master_ip_failover脚本功能简单,可以根据实际网络环境(如 Keepalived)进行定制。 - 定期演练:定期进行故障切换演练,确保 MHA 配置和脚本的有效性。
- 数据一致性检查:虽然 MHA 保证了数据一致性,但仍建议定期进行数据校验。
我们可以用状态图来表示 Master 节点在 MHA 架构中的不同状态及其转换条件,帮助我们理解其生命周期。
状态图帮助我们理解 Master 节点在不同阶段的状态变化,以及触发这些变化的条件,从而更好地进行故障排查和预防。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_41840843/article/details/168144452




