当前位置: 首页 > news >正文

MySQL MHA

目录

1.什么是 MHA

2.MHA 的组成

3.MHA 的特点

4.搭建 MySQL MHA

环境设置

配置 MySQL 主从复制

1. 修改 MySQL 配置文件 (/etc/my.cnf)

2. 创建软链接

3. 配置主从复制

安装 MHA 软件

1. 安装依赖环境

2.安装 MHA Node 组件

3..安装 MHA Manager 组件

配置无密码 SSH 认证

1.在 Manager 节点上

2.在 Master 节点上

3.在 Slave1 节点上

4.在 Slave2 节点上

在 Manager 节点上配置 MHA

1. 准备脚本和目录

2. 修改 VIP 切换脚本 (/usr/local/bin/master_ip_failover)

3. 修改 MHA 配置文件 (/etc/masterha/app1.cnf)

4. 手动开启虚拟 IP

测试与启动 MHA

1. 测试 SSH 无密码认证

2.测试 MySQL 主从复制

3. 启动 MHA Manage

实验


1.什么是MHA

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

2MHA的组成

MHA Node(数据节点)
MHA Node运行在每台MySQL服务器上。
MHA Manager(管理节点)检测
MHA Manager可以单独部署在一台独立的机器上,管理多个master-slave集群;也可以部署在
一台slave节点上。
MHA Manager会定时探测集群中的master节点。当master出现故障时,它可以自动将最新数
据的slave提升为新的master然后将所有其他的slave重新指向新的master。整个故障转移过程
对应用程序完全透明。

3.MHA的特点

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

4.搭建MySQL MHA

环境设置

首先,在所有服务器(Manager, Master, Slave1, Slave2)上执行以下准备工作:
关闭防火墙和 SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# 永久关闭 SELinux 需修改 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 disabled,然后重启机器

安装 MySQL 5.7
在 Master、Slave1、Slave2 节点上安装 MySQL 5.7。

修改主机名

# 在 Master 节点执行

hostnamectl set-hostname Master

# 在 Slave1 节点执行

hostnamectl set-hostname Slave1

# 在 Slave2 节点执行

hostnamectl set-hostname Slave2

#在manager节点执行

hostnamectl set-hostname manager

配置 MySQL 主从复制

1. 修改 MySQL 配置文件 (/etc/my.cnf)

Master 节点 (10.8.0.11)

[mysqld]

server-id = 1

log_bin = master-bin

log-slave-updates = true

Slave1 节点 (10.8.0.22)

[mysqld]
server-id = 2
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

Slave2 节点 (10.8.0.45)

mysqld]
server-id = 3
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

修改完成后,在所有数据库节点上重启 MySQL 服务:systemctl restart mysqld

2. 创建软链接

在 Master、Slave1、Slave2 节点上都执行:

ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

3. 配置主从复制

在所有数据库节点进行 MySQL 授权

mysql -uroot -p
-- 在 MySQL 命令行中执行以下 SQL
grant replication slave on *.* to 'myslave'@'10.8.0.%' identified by '123456';
grant all privileges on *.* to 'mha'@'10.8.0.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'Master' identified by 'manager';
grant all privileges on *.* to 'mha'@'Slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'Slave2' identified by 'manager';
flush privileges;

在 Master 节点查看二进制日志文件名和位置

show master status;
-- 记录下 File 和 Position 的值,例如:master-bin.000001 和 1745

在 Slave1、Slave2 节点执行同步操作

change master to
master_host='10.8.0.11',
master_user='myslave',
master_password='123456',
master_log_file='master-bin.000001', -- 使用上一步记录的文件名
master_log_pos=1745; -- 使用上一步记录的位置
start slave;

在 Slave1、Slave2 节点查看同步状态

show slave status\G
-- 确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

设置从库为只读模式
在 Slave1、Slave2 节点上执行:

set global read_only=1;

安装 MHA 软件

1. 安装依赖环境

在所有服务器(包括 Manager)上安装:

yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN

2.安装 MHA Node 组件

在所有服务器上安装(Manager 组件依赖 Node 组件):

cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install

3..安装 MHA Manager 组件

仅在 Manager 节点 上安装:

cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install

配置无密码 SSH 认证

1.在 Manager 节点上

ssh-keygen -t rsa # 一路回车
ssh-copy-id 10.8.0.11
ssh-copy-id 10.8.0.22
ssh-copy-id 10.8.0.45

2.在 Master 节点上

ssh-keygen -t rsa
ssh-copy-id 10.8.0.22
ssh-copy-id 10.8.0.45

3.在 Slave1 节点上

ssh-keygen -t rsa
ssh-copy-id 10.8.0.11
ssh-copy-id 10.8.0.45

4.在 Slave2 节点上

ssh-keygen -t rsa
ssh-copy-id 10.8.0.11
ssh-copy-id 10.8.0.22

在 Manager 节点上配置 MHA

1. 准备脚本和目录

# 复制脚本
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

# 创建配置文件目录
mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/

2. 修改 VIP 切换脚本 (/usr/local/bin/master_ip_failover)

# 添加内容部分
my $vip = '192.168.10.200'; # 虚拟 IP 地址
my $brdc = '192.168.10.255'; # 广播地址
my $ifdev = 'ens33'; # 绑定的网卡
my $key = '1'; # 虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";

注意:请根据您的实际网络环境修改 $vip, $brdc, $ifdev 等变量

3. 修改 MHA 配置文件 (/etc/masterha/app1.cnf)

[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 10.8.0.22 -s 10.8.0.45
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=10.8.0.11
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=10.8.0.22
port=3306

[server3]
hostname=10.8.0.45
port=3306

4. 手动开启虚拟 IP

在 Master 节点上手动添加 VIP:

/sbin/ifconfig ens33:1

测试与启动 MHA

1. 测试 SSH 无密码认证

在 Manager 节点 执行

masterha_check_ssh -conf=/etc/masterha/app1.cnf
# 最后输出 "All SSH connection tests passed successfully." 表示成功

2.测试 MySQL 主从复制

在 Manager 节点上执行:

masterha_check_repl -conf=/etc/masterha/app1.cnf

# 最后输出 "MySQL Replication Health is OK." 表示成功

3. 启动 MHA Manage

在 Manager 节点上执行:

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 &

4. 查看 MHA 状态

masterha_check_status --conf=/etc/masterha/app1.cnf
# 如果正常运行,会显示 "app1 (pid:xxxxx) is running(0:PING_OK), master: 10.8.0.11"

实验

manager节点上监控观察日志记录
tail -f /var/log/masterha/app1/manager.log
systemctl stop mysqld#在 Master节点master上停止mysql服务

故障修复步骤:
修复mysql
systemctl restart mysqld
修复主从
#在现主库服务器Mysql2slave1上) 查看二进制文件和同步点
show master status;
#在原主库服务器mysql1执行同步操作
change master to
3.在manager节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消 失)
4.在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 Manager:监控节点,负责检测主库状态并执行故障转移。
MHA Node:运行在 MySQL 服务器上的节点,负责保存二进制日志等。
VIP (10.8.0.200):对外提供服务的虚拟 IP,随主库角色漂移。
Failover Script:核心自动化脚本,负责执行 ifconfig 命令进行 IP 绑定与解绑。

⚠️ 遇到的挑战与排查过程

在实验过程中,直接使用了官方提供的示例脚本,导致了一系列 Perl 语法错误。这是学习 MHA 时最经典的“坑”。
错误一:编码与字符问题
现象:脚本中包含大量中文注释,导致 Perl 解释器报错 Unrecognized character。
解决:清理了脚本中的中文字符,或确保文件编码格式正确。
错误二:变量定义语法错误
现象:报错 Number found where operator expected。
原因:在定义 VIP 变量时,漏写了赋值符号或引号使用不当。
修正:将代码规范为 my $vip = '10.8.0.200';。
错误三:非代码文本混入
现象:脚本第 40 行出现 ens33:1 10.8.0.200 纯文本。
原因:从教程复制代码时,误将命令行的输出结果粘贴到了脚本逻辑中。
修正:删除了这些无效的文本行。
错误四:占位符未处理
现象:报错 Bareword "FIXME_xxx" not allowed。
原因:官方脚本预留的 FIXME 标记(提示用户在此处添加自定义逻辑)被当作代码执行。
修正:注释掉了第 96 行和 101 行的 FIXME 代码。

http://www.cnnetsun.cn/news/3860148.html

相关文章:

  • 从零设计高性能二进制通信协议:原理、实现与工程实践
  • uWebSockets跨平台编译指南:Linux/macOS/Windows环境配置与实战
  • 中企业网站建设怎么做好?中小企业网站建设实用指南与避坑手册
  • 前后端分离架构下的接口规范与文档体系实践
  • 深入解析C/C++程序入口:main函数的设计原理与实战应用
  • 昌平区网站建设怎么挑才不踩坑?老程序员手把手教你避坑指南
  • 3步解锁透明悬浮浏览器:Windows多任务处理的革命性解决方案
  • 组合逻辑电路实战:从真值表到电路图的设计与分析全流程
  • 重庆网站建设电话 怎么找才靠谱?老板们避坑指南与实战经验分享
  • 工业生产线沙盘模型多段灯带时序控制系统设计:基于STM32与Modbus RTU的连铸-热轧-镀锌全流程联动方案
  • 达梦备份任务
  • 武冈网站建设如何帮助本地中小型企业突破流量瓶颈实现低成本获客?
  • UE5体素开发实战:VoxelPlugin高效构建动态世界与性能优化
  • 从代码到图表:PlantUML在线编辑器如何重塑UML设计工作流
  • C语言进阶学习笔记:内存函数、结构体、共用体与文件操作
  • 零基础网站建设完全指南:从0到1搭建个人品牌网站的全流程解析
  • IGP快速重路由(FRR)原理与部署:从LFA到TI-LFA实现网络毫秒级切换
  • 系统性能瓶颈诊断:从负载与驱动能力失衡看稳定性设计
  • 债务催收公告登报怎么办理?实测4大渠道,避坑又省心!
  • 从0到1打造高质量多语言官网,探索专业做俄语网站建设的核心逻辑与实战避坑指南
  • VMware虚拟机磁盘压缩实战:释放vmdk文件占用的宿主机空间
  • PostgreSQL与pgAdmin 4实战指南:从安装配置到权限管理与性能优化
  • 解决Windows笔记本电脑睡眠、休眠模式耗电异常,导致没电关机且无法开机问题
  • 活动图与状态机在工作流设计中的实践指南
  • 揭秘北京网站建设 fim 的底层逻辑与实战避坑指南
  • 【国产大模型性能黑盒解密】:实测23个开源/闭源模型在C-Eval、Gaokao-Bench、CMMLU及企业级RAG场景下的真实表现差异
  • 硬件自动化测试入门:从SCPI指令到Python框架的实战指南
  • 浏览器资源拦截的架构设计与工程实践
  • 狼人杀咒狐角色深度解析:生存法则与胜利策略
  • 电子商务网站建设维护实训报告与实战经验复盘总结