数据库架构

数据库架构

主从复制如何工作

实现原理

在这里插入图片描述

  • 打开二进制日志bin log
  • 主库db的更新事件(update、insert、delete)被写到binlog
  • 主库创建一个binlog dump thread,把binlog的内容发送到从库
  • 从库启动并发起连接,连接到主库
  • 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
  • 从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

异步复制
在这里插入图片描述

半同步复制
需要从服务器在等待时间内进行回答,否则降级为异步复制

在这里插入图片描述

主从复制配置

master

slaver
在这里插入图片描述

读写分离

在这里插入图片描述

如何支持事务

  • client将读或写请求路由到不同的master或slave上,提高QPS
  • 如果读操作是为了写操作,则在client上开启事务

读库延迟问题怎么处理
client向master提交了事务,master回复事务已经成功,但是没有同步到slave,只能保持最终一致性

  • 解决方式1:让client等一等,等待master与slave同步
  • 解决方式2:将需要写完之后立马读的数据强制转接到master上(读操作打上事务标签)

主从切换事务
master宕机时,将slave提升为master,并且切换client
风险:bin log来不及处理,来不及完成同步
解决:半同步方案,master只有收到至少一个slave的确认消息后再对客户端进行回复,master宕机后寻找最新的slave

半同步风险: slave同步ack丢失
在这里插入图片描述
再解决:2PC,MYSQL没有,因为影响性能

分库分表

垂直拆分

join操作,小表驱动大表
在这里插入图片描述

水平拆分:分库分表

QPS、TPS打散

按照user_id进行打散,分库分表
在这里插入图片描述
按照时间戳进行分库分表
按照Item搞到对应的搜索引擎中

基于GTID方式的复制和基于日志点的复制

基于日志点的复制

从主服务器的哪个二进制日志的偏移量进行增量同步,如果指定错误会造成遗漏或重复。
随着事务的提交,二进制文件和偏移量是不断改变的,Master宕机,很难找到正确的文件名和偏移量

  • 传统的主从复制方式
  • slave请求Master的增量日志依赖于日志偏移量
  • 配置链路时需指定master_log_file和master_log_pos参数
GTID复制

从服务器会告诉主服务器,已经在从服务器上已经执行完了哪些gtid值,然后主库会把从库未执行的事务gtid值发送给从库执行。同一个事务只在指定的从库上执行一次,主服务器宕机后,可以通过事务ID比较出哪一台S上的事务更接近主服务器的状态,从而选举出最合适的M

  • GTID全局事务ID(集群范围内):source_id:transcation_id, s表示M的id,t表示事务的id
  • Slave增量同步Master的数据依赖于其未同步的事务ID,记录哪些事务还没有同步到s上
  • 配置复制链路时,s可以根据已经同步的事务ID继续自动同步
    在这里插入图片描述
    在这里插入图片描述

MMM和MHA两种高可用架构的优缺点

MMM与MHA的作用

  • 对主从复制集群中的Master的健康状况进行监控
  • 当Master宕机后把写VIP迁移到新的Master(VIP标识Master迁移到新的Master)
  • 重新配置集群中的其他Slave对新Master的同步
MMM(Master-Master replication manager)

是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。
在这里插入图片描述
读VIP可以在SLAVE之间进行迁移,写VIP只能在主和主备之前进行迁移(主服务器宕机时就适用主备),从服务器出现宕机,则也迁移到其他从服务器上
在这里插入图片描述
MMM_monitor服务器用于监控整套系统

MMM故障转移过程:

Slave服务器

  • 完成主上已复制日志的恢复
  • Change Master命令配置新Master(主备)

Master服务器上的操作

  • 关闭 read_only
  • 迁移写VIP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MMA(Master HA)

在这里插入图片描述
MASTER宕机时,从几个从服务器中选出最接近MASTER的服务器作为新的MASTER
在这里插入图片描述
MHA故障恢复

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何减小主从复制的延迟

在这里插入图片描述

  • 大表DDL的操作,在Master上执行:1.把大数据化为小事务 2.适用pt-online-schema-change工具进行DDL操作,建设新表,对新表修改,新表修改完毕后,修改新表名字,并删除原始表
  • bin_log,网络延迟:1.减小单次事务处理的数据量以减小产生的日志文件大小2.减少需要同步的slave数量
  • 主上多线程并发写入,从上单线程恢复引起的延迟,1.适用mysql5.7后的多线程复制,2.MGR复制架构
MGR(全新的复制技术)
  • Mysql Group Replication
  • 官方推出的一种基于Paxos协议的复制
  • 不同于异步复制的多Master复制集群

在这里插入图片描述
多主模式:获得请求的节点对其他节点进行广播,都收到消息后才可以处理,多个节点可以同时处理前端的写请求
在这里插入图片描述
单主模式:只有一个可以处理写请求
在这里插入图片描述
多主模式:都可以处理写请求
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何解决数据库读写负载大的问题
  • 读负载大:增加slave,读写分离或增加中间层反向代理
    在这里插入图片描述

  • 写负载大:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值