目录
一:案例概述
1:案例前置知识点
1.1:什么是MySQL高可用?
MySQL高可用(High Availability, HA)是指通过技术手段确保MySQL数据库服务在出现硬件故障、软件故障或网络问题时,仍能持续提供服务,最大限度减少停机时间。核心目标是保证业务的连续性和数据的可靠性,通常通过冗余架构、故障自动检测和快速切换来实现。
1.2:方案组成
MySQL主主复制+Keepalived +HAProxy的高可用方案由三部分组成:
-
MySQL主主复制
-
两个MySQL节点互为主从,双向同步数据,确保数据一致性。
-
任一节点故障时,另一节点可继续提供写入服务。
-
-
Keepalived
-
实现虚拟IP(VIP)漂移,自动将流量切换到健康节点。
-
提供故障检测和主备切换能力。
-
-
HAProxy
-
作为负载均衡器,将读请求分发到多个MySQL节点,实现读写分离。
-
支持健康检查,自动屏蔽故障节点。
-
1.3:优势
-
高可用性
-
通过主主复制和Keepalived实现故障自动切换,减少服务中断时间(RTO)。
-
数据多副本存储,降低数据丢失风险(RPO)。
-
-
读写扩展
-
HAProxy将读请求均衡到多个节点,提升读性能。
-
主主复制支持双节点写入(需注意冲突处理)。
-
-
灵活扩展
-
可横向扩展读节点(如增加从库),提升整体吞吐量。
-
HAProxy支持动态添加/移除后端节点,适应业务增长。
-
2:案例环境
2.1:本案例环境
主机 | 操作系统 | IP地址 | 应用 |
master1 | openEuler 24.03 | 192.168.10.101 | mysql-8.0.36 |
master2 | openEuler 24.03 | 192.168.10.102 | mysql-8.0.36 |
keepalived1 | openEuler 24.03 | 192.168.10.103 | keepalived、haproxy |
keepalived2 | openEuler 24.03 | 192.168.10.104 | keepalived、haproxy |
2.2:案例实现思路
(1)安装MySQL数据库
(2)配置MySQL互为主从
(3)安装haproxy软件并配置复制均衡
(4)安装keepalived软件并配置故障转移
(5)模拟master故障切换
二:案例实施
1:配置MySQL双主复制
(1)配置master1
编辑脚本/etc/my.cnf:
server-id=1
log-bin=/usr/local/mysql/data/mysql-bin
binlog-format=MIXED
log-slave-updates=1
创建账号:
mysql -uroot -ppwd123
create user 'myslave'@'%' identified by '123456';
grant replication slave on *.* to 'myslave'@'%';
alter user 'myslave'@'%' identified with mysql_native_password by '123456';
flush privileges;
show master status;
配置同步:
change master to master_host='192.168.10.201',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1439;
验证:start slave;
show slave status\G;
(2)配置master2
编辑脚本/etc/my.cnf:
server-id=2
log-bin=/usr/local/mysql/data/mysql-bin
binlog-format=MIXED
log-slave-updates=1
创建账号:
mysql -uroot -ppwd123
create user 'myslave'@'%' identified by '123456';
grant replication slave on *.* to 'myslave'@'%';
alter user 'myslave'@'%' identified with mysql_native_password by '123456';
flush privileges;
show master status;
配置同步:
change master to master_host='修改IP',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=修改;
验证:start slave;
show slave status\G;
2:安装haproxy
HAProxy 是一个高性能的 开源负载均衡器和代理服务器,专门用于 TCP 和 HTTP 应用。以下是关于 HAProxy 软件包的定义:
免费的、开源的负载均衡解决方案
工作在 OSI 模型的第4层(TCP)和第7层(HTTP)
用于改善服务的可用性和可靠性
能够处理高并发连接(支持数万并发)
(1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(2)安装haproxy
dnf -y install haproxy
(3)编辑haproxy配置文件
vim /etc/haproxy/haproxy.cfg
要进行修改的:
global
log 127.0.0.1 local2
#chroot /var/lib/haproxy
defaults
mode tcp
option tcplog
删除defaults下所有内容,并重新添加:
lisiten mysql
bind 0.0.0.0:3306
balance leastconn
server mysql1 192.168.10.101:3306 check port 3306 maxconn 300
server mysql2 192.168.10.102:3306 check port 3306 maxconn 300
(4)检测配置文件,并启动服务
启动haproxy:
haproxy-c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy
(5)测试
验证haproxy:
netstat -anpt | grep haproxy
测试,访问haproxy的代理端口登录mysql:
101:
create user 'test'@'%' identified by 'pwd123';
grant replication slave on *.* to 'test'@'%';
alter user 'test'@'%' identified with mysql_native_password by 'pwd123';
flush privileges;
show master status;
105:
dnf -y install mariadb
mysql -utest -ppwd123 -h192.168.10.103(192.168.10.104) -p3306
3:安装keepalived
Keepalived 是一个用于实现 高可用性(HA) 和 负载均衡 的开源软件,主要基于 Linux 虚拟服务器 (LVS) 架构。以下是关于 Keepalived 软件包的定义:
轻量级的高可用解决方案
实现 VIP (虚拟IP) 漂移的核心工具
基于 VRRP (Virtual Router Redundancy Protocol) 协议
用于确保服务持续可用性的守护进程
(1)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(2)安装keepalived
dnf -y install keepalived
(3)编辑keepalived配置文件
cp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
103,104:
修改:
router-id LVS_01
#vrrp_strict #一旦启动严格模式,不允许进行单播
vrrp_script chk_haproxy {
script "/etc/keepalived/chk.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP #抢占模式,都为backup根据优先级来确定master
nopreempt #不抢占
priority 100
interface ens33
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_haproxy
}
}
#将后端的都删除掉,并添加下文:wq
systemctl restart keepalived
systemctl restart haproxy
验证haproxy:
netstat -anpt | grep haproxy
#编写检查脚本
vim /etc/keepalived/chk.sh
#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
chmod +x /etc/keepalived/chk.sh
systemctl start keepalived
ip a
(4)编测试使用VIP连接mysql
#编写测试使用VIP连接mysql
mysql -utest -ppwd123 -h192.168.10.100 -p3306
show databases;
4:测试故障转移
关闭master1主机测试使用VIP连接mysql
mysql -utest -ppwd123 -h192.168.10.100
ip a