MyCat-架构剖析-MyCat 主从切换实现 | 学习笔记

简介: 快速学习 MyCat-架构剖析-MyCat 主从切换实现

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat-架构剖析-MyCat 主从切换实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/757/detail/13300


MyCat-架构剖析-MyCat 主从切换实现

内容介绍:

一、MyCat 主从切换概述

二、MyCat 主从切换实现

 

MyCat 主从切换架构,这节我们主要从两个方面讲解,一方面是 MyCat 主从切换概述,另一方面是 MyCat 主从切换的实现。MyCat 主从切换指的是基于 MyCat 的读写分离衍生出来的。

 

一、MyCat 主从切换概述

MyCat 实现 MySQL 读写分离的目的在于降低单节点数据库的访问压力,原理就是让主数据库执行增删改操作,从数据库执行查询操作,从主库查询的操作通过从库执行, 利用 MySQL 数据库的复制机制将 Master 的数据同步到 slave 上。

当我们实现了 MyCat 的读写分离后,我们就需要考虑一个问题,读写分离的读组主节点和写组主节点,以及读组从节点和写组从节点,当主节点或者从节点挂掉之后会怎样呢?当我们主节点挂掉了,也就是 slave 既要承担自己本身的写操作也要承担主节点的读操作,而 slave 挂掉后 master 节点既要充当读操作,也要承担写操作,那么这个过程我们可以手动切换数据,但过程相对繁琐,我们这一章就是讲解如何自动切换。当 master 宕机后,slave 承载的业务如何切换到 master 继续提供服务,以及 slave  宕机后如何将 master 切换到 slave 上。手动切换数据源很简单,但不是运维工作的首选,本节重点就是讲解如何实现自动切换。

MyCat 的读写分离依赖于 MySQL 的主从同步,也就是说 MyCat 没有实现数据的主从同步功能,但是实现了自动切换功能。

下边我们会讲到两种切换方式一种是自动切换,另一种是基于 MySQL主从同步状态的切换,我们现将自动切换

1.自动切换

这个自动切换是 MyCat 主从复制的默认配置,当主机或从机宕机后,MyCat 自动切换到可用的服务器上。我们不需要手动操作,假设写服务器为M,读服务器为s,则:

正常时,写 M 读 s;

当 M 宕机后,也就是主节点挂掉了,读写 s ;恢复M后,写 s,读 M;

当  s 宕机后,就是从节点宕机,读写 M; 恢复 s 后,写 M,读 s; 那么我们如何去配置自动切换呢,其实很简单,我们只需要在 dateHost 中配置一个参数,就是 swichType ,之前讲过 swichType 的取值有 3 个,一个是 -1,一个是 1,一个是2,如果 -1 代表的是不开启自动切换,就是说宕机之后,我们什么操作都不做,然后第二个就是 1,代表自动切换,所以要想自动切换我们只需要把 swichType 的值改为 1。如果 swichType 配置是 2 ,那么就是基于 MySQL 主从同步状态的切换。

image.png

2.基于 MySQL 主从同步状态的切换

这种切换方式与自动切换不同,MyCat 检测到主从数据同步延迟时,会自动切换到拥有最新数据的 MySQL 服务器上,防止读到很久以前的数据。

假如我们现在有两组数据库,前者是主数据库,然后在主数据库中还有一个从数据库,那么主从复制实际上就是把主数据库中的东西同步到从数据库中,那么在同步过程中可能会出现这种现象,即当我们从主节点中写入了一小截数据,然后从节点需要抓取二进制日志写入到写入到中继日志,然后再通过中继日志完成主从复制。但是当我们主节点中写入了一小截数据,但是从节点并未从做中继日志,或者说正在从做中继日志,这个时候有用户查询了这个从节点,那么这时候刚刚写入的数据在查询时是没有的,因为正在读取日志,从而主从数据出现延迟问题,而下面这个机制就可以检测这种延迟,如果主从同步存在延迟,这个时候它就会将它切换到最新的这库中的数据同步到从数据库当中,切换到最新的 MySQL 服务器中 ,我们就可以读到最新的数据,那么它的原理实际上是检测 MySQL 主从同步当中的三项配置,

image.png

我们打开远程连接的工具,在 157 服务器和 158 服务器安装了两台 MySQL,也在两者上配置了主从复制的工具,输入密码进去之后,我们通过输入的指令就可以了解到主从复制的一个状态,往上走我们可以看到 slave _Io_ Running, slave_sQL_Running 这两项代表的就是主从同步的状态是否正常,除了这两项,我们在这一块还要关注 seconds _Behind _Master 看看这一项是不是 0,如果不是,说明这一项存在一定程度的延迟,这种很小的延迟是允许存在的,不能说一定不会存在延迟,只不过看我们业务系统中能不能容许这种延迟,对于我们检查同步状态的时候检查的就是这三个参数。

image.png

原理就是通过检查 MySQL 的主从同步状态( show slave status )中的 seconds _Behind _Master、 slave _Io_ Running, slave_sQL_Running  三个字段,来确定当前主从同步的状态以及主从之间的数据延迟。  

Seconds _Behind_Master 为 0 表示没有延<迟>,数值越大,则说明延迟越高。

 

二、MyCat 主从切换实现

基于延迟的切换,则判断结果集中的 s1ave_IO_Running、Slave_sQL_Running 两个个字段是否都为 yes,

以及 Seconds_Behind_Master 是否小于配置文件中配置的 slaveThreshold 的值,如果有任何一个条件不满足,则切换。  主要流程如下,这里我们会发送一个心跳包到 MySQL 数据库

image.png

image.png

 

 

这里有一个心跳检测机制,会分为两个心跳机制,我们要辨别心跳是属于哪个后端,这里我们会发送一个心跳包到 MySQL 数据库

,如果响应时数据识别失败,那么就会跳转到自动切换。数据出来之后,查看是否可用,将活动数据源指向新的数据源。

这个时候看看 swichType 的值是否是 2,这个时候我们判定最后 MySQL 是否出现宕机,如果没有宕机,这个时候还要进行判定,判定是否符合延迟切换,如果心跳数据识别成功后看满足延迟切换条件,什么时候达到延迟切换的条件呢,之前有说明(结果集中的 slave_IO_Running、Slave_sQL_Running 两个个字段都为 yes,以及 Seconds_Behind_Master 小于配置文件中配置的 slaveThreshold 的值,这个时候就认为不存在延迟,不可以进行切换,

如果上面三个条件有一个不是 yes,或者  Seconds_Behind_Master 的值大于配置文件中的值,如果任何一个条件不满足,则基于延迟切换),还有集群切换条件。

在这里我们只需要知道两种切换方式,一种是自动切换,另一种是基于延迟切换。自动切换是宕机之后的操作,而基于延迟的切换就是如果这个数据存在延迟,我再进行延迟切换,那么这是基于刚才那三个参数。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
12月前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
1081 81
|
9月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
缓存 NoSQL Redis
Redis主从架构
当看到图示中红色标记的,就代表从节点挂载成功了。
137 0
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
1255 0
|
人工智能 NoSQL 关系型数据库
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
主从模式(Master-Slave Architecture)在传统的计算机科学中指的是一种分布式系统架构
672 5
|
架构师 网络协议 算法
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
693 1
|
SpringCloudAlibaba Java 测试技术
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
361 1
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
运维 负载均衡 监控
软件体系结构 - 关系数据库(3)主从架构
【4月更文挑战第26天】软件体系结构 - 关系数据库(3)主从架构
313 0