MySQL高可用

发布于:2025-05-17 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

一:案例概述

1:案例前置知识点

1.1:什么是MySQL高可用?

1.2:方案组成

1.3:优势

2:案例环境

2.1:本案例环境

2.2:案例实现思路

二:案例实施

1:配置MySQL双主复制

(1)配置master1

(2)配置master2

2:安装haproxy

(1)关闭防火墙

(2)安装haproxy

(3)编辑haproxy配置文件

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

(5)测试

3:安装keepalived

(1)关闭防火墙

(2)安装keepalived

(3)编辑keepalived配置文件

(4)编测试使用VIP连接mysql

4:测试故障转移


一:案例概述

1:案例前置知识点

1.1:什么是MySQL高可用?

MySQL高可用(High Availability, HA)是指通过技术手段确保MySQL数据库服务在出现硬件故障、软件故障或网络问题时,仍能持续提供服务,最大限度减少停机时间。核心目标是保证业务的连续性和数据的可靠性,通常通过冗余架构、故障自动检测和快速切换来实现。

1.2:方案组成

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

  1. MySQL主主复制

    • 两个MySQL节点互为主从,双向同步数据,确保数据一致性。

    • 任一节点故障时,另一节点可继续提供写入服务。

  2. Keepalived

    • 实现虚拟IP(VIP)漂移,自动将流量切换到健康节点。

    • 提供故障检测和主备切换能力。

  3. HAProxy

    • 作为负载均衡器,将读请求分发到多个MySQL节点,实现读写分离。

    • 支持健康检查,自动屏蔽故障节点。

1.3:优势

  1. 高可用性

    • 通过主主复制和Keepalived实现故障自动切换,减少服务中断时间(RTO)。

    • 数据多副本存储,降低数据丢失风险(RPO)。

  2. 读写扩展

    • HAProxy将读请求均衡到多个节点,提升读性能。

    • 主主复制支持双节点写入(需注意冲突处理)。

  3. 灵活扩展

    • 可横向扩展读节点(如增加从库),提升整体吞吐量。

    • 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


网站公告

今日签到

点亮在社区的每一天
去签到