mysql高可用

目录

案例概述

案例前置知识点

什么是mysql高可用

方案组成

优势

案例实施

配置mysql双主复制

安装haproxy

安装keepalived

测试故障转移


案例概述

目前MySQL已经成为市场上主流数据库之一,考虑到业务的重要性,MySQL数据库单点问题已成为企业网站架构中最大的隐患。随着技术的的发展,MHA的出现就是解决MySQL单点的问题。另外随着企业数据量越来越庞大,数据库的压力又成为企业的另一个瓶颈,MySQL多主多从架构的出现可以减轻MySQL本身的压力。本章将主要围绕 "MySQL主主复制+Keepalived+HAProxy"这一经典高可用架构展开,通过理论结合实践,解析如何通过开源工具实现数据库的故障自动转移、负载均衡和读写分离。

案例前置知识点

什么是mysql高可用

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

方案组成

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

MySQL主主复制:两台MySQL实例互为主从,双向同步数据,均支持读写操作,提供冗余和扩展能力。

Keepalived:通过VRRP协议管理虚拟 IP(VIP),监控MSQL状态,故障时自动将VIP漂移至存活节点,确保服务地址不变。

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

优势

高可用性:Keepalived实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。

读写扩展:主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力。

灵活扩展:可横向扩展HAProxy或MySQL节点,支持动态调整负载均衡策略(如轮询、权重)。运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群。

案例实施

配置mysql双主复制

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

log-bin=/usr/local/mysql/data/mysql-bin ;

binlog_format = MIXED

server-id=1

在另一台master中修改下面内容

log-bin=/usr/local/mysql/data/mysql-bin ;

binlog_format = MIXED

server-id=2

重启MySQL服务。

root@localhost \^\]# systemctl restart mysqld

登录MySQL程序,给从服务器授权。

root@localhost \^\]#mysql -u root -p mysql\> CREATE USER 'myslave' @ 192.168.10.%'IDENTIFIED BY 123456'; mysql\> GRANT REPLICATION SLAVE ON \*.\* TO 'myslave'@'192.168.10.%' IDENTIFIED BY '123456'; mysql\> FLUSH PRIVILEGES; mysql\> show master status;

登录MySQL,配置同步。

master1

mysql> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;

mysql> start slave;

msysql> show slave status\G

master2

mysql> change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157;

mysql> start slave;

msysql> show slave status\G

安装haproxy

关闭SELinux和防火墙

root@localhost\`\]# systemctl stop firewalld \[root@localhost\~\] setenforce 0

安装haproxy

root@localhost \^\]# dnf install haproxy

编辑haproxy配置文件

内容如下更改部分红色标注keep1,keep2配置相同

root@localhost\`\]# vim /etc/haproxy/haproxy.cfg mode tcp opton tcplog listen mysql "bind 0,0,0,0:3306" balance leastconn server mysqll 192.168.10.101:3306 check port 3306 maxconn 300 server mysq12 192.168.10.102:3306 check port 3306 maxconn 300

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

root@localhost \^\]# haproxy -c -f /etc/haproxy/haproxy.cfg \[root@localhost \^\]# systemctl restart haproxy

测试

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

root@localhost \^\]# mysql -utest -p123456 -h192.168.10.103 -P3306

安装keepalived

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

安装keepalived

root@localhost \^\]# dnf install keepalived

编辑haproxy配置文件

Keeppalivedl配置,红色标注为两台不同之处

root@localhost\~\]#cp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf \[root@localhost \^\]# vim /etc/keepalived/keepalived.conf global_defs { router id r1 } nopreempt interface ens33 virtual_router_id 51 priority 100 virtual ipaddress{ 192.168.10.100 } notify_backup "/etc/init.d/haproxy restart notify_fault "/etc/init.d/haproxy stop }

添加监控脚本并启动keepalived

root@localhost \^\]# vim /etc/keepalived/chk. sh #!/bin/bash if \[ $(ps -C haproxy --no-header \| wc -1) -eq 0 \]; ther /etc/init.d/keepalived stop fi \[root@localhost \^\]# chmod +x /etc/keepalived/chk.sh \[root@localhost \^\]# systemctl start keepalived

在keepalivedl测试查看VIP

root@localhost \^\]# ip a valid lft forever preferred lft forever inet 192.168.10.100/32 scope global ens33

编测试使用VIP连接mysql

root@localhost \^\]# mysql -utest -p123456 -h192.168. 10.100

测试故障转移

root@localhost\~\]# ping 192.168.10.101 关闭master1主机,测试结果为主机不可达 \[root@localhost \^\]# mysql -utest -p123456 -h192.168. 10.100

关闭keepalved1测试使用vip能否正常访问mysql数据库

root@localhost \^\]# ip a inet 192.168. 10. 104/24 brd 192.168.10.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.10.100/32 scope global ens33 \[root@localhost\~\]#mysql -utest -p123456 -h192.168.10.100

相关推荐
liliangcsdn1 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)7 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)7 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
@yanyu6667 小时前
idea中配置tomcat
java·mysql·tomcat
安当加密8 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a8 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽8 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康8 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
longgyy8 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
ytttr8739 小时前
C# 仿QQ聊天功能实现 (SQL Server数据库)
数据库·oracle·c#