栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

L14:超越分库分表-高可用与读写分离

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

L14:超越分库分表-高可用与读写分离

【目录】
 1.从单机到集群
 2.MySQL 主从复制*
 3.MySQL 读写分离*
 4.MySQL 高可用*
 5.总结回顾与作业实践
一 单机到集群 单机问题

随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 面临:
1、容量有限,难以扩容
2、读写压力,QPS 过大,特别是分析类需求会影响到业务事务
3、可用性不足,宕机问题

单机 MySQL 的技术演进

二 MySQL 主从复制* 主从复制原理:主库写 bin log + 从库 relay log


2000年,MySQL 3.23.15版本引入了复制
2002年,MySQL 4.0.2版本分离 IO 和 SQL 线程,引入了 relay log
2010年,MySQL 5.5版本引入半同步复制
2016年,MySQL 在5.7.17中引入 InnoDB Group Replication

Bin log格式
  • ROW
  • Statement
  • Mixed
主从复制方式 1.异步复制

异步复制:传统主从复制–2000年,MySQL 3.23.15版本引入了 Replication

2.半同步复制

至少能够保证有一个从库同步成功

3.组复制

主从复制实现

(待补充)

主从复制的缺点
  1. 主从延迟问题
  2. 应用侧需要配合读写分离框架
  3. 不解决高可用问题
三 MySQL 读写分离*

借助主从复制的实现,我们可以有多个MySQL服务器实例,可以借助这个新的集群,改进业务系统数据处理能力,即配置多个数据源,实现读写分离;

读写分离-动态切换数据源版本1.0

1、基于 Spring/Spring Boot,配置多个数据源(例如2个,master 和 slave)
2、根据具体的 Service 方法是否会操作数据,注入不同的数据源,1.0版本
3、改进一下1.1:基于操作 AbstractRoutingDataSource 和自定义注解 readonly 之类的,简化自动切换数据源
4、改进二下1.2:支持配置多个从库;
5、改进三下1.3:支持多个从库的负载均衡

读写分离-数据库框架版本2.0
  1. 分析前一版本“动态切换数据源”有什么问题?
    1.1 侵入性还是较强
    1.2 降低侵入性会导致”写完读”不一致问题
  2. 改进方式,ShardingSphere-jdbc 的 Master-Slave 功能
    2.1 SQL 解析和事务管理,自动实现读写分离
    2.2 解决”写完读”不一致的问题
读写分离-数据库中间件版本3.0
  1. 分析前一版本“框架版本”有什么问题?
    1.1 对业务系统还是有侵入
    1.2 对已存在的旧系统改造不友好
  2. 改进方式,MyCat/ShardingSphere-Proxy 的 Master-Slave 功能
    2.1 需要部署一个中间件,规则配置在中间件
    2.2 模拟一个 MySQL 服务器,对业务系统无侵入
四 MySQL 高可用* 1.高可用定义

高可用意味着,更少的不可服务时间。一般用SLA/SLO衡量。
1年 = 365天 = 8760小时
99 = 8760 * 1% = 8760 * 0.01 = 87.6小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟

2.为什么需要高可用

1、读写分离,提升读的处理能力
2、故障转移,提供 failover 能力

加上业务侧连接池的心跳重试,实现断线重连,业务不间断,降低 RTO 和 RPO;

什么是 failover,故障转移,灾难恢复?
容灾:热备与冷备
对于主从来说,简单讲就是主挂了,某一个从,变成主,
整个集群来看,正常对外提供服务
常见的一些策略:
1、多个实例不在一个主机/机架上
2、跨机房和可用区部署
3、两地三中心容灾高可用方案

3.高可用方式 3.1 主从手动切换

如果主节点挂掉,将某个从改成主;重新配置其他从节点。修改应用数据源配置。

缺点:可能数据不一致;需要人工干预;代码和配置的侵入性;

3.2 主从手动切换

用 LVS+Keepalived 实现多个节点的探活+请求路由。
配置 VIP 或 DNS 实现配置不变更

缺点:1.手动处理主从切换;2.大量的配置和脚本定义

3.3 MHA

MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司的 youshimaton(现就职于 Facebook 公司)开发,是一套优秀的作为 MySQL 高可用性环境下故障切换和主从提升的高可用软件。

基于 Perl 语言开发,一般能在30s内实现主从切换。切换时,直接通过 SSH 复制主节点的日志

缺点:1.需要配置SSH信息;2.至少3台服务器

3.4 MGR

如果主节点挂掉,将自动选择某个从改成主;无需人工干预,基于组复制,保证数据一致性

缺点:1. 外部获得状态变更需要读取数据库;2. 外部需要使用 LVS/VIP 配置;
特点:

适用场景1:适用于动态添加数据库节点的场景

适用场景2:高可分片

3.5 MySQL Cluster


3.6 Orchestrator

如果主节点挂掉,将某个从改成主;

基于go语言开发,实现了中间件本身的高可用;

五 总结
  • 单机数据库技术演进
  • MySQL主从复制
  • MySQL读写分离
  • MySQL高可用
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号