MySQL高可用
========
MySQL的高可用也是同样的思路,首先要有多个MySQL实例提供服务,其次就是当某个实例挂掉时,可以自动切换流量。同时MySQL作为存储,节点之间数据同步也是一个难题(换句话说,有状态的服务都面临这个问题)。
一主一备:
=====
MySQL的各种高可用架构,都脱离不了MySQL实例之间的数据同步,因此,我们先介绍下最简单的一主一备架构下MySQL的数据同步流程。
上图是主从数据同步的一个示意图。
-
Master节点有Dump进程把binlog中的数据发送到Slave节点,
-
Slave节点有IO进程接收数据写入relay log,
-
Slave节点的SQL进程根据relay log写入数据。
这里还要延伸一点,binlog存在三种形式:Statement、Row、Mixed。
-
Statement:就是把每一条SQL记录到binlog中。
-
Row:是把每一行修改的具体数据记录到binlog中。
-
Mixed:MySQL会灵活的区分,需要记录sql还是具体修改的记录。
只记录SQL的话binlog会比较小,但是有些SQL语句在主从同步数据的时候,可能会因为选择不同的索引在数据同步过程中出现数据不一致。记录Row的话就可以保证主从同步不会存在SQL语意偏差的问题,同时Row类型的日志在做数据恢复的时候也比较容易,但是Row会导致binlog过大。
MySQL主从同步的几种模式:
===============
- 异步模式:
在这种同步策略下,主库按照自己的流程处理完数据,会直接返回结果,不会等待主库和从库之间的数据同步。 优点:效率高。 缺点:Master节点挂掉之后,Slave节点会丢失数据。
-
全同步模式: 主库会等待所有从库都执行完sql语句并ACK完成,才返回成功。 优点:有很好的数据一致性保障。 缺点:会造成数据操作延迟,降低了MySQL的吞吐量。
-
半同步模式:主库会等待至少有一个从库把数据写入relay log并ACK完成,才成功返回结果。 半同步模式介于异步和全同步之间。
半同步的复制方案是在MySQL5.5开始引入的,普通的半同步复制方案步骤如下图:
-
Master节点写数据到Binlog,并且执行Sync操作。
-
Master发送数据给Slave节点,同时commit主库的事务。
-
收到ACK后Master节点把数据返回给客户端。
这种数据提交模式叫: after_commit
after_commit 模式存在问题: 主库等待ACK时,事务已经commit,主库的其他事务可以读到commit的数据,这个时候如果Master崩溃,slave数据丢失,发生主从切换,会导致出现幻读。 为了解决这个问题MySQL5.7提出了新的半同步复制模式: after_sync
把主库的事务提交放到了ACK之后,避免了上述问题。 MySQL5.7还引入了 enhanced multi-threaded slave (简称MTS)模式, 当slave配置 slave_parallel_workers >0并且
global.slave_parallel_type =‘LOGICAL_CLOCK’,可支持一个schema下,slave_parallel_workers个worker线程并发执行relay log中主库提交的事务,极大地提高了主从复制的效率。 MySQL5.7半同步功能可以通过
rpl_semi_sync_master_wait_slave_count 参数配置slave节点ACK的个数,认为主从同步完成。
复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
- 第三部分:性能调优(JVM+MySQL+Tomcat)
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
87904)]
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
[外链图片转存中…(img-QtRinuvo-1721197087904)]
[外链图片转存中…(img-L5NFbOwL-1721197087905)]