mysql高可用

1.1什么是 MySQL 高可用

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

1.2方案组成

MySQL 主主复制 + Keepalived + HAProxy 的高可用方案由三部分组成:

MySQL 主主复制 :两台 MySQL 实例互为主从,双向同步数据,均支持读写操作,提供几余和扩展能力。
Keepalived :通过 VRRP 协议管理虚拟 IP(VIP),监控 MySQL 状态,故障时自动将 VIP 漂移至存活节点,确保服务地址不变。

:作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除。

1.3优势
高可用性: Keepalived实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。
读写扩展 :主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力。
灵活扩展:可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)。运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群

(5)登录 MySQL 程序,创建测试用户,后续验证实验时使用。(Master1、Master2都执行)

2.配置 mysql 双主复制

对于 MySQL 的主主架构,其实原理就是两台服务器 Master1、Master2 互为主从,双向复制

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

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

(3)重启 MySQL 服务。(Master1、Master2 都执行)

(4)登录 MySQL 程序,给从服务器授权。(Master1、Master2 都执行)

(5)登录 MySQL,配置同步。(Master1、Master2 都执行)

Master1

按主服务器结果更改下面命令中 master_log file 和 master log pos 参数。

启用同步

查看 Slave 状态,确保以下两个值为 YES

3.安装 haproxy

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

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

(1)关闭SELinux和防火墙

(2)安装haproxy

内容如下更改部分红色标注(Keepalived1,Keepalived2 配置相同)

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

(5)测试

使用测试用户 test,访问 haproxy 的代理端口登录 mysq1

root@localhost \~\]#mysql -utest -p123456 -h192.168.10.103 -P3306 4.安装 keepalived Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断,常用于数据库、Web 服务等集群环境,提升系统可靠性并简化故障恢复流程。 (1)关闭 SELinux和防火墙 ![](https://i-blog.csdnimg.cn/direct/6af0183875b740a1bcf8dd6de5faa9f8.png) (2)安装 keepalived ![](https://i-blog.csdnimg.cn/direct/3973022b62d74f3694a4445c3bd59bf3.png) (3)编辑 haproxy配置文件 Keeppalived1 配置,红色标注为两台不同之处,需要注意 ![](https://i-blog.csdnimg.cn/direct/0060846b5aa44617b049ee21bfce6dc5.png) 添加监控脚本并启动 keepalived \[root@localhost \~\]#vim /etc/keepalived/chk.sh ![](https://i-blog.csdnimg.cn/direct/af977ccd06224afeb5927c6db83c70b6.png) \[root@localhost \~\]#chmod +x /etc/keepalived/chk.sh \[root@localhost \~\]#systemctl start keepalived Keeppalived2配置,红色标注为两台不同之处,需要注意 ![](https://i-blog.csdnimg.cn/direct/61fc35d8b2874110a9f7af5f6e897c1e.png) ![](https://i-blog.csdnimg.cn/direct/e1f0a43653514549b2665a0dc853dc4a.png) 添加监控脚本并启动 keepalived \[root@localhost \~\]#vim /etc/keepalived/chk.sh \[root@localhost \~\]#chmod +x /etc/keepalived/chk.sh \[root@localhost \~\]#systemctl start keepalived \[root@localhost \~\]#ip a ![](https://i-blog.csdnimg.cn/direct/5f09c774489f4dd7a7fe74b84a2ae9e8.png) (4)编测试使用 VIP连接 mysq1 \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100 5.测试故障转移 1.关闭 master1 主机,测试使用 vip 能否正常访问 mysql 数据库关闭 master1后,因为 master1、master2 通过 haproxy 负载均衡,master1关闭后,haproxy 检测其状态异常,会从负载中移除,不进行流量转发,依然可以通过 vip 访问 mysql,实现 mysql 的高可用 \[root@localhost \~\]#ping 192.168.10.101 \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100 2.接着关闭 keepalived1,测试使用 vip 能否正常访问 mysql 数据库 关闭 keepalived1 后,keepalived 检测到主节点离线,VIP 192.168.10.100会漂移至 keepalived2 节点,mysql 依然可以访问 \[root@localhost \~\]#ip a ![](https://i-blog.csdnimg.cn/direct/78fa48dc7038474b8b4daabc66bf7a44.png) \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100

相关推荐
why1515 小时前
微服务商城-商品微服务
数据库·后端·golang
柒间5 小时前
Elasticsearch 常用操作命令整合 (cURL 版本)
大数据·数据库·elasticsearch
YUJIANYUE7 小时前
发立得信息发布系统房屋信息版(php+mysql)V1.0版
mysql·php
远方16097 小时前
18-Oracle 23ai JSON二元性颠覆传统
数据库·oracle·json
星辰离彬8 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
java·spring boot·后端·sql·mysql·性能优化
jllllyuz9 小时前
如何为服务器生成TLS证书
运维·服务器·数据库
rit84324999 小时前
ELK实现nginx、mysql、http的日志可视化实验
mysql·nginx·elk
面朝大海,春不暖,花不开9 小时前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
伍六星9 小时前
Flask和Django,你怎么选?
数据库·django·flask