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

《MySQL进阶(十一):集群架构与实践专题(一)》

MySQL集群

  • 核心定位:是高可用、高性能的数据库解决方案,用于满足大规模应用程序的数据访问需求。
  • 解决的关键问题
    • 性能提升:通过多服务器负载分散,提升数据库读写性能。
    • 高可用性:借助数据冗余和故障转移机制,单个节点故障不影响整体服务。
    • 扩展性:可通过添加节点水平扩展系统容量与处理能力。
    • 数据一致性:利用复制和同步技术,确保多节点间数据一致。
    • 读写分离:主从复制架构下,写操作集中在主库,读操作分散到从库,提升读性能。
    • 分库分表:解决单一数据库性能瓶颈,需中间件 / 框架支持数据分布与路由。
    • 负载均衡:将请求合理分配到不同节点,防止单个节点过载。
  • 适用场景:适用于高可用、高性能、高并发的场景,如电信、在线游戏、电子商务、社交网络等领域。

单机模式

  • 部署特点:采用少量服务器部署应用程序和数据库,数据库服务器仅一台,多个应用程序服务器(业务服务器)共同访问这一台数据库服务器。
  • 局限性
    • 性能瓶颈:所有数据都从单台数据库服务器获取,访问量增加时,数据库服务器访问压力剧增。
    • 可用性风险:若数据库服务器出现网络、IO 或系统故障等异常,会导致整个业务系统无法正常工作。
    • 扩展性不足:当应用访问量和数据量持续增长,单台数据库服务器将无法支撑业务系统,此时需将数据库部署为集群来解决这些问题。

集群模式

  • 核心特点:多台数据库服务器共同承担整个系统的数据读写负载。
  • 一主多从部署(以一主二从为例)
    • 数据写入:仅向主服务器写入数据。
    • 数据同步:从服务器通过数据同步机制,将主库新增数据复制到自身。
    • 数据读取:所有查询操作都访问从服务器,实现读写操作分散到不同服务器,有效降低单台服务器压力,提升业务系统性能。
  • 集群部署类型:有一主一从、一主多从、多主多从等多种类型,可根据业务场景选择,此处主要讲解一主多从的部署方式。

主从架构

在主从架构中分为两个⻆⾊,分别是主服务器(Master)和从服务器(Slave)

  • 主服务器(Master)主要负责写操作和简单查询操作
  • 从服务器(Slave)主要负责复杂查询操作和备份(从服务器和主服务器都保存完整的数据

主从复制核心原理

主从复制的目的是保证从服务器与主服务器数据一致。其基本原理是:主服务器将数据操作(DML 和 DDL)记录到二进制日志(binlog)中,从服务器复制主服务器的 binlog,并将其中记录的操作转换为 SQL 语句,在从服务器上重放(重新执行),从而确保从服务器数据与主服务器数据的一致性。

主从复制流程(结合图示步骤)

  1. 建立连接:从服务器(Slave)与主服务器(Master)建立连接。
  2. 主服务器执行数据操作:主服务器执行 insert、update、delete 等 DML 操作以及 DDL 操作。
  3. 主服务器写入 binlog:主服务器将这些数据操作记录写入二进制日志(Binary Log)。
  4. 从服务器读取 binlog:从服务器的 I/O 线程(I/O thread)从主服务器的 binlog 中读取操作信息。
  5. 从服务器写入中继日志:从服务器将读取到的操作信息写入中继日志(Relay Log)。
  6. 从服务器 SQL 线程读取中继日志:从服务器的 SQL 线程(SQL thread)读取中继日志中的操作信息。
  7. 从服务器重放操作:SQL 线程将这些操作在从服务器的数据库中重新执行,从而保证从服务器数据与主服务器数据一致。

涉及线程说明

在整个主从复制过程中涉及三个关键线程:

  • 主服务器的 Binlog Dump 线程:负责将主服务器的 binlog 内容发送给从服务器。
  • 从服务器的 I/O 线程:负责从主服务器读取 binlog,并写入从服务器的中继日志。
  • 从服务器的 SQL 线程:负责读取中继日志中的操作,并在从服务器数据库中执行,以实现数据同步。

中继日志的作用:

  • 断点追溯:它像 “进度条” 一样,记录了复制的位置,无论主从哪端出现故障,重启后都能精准找到恢复点,避免数据混乱或重复执行。
  • 异步解耦与灵活调度:既可以让从库 “边存边执行”(提升实时性),也可以 “先存后执行”(应对从库临时高负载,或实现延迟复制用于灾备)。
  • 并行执行优化:高版本 MySQL 能基于中继日志的结构,实现多线程并行回放 SQL,大幅提升从库的复制效率,这也是单线程直接执行难以做到的。

 3 大核心作用:

  1. 读写分离:主库写、从库读,缓解主库压力,提升并发。
  2. 数据备份 + 故障切换:从库存完整数据,主库故障可快速切换,避免数据丢失和业务中断。
  3. 业务隔离:从库承接备份、数据分析、测试等操作,不影响主库核心业务

高性能架构

MySQL⾼性能架构主要分为读写分离与数据库分⽚

一、读写分离

  • 架构逻辑:属于主从架构的应用,写操作集中在主服务器,读操作分散到从服务器;从服务器通过数据同步机制从主服务器获取数据。
  • 核心价值:将读写操作分流到不同服务器,减轻单台服务器的负载压力,提升数据库的读性能和整体吞吐量。

二、数据库分片

  • 架构逻辑:将原本单库中保存的完整数据,拆分为多个数据库服务分别保存部分数据(分片),多个分片数据库共同组成完整的数据集。例如原本一个数据库包含t_usert_ordert_goods三张表,分片后可将不同表分别存储在不同的数据库服务中。
  • 核心价值:解决单一数据库的性能瓶颈和存储容量限制,通过水平扩展多个数据库服务,提升系统的扩展性和处理大规模数据的能力。

  • 主从复制:如你看到的图中逻辑,主和从都存储完整的数据,从节点的数据是主节点的 “副本”,目的是实现数据冗余、读写分离(主写从读)、故障切换等。
  • 数据库分片:才是 “将完整数据拆分成多个部分,每个分片节点存储一部分数据,合起来才是完整数据集” 的架构,和主从复制的设计目标完全不同。

简单总结:主从是 “数据全量复制”,分片是 “数据拆分存储”,二者是独立的技术方案

实中主从复制和数据库分片经常一起使用

为什么要一起用?

  • 主从复制的短板:只能解决 “读写压力”(主写从读)和 “故障备份”,但解决不了 “数据量超大” 的问题 —— 如果单库数据达到 TB 级,就算有从库,查询和存储压力依然会很高。
  • 数据库分片的短板:只能解决 “数据量拆分”(分散存储压力),但每个分片本身没有冗余,一旦某个分片节点故障,会导致该分片的数据不可用。
  • 二者结合:既通过 “分片” 拆分数据、降低单库压力,又通过 “主从复制” 给每个分片做副本,实现冗余备份和读写分离,兼顾性能和可靠性。

Docker常⽤命令

实践:主从复制

核心应用场景

场景说明
数据备份和恢复实现实时数据备份,主服务器故障时从服务器接管服务,保证数据一致与业务连续
读写分离写操作由主服务器处理,读操作由从服务器处理,减轻主服务器压力,提升并发处理能力
负载均衡利用主从节点完整数据,通过策略将负载分摊到多个节点,提升系统负载均衡能力

系统特性提升

  • 可用性:主数据库故障时,从数据库立即接管,保障系统正常运行。
  • 可靠性:数据复制到多个数据库,避免单点故障。
  • 可扩展性:通过对等或分区复制,将大型数据库拆分多个小型数据库,提升系统扩展性。

核心逻辑总结

主从复制通过将数据存储在多个数据库服务器且保持数据一致,使多个数据库可同时对外提供服务,从而在数据安全、性能、系统稳定性等方面实现优化。

⼀主⼀从

⼀台主服务器主要负责读写操作,⼀台从服务器主要负责读操作或备份

⼀主多从

⼀台主服务器负责写操作,多台从服务器负责读操作和备份。从节点从主节点同步数据

⼀台主服务器负责写操作,多台从服务器负责读操作和备份。其中⼀个从节点从主节点同步数据, 并为其他从节点提供数据同步服务,这样可以降低主节点数据同步的压⼒

多主多从

以上的主从配置在实际中部署多套,避免单台故障

主从复制配置

架构图

以下⽰例中使⽤⼀主两从架构,当往主服务器中写⼊数据时,从服务器可以实现⾃动同步,查询时 可以在任⼀节点获取数

服务器规划

  • 在单台服务器上使⽤ Docker 模拟多台服务器的场景
  • 主从服务器IP⼀致,端⼝号不同

  • 主服务器:容器名bit-mysql-master 端⼝号 53306
  • 从服务器1:容器名bit-mysql-slave1 ,端⼝号 53307
  • 从服务器2:容器名 bit-mysql-slave2 ,端⼝号 53308 
  • 注意:启动docker前先关闭防⽕墙

    http://www.dtcms.com/a/605486.html

    相关文章:

  • github修改用户名和密码
  • 【数据结构入门手札】数据结构基础:从数据到抽象数据类型
  • Redis 大 Key 深度解析:危害、检测与治理实践
  • 最新电子商务购物商城系统源码 三端/H5+微信+安卓
  • MathPrompter:大幅提升大模型数学推理能力的创新方法
  • 如何在团队士气低落时重建信任与动力
  • SAP FICO应收毛利表分享
  • php音乐外链网站源码石家庄自助建站软件
  • Modbus RTU 转 Modbus TCP:借助数据采集提升罗克韦尔PLC工艺参数反馈实时性案例
  • 上海网站推广排名公司甘肃交通建设监理公司网站
  • 【服务器】查看IIS上某个网站的当前连接数
  • 【JavaEE初阶】IP协议-IP地址不够用了咋办?
  • 天洑受邀参加汽车零部件及智能制造产业产学研对接暨江苏省清华大学校友会
  • 内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案
  • vue3搭建项目yarn+vue3+webpack+less+element-plus
  • DVWA 靶场搭建流程
  • 迎接智能自动化:基于Dify工作流打造自主决策测试智能体
  • 如何建一个手机网站运城网址
  • 网站快照优化怎么做旅游网站功能简介
  • 线性代数 - 二阶矩阵的行列式、向量叉积(Cross product)的模长与平行四边形面积的关系
  • 【开题答辩全过程】以 基于 Spark 的音乐数据分析项目为例,包含答辩的问题和答案
  • 【云运维】Kubernetes安装(基于 Docker + Calico)
  • Python编程实战 - Python实用工具与库 - 操作Word:python-docx
  • 【日志处理方案大比拼】 Filebeat+Kafka+Flink+Spark+ES+HDFS VS ELK/AOP/RocketMQ/大厂方案
  • 网站建设需要哪些工具网站策划文案
  • 大学课程免费自学网站asp做留言板网站
  • 牛客周赛Round117--------题解2
  • 织梦网站后台视频教程环球资源网站
  • 服装零售企业CRM系统的选择,数字化运营的关键
  • 微软AI-900考试认证题库