当前位置: 首页 > news >正文

MySQL高可用

目录

一:案例概述

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地址应用
master1openEuler 24.03192.168.10.101mysql-8.0.36
master2openEuler 24.03192.168.10.102mysql-8.0.36
keepalived1openEuler 24.03192.168.10.103keepalived、haproxy
keepalived2openEuler 24.03192.168.10.104keepalived、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 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

(2)安装haproxy

dnf  -y install haproxy

(3)编辑haproxy配置文件

vim /etc/haproxy/haproxy.cfg要进行修改的:
globallog		127.0.0.1 local2#chroot	/var/lib/haproxy
defaultsmode	tcpoption     tcplog
删除defaults下所有内容,并重新添加:
lisiten mysqlbind 0.0.0.0:3306balance leastconnserver mysql1 192.168.10.101:3306 check port 3306 maxconn 300server 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根据优先级来确定masternopreempt       	#不抢占priority 100interface ens33virtual_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
fichmod +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

相关文章:

  • Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
  • Web服务器怎么压测?可用什么软件?
  • 嵌入式故障码管理系统设计实现
  • Unity3D Overdraw性能优化详解
  • CMS(plone / joomla 搭建测试)
  • 如何让 Google 收录 Github Pages 个人博客
  • Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?
  • redis数据结构-12(配置 RDB 快照:保存间隔和压缩)
  • 事件响应策略规范模版
  • 宇宙中是否存在量子现象?
  • Volcano 在 Kubernetes 生态中的介绍
  • rust语言,与c,go语言一样也是编译成二进制文件吗?
  • TLS 1.3黑魔法:从协议破解到极致性能调优
  • mac的Cli为什么输入python3才有用python --version显示无效,pyenv入门笔记,如何查看mac自带的标准库模块
  • 基于Scrapy-Redis的分布式景点数据爬取与热力图生成
  • GTS-400 系列运动控制器板卡介绍(三十六)--- 电机到位检测功能
  • TCP/IP 知识体系
  • STM32外设AD-DMA+定时读取模板
  • IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别
  • 在哪一个终端下运行有影响吗?pip install pillow
  • 受贿1.29亿余元,黑龙江省原副省长王一新被判无期
  • 普京召开俄乌谈判筹备会议,拉夫罗夫、绍伊古等出席
  • 7月纽约举办“上海日”,上海大剧院舞剧《白蛇》连演三场
  • 从能源装备向应急装备蓝海拓展,川润股份发布智能综合防灾应急仓
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 董军同法国国防部长举行会谈