Seal^_^头像
MySQL MHA高可用架构搭建与故障自动切换实战:从零到一构建数据库高可用解决方案封面图

MySQL MHA高可用架构搭建与故障自动切换实战:从零到一构建数据库高可用解决方案

一、MySQL MHA 架构概述:理解高可用核心组件

MySQL MHA(Master High Availability)是一套优秀的 MySQL 高可用解决方案,能在 Master 节点故障时,自动将其中一台 Slave 提升为新的 Master,并保证数据的一致性。MHA 架构主要由以下几个核心组件构成:

  1. Master:主数据库,处理写操作,其 Binlog 被所有 Slave 复制。
  2. Slave:从数据库,通过复制 Master 的 Binlog 来同步数据,通常配置为只读。
  3. MHA Node:部署在每个 MySQL 节点(Master 和 Slave)上的一个轻量级脚本集合,负责监控、故障转移时执行脚本等。
  4. MHA Manager:部署在一台独立服务器上的管理节点,负责检测 Master 节点健康状态,协调故障转移,并通知客户端更新 VIP(虚拟 IP)。


首先,我们通过一个流程图来直观展示 MHA 架构中各组件的协作关系。


正常异常

客户端请求

VIP 路由

Master

Slave1

Slave2

MHA Node

MHA Manager

监控 Master 状态

记录 Binlog 位置

发起故障切换

选择新 Master

执行数据补偿

更新 VIP

通知客户端


该图清晰地展示了 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 基础配置

  1. 关闭防火墙和 Selinux:确保各节点间网络互通。

```bash

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

```

  1. 配置主机名与 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

```

  1. 安装并配置 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 节点来执行命令,因此需要配置免密登录。

  1. 在 MHA Manager 节点上生成 SSH 密钥对。

```bash

ssh-keygen -t rsa

```

  1. 将公钥复制到所有 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

```

  1. 验证免密登录是否成功。

```bash

ssh root@master "hostname"

ssh root@slave1 "hostname"

ssh root@slave2 "hostname"

```


MHA Node 的配置相对简单,主要任务是确保 Manager 能通过 SSH 无缝管理各个数据库节点。其核心配置流程如下所示。


安装 MHA Node

配置 SSH 免密登录

启动 MHA Node 服务

验证 Manager 连接


四、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,需要创建并配置。

  1. 创建配置文件目录。

```bash

mkdir -p /etc/mha

```

  1. 创建 app.cnf 文件。

```bash

vim /etc/mha/app.cnf

```

  1. 在 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

创建配置文件目录

编写 app.cnf

配置 SSH 免密登录

启动 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 的自动切换流程如下所示。


VIP ScriptClientSlave2Slave1MasterMHA ManagerVIP ScriptClientSlave2Slave1MasterMHA Manager检测到故障通知故障通知故障选择为新 Master执行数据补偿同步新 Master 信息更新 VIP 到 Slave1客户端通过新 VIP 访问


这个时序图详细描绘了 MHA 从检测到故障到完成切换的完整自动化流程,确保了服务的高可用性。


5.3 验证切换结果

  1. 检查新 Master:在 Slave1 节点上查看是否已成为新的 Master。

```bash

mysql -u root -p -e "SHOW MASTER STATUS;"

```

  1. 检查 VIP:在 MHA Manager 节点上检查 VIP 是否已切换到 Slave1。

```bash

ip a | grep 192.168.1.100

```

  1. 检查日志:查看 MHA Manager 的日志文件,确认切换过程。

```bash

tail -f /var/log/mha_manager.log

```


六、总结与优化建议:提升 MHA 架构稳定性

通过以上步骤,我们成功搭建了 MySQL MHA 高可用架构,并验证了其自动故障切换功能。MHA 提供了强大的自动化能力,但在生产环境中,我们还可以通过以下方式进行优化:


  1. 监控与告警:将 MHA Manager 的状态和切换事件接入监控系统(如 Zabbix、Prometheus),并设置告警。
  2. VIP 脚本优化:默认的 master_ip_failover 脚本功能简单,可以根据实际网络环境(如 Keepalived)进行定制。
  3. 定期演练:定期进行故障切换演练,确保 MHA 配置和脚本的有效性。
  4. 数据一致性检查:虽然 MHA 保证了数据一致性,但仍建议定期进行数据校验。


我们可以用状态图来表示 Master 节点在 MHA 架构中的不同状态及其转换条件,帮助我们理解其生命周期。


Master 宕机检测超时MHA 切换完成新 Master 稳定

正常运行

故障检测

故障

故障恢复


状态图帮助我们理解 Master 节点在不同阶段的状态变化,以及触发这些变化的条件,从而更好地进行故障排查和预防。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_41840843/article/details/168144452

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--