MySQL 高可用

发布于:2025-06-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

什么是 MySQL 高可用

1、方案组成

2、优点

案例环境

案例实施

1.配置 mysql 双主复制

(1).在/etc/my.cnf 中修改或者增加下面内容

(2).重启MySQL服务

(3).登录 MySQL 程序,给从服务器授权。

(4).登录 MySQL,配置同步。

2.安装haproxy

(1).关闭防火墙和安全机制​编辑​编辑

(2).安装haproxy

(3).编辑 haproxy 配置文件​编辑​编辑

(4).检测配置文件,并启动服务​编辑

(5).测试​编辑

3.安装 keepalived

(1).安装 keepalived​编辑

(2).编辑haproxy配置文件

(3).编写一个监控脚本并启动 keepalived

客户端登录

测试故障转移


什么是 MySQL 高可用

        MySQL 高可用(High Availability)是指通过冗余设计,确保数据库服务在单节点故障、网络中断或硬件损坏等异常情况下,仍能持续对外提供服务,同时保证数据一致性。其核心目标是实现“零停机、零数据丢失” 的业务连续性。

1、方案组成

MySQL 主主复制 + Keepalived + HAProxy 的高可用方案
MySQL 主主复制 两台 MySQL 实例互为主从,双向同步数据,均支持读写操作提供几余和扩展能力
Keepalived 通过 VRRP 协议管理虚拟IP(VIP),监控 MySQL 状态,故障时自动将 Vip 漂移至存活节点,确保服务地址不变
HAProxy 作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除

2、优点

高可用性 Keepalived 实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障
读写扩展 主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力
灵活扩展 可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)

案例环境

主机 操作系统 IP 地址 应用
Master1 openEuler 24.03 192.168.10.101 Mysql8
Master2 openEuler 24.03 192.168.10.102 Mysql8
Keepalived1 openEuler 24.03 192.168.10.103 Keepalived、haproxy
Keepalived2 openEuler 24.03 192.168.10.104 Keepalived、haproxy

案例需求

本案例要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业务。

案例实现思路

  1. 安装 MySQL 数据库:
  2. 配置 MySQL互为主从;
  3. 安装 haproxy 软件并配置复制均衡;
  4. 安装 keepalived 软件并配置故障转移;
  5. 模拟 master 故障切换。

案例实施

在 Master1、Master2 服务器上安装 MySQL 数据库,数据库安装完后进行主从配置。

1.配置 mysql 双主复制

对于 MySQL 的主主架构,其实原理就是两台服务器 Master1、Master2 互为主从,双向复制,以下步骤在Master1、Master2同时执行

(1).在/etc/my.cnf 中修改或者增加下面内容

Master1

Master2

(2).重启MySQL服务

(3).登录 MySQL 程序,给从服务器授权。

[root@localhost ~]# mysql -uroot -ppwd123

mysql> create user 'myslave'@'192.168.10.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%';
Query OK, 0 rows affected (0.01 sec)

mysql> alter user 'myslave'@'192.168.10.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)
#MySQL 8.0默认使用caching_sha2_password 认证插件,将mysql_native_password 替换为旧版认证插件,确保从库能兼容

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1181 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
其中 File 列显示日志名,Position 列显示偏移量,这两个值在后面配置从服务器的时候需要。Slave 应从该点上进行新的更新。

(4).登录 MySQL,配置同步。

Master1

按主服务器结果更改下面命令中 master_log_file 和 master_log_pos 参数。

启动同步

查看slave状态,确保以下两个值为yes

Master2

按主服务器结果更改下面命令中 master_log_file 和 master_log_pos 参数。

启动同步

查看slave状态,确保以下两个值为yes

2.安装haproxy

        HAProxy 是一个开源的高性能负载均衡器和代理工具,支持 TCP/HTTP 应用的流量分发,具备健康检查、SSL终止、会话保持等功能,广泛应用于Web服务器集群、数据库读写分离及 API 网关场景,以高效稳定的特性提升系统可用性和扩展能力。

该阶段操作在 Keepalived1、Keepalived2 都要执行

(1).关闭防火墙和安全机制

(2).安装haproxy

(3).编辑 haproxy 配置文件

(4).检测配置文件,并启动服务

(5).测试

3.安装 keepalived

        Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断,常用于数据库、Web 服务等集群环境,提升系统可靠性并简化故障恢复流程。

该阶段操作在 Keepalived1、Keepalived2 都要执行

(1).安装 keepalived

(2).编辑haproxy配置文件

Keeppalived1 配置

添加监控脚本并启动 keepalived

[root@keepalived1 ~]# vim /etc/keepalived/chk.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];
then
        /etc/init.d/keepalived stop
fi 
[root@keepalived1 ~]# chmod +x /etc/keepalived/chk.sh 
[root@keepalived1 ~]# systemctl restart keepalived

Keeppalived12配置

(3).编写一个监控脚本并启动 keepalived

vim /etc/keepalived/chk.sh
 
###编辑内容###
#!/bin/bash
 
if [ $(ps -C haproxy --no-header | wc-l) -eq 0 ];
    then /etc/init.d/keepalived stop
        echo "keepalived已关闭"
fi
 
chmod +x /etc/keepalived/chk.sh

        此处两台主机均配置为 BACKUP,因此哪台先运行 keepalived,Vip 就在哪台上。本案例刚开始 Vip 运行在 keepalivedl 上
        在 keepalived1 测试査看 VIP(注意査看 VIP 只能用 ip 命令,ifconfig 不显示Vip)

客户端登录

测试故障转移