MyCat-集群-集群架构 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 快速学习 MyCat-集群-集群架构

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

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


MyCat-集群-集群架构

内容介绍:

一、 集群架构

二、 高可用集群搭建

三、 课程总结

 

一、 集群架构

1. MyCat 实现读写分离架构

通过 MyCat 来实现 MySQL 集群的负载均衡,如下面的结构图:

image.png

当客户端(应用程序)连接 MyCat 时,通过 MyCat 来完成 MySQL 的读写分离,写操作直接转发到 MySQL 的 Master 节点,读操作可以转发到 MySQL 的 Slave 节点,从而来分担或降低仅仅依靠单台 MySQL 的压力。

但是以上架构存在问题,由于 MyCat 中间件是单节点的服务,也就是只有一台 MyCat,即使后端的 MySQL 是双主双从,或者是主节点更多,从节点更多,也只能保证 MySQL 一个界面停止工作了,会有另外的备用界面替补上来,对于 MyCat 来说是单节点的,无论后端有多少台 MySQL ,而如果 MyCat 只有一台,前端客户端所有的压力过来都直接请求这一台 MyCat ,存在单点故障,因此此时需要考虑 MyCat 的集群;

2. MyCat 集群架构

通过 MyCat 来实现后端 MySQL 的负载均衡,通过 HAProxy 再实现 MyCat 集群的负载均衡;以下图的架构是基于上图进行演变的。

所有的客户端(应用程序)在去访问的时候,不会直接访问 MyCat ,因为要实现 MyCat 的高可用,至少 MyCat 需要有两台服务器,这两台服务器同时对外进行服务,应用程序不会连接这两台服务器中的任意一台,会连接一个负载均衡的服务器(HAProxy),通过 HAProxy 来实现 MyCat 的负载均衡,因此所有的应用程序(客户端)在连接的时候直接去请求 HAProxy ,HAProxy 会将请求分发到后端的 MyCat ,由 MyCat 将请求分发到后端的 MySQL ,所以 HAProxy 主要充当 MyCat 的负载均衡,而 MyCat 又充当后端 MySQL 的负载均衡,此时,当第一台 MyCat 宕机了,所有的请求不会转发到第一台 MyCat ,而是直接转发到另一台 MyCat ,这样能保证 MyCat 的高可用,但是实际上此架构图也存在问题,HAProxy 是一个负载均衡器,所有的客户端都要去连接此 HAProxy 。

image.png

HAProxy 负责将请求分发到 MyCat 上,起到负载均衡的作用,同时 HAProxy 也能检测到 MyCat 是否存活,HAProxy 只会将请求转发到存活的 MyCat 上,如果一台 MyCat 服务器宕机,HAProxy 转发请求时不会转发到宕机的 MyCat 上,所以 MyCat 依然可用。

HAProxy 介绍:

HAProxy 是一个开源的、高性能的基于 TCP (第四层)和 HTTP (第七层)应用的负载均衡软件。使用 HAProxy 可以快速、可靠地实现基于 TCP 和 HTTP 应用的负载均衡解决方案。

具有以下优点:

①.可靠性和稳定性好;

②.处理能力强,最高可以通过维护 4w-5w 个并发连接,单位时间处理的最大请求个数达到 2w 个;

③.支持多种负载均衡算法;

④.有功能强大的监控界面,通过此界面可以实时了解系统的运行情况;

但是,上述的架构也是存在问题的,因为所有的客户端请求都是先到达 HAProxy ,由 HAProxy 再将请求再向下分发,在业务系统比较繁忙的系统当中,如果并发量比较高,或者这台服务器断电,或者一些服务器的故障,造成 HAProxy 宕机。如果 HAProxy 宕机的话,就会造成整个 MyCat 集群不能正常运行,依然存在单点故障。

 

二、 MyCat 的高可用集群

image.png

如上图,所有的应用程序(客户端)不会直接去连接 HAProxy ,所有的应用程序(客户端)是通过虚拟的 VIP 去连接 HAProxy ,借助 Keepalived 保证 HAProxy 高可用。

在这两台服务器上会安装 HAProxy, 同时还会安装另外一个软件 keepalived, 客户端所有请求会转发到第一台 HAProxy, 那么第一台 HAProxy 如果宕机的话,所有的请求又会转发到第二台 HAProxy。

它的机制与  keepalived 有关,在这幅架构图当中,如果没有 keepalived, 客户端要么连接第一个,要么连接第二个。实际上客户端(应用程序)再去连接第一个或第二个时都不合适。如果所有的客户端或者应用程序连接第一个  HAProxy, 当第一个 HAProxy 停止工作了,很难自动切换到第二个 HAProxy, 实际操作中不可能在每一个应用程序上都修改它的配置文件,再把它的地址指向第二个 HAProxy 。

如果要做到当第一个 HAProxy 停止工作了,能够自动切换到第二个 HAproxy。此时要借助 keepalived, keepalived 这个组件会虚拟出一个 VIP,虚拟出的此 VIP 会和当前此服务器进行绑定,这两个 keepalived 的都会共同虚拟出这样一个 VIP,和当前的服务器 IP 地址进行绑定,这两个 keepalived 在启动之后都需要进行抢占,如果第一个 keepalived 抢占了,那么此时这个 VIP 就会和第一台服务器进行绑定,如果第二台抢占了,就会和第二台服务器进行绑定,这两个服务器它们之间会维护一个心跳,这个心跳是为了监测对方是否正常工作,当第一个 keepalived( Master) 发送一个心跳包到备用节点,备用节点回复它。重复这个环节,当主节点(Master)发送心跳包到备用节点,备用节点没有监测到,那么备用节点会判定当前主节点宕机了。如果主节点宕机了,此时备用节点就会抢占 VIP,当抢占好 VIP后,会自动与这二台服务器的 HAProxy 进行绑定。一旦和这个服务器的IP进行绑定了之后,接下来客户端在请求的时候依然请求的是这个 VIP, 此 VIP 由于和第二台服务器进行绑定了,此时它就会转发到第二台 HAProxy,从而来保证 HAProxy 的高可用。

下面是图解说明:

1). HAProxy 实现了 MyCat  多节点的集群高可用负载均衡,而HAProxy 自身的高可用则可以通过 keepalived 来实现,因此,  HAProxy 主机上要同时安装 HAProxy 和 Keepalived,  Keepalived 负责为该服务器抢占 vip(虚拟 ip),抢占到 vip 后,对该主机的访问可以通过原来的 ip 访问,也可以直接通过 vip 访问。

2). Keepalived 抢占 vip 有优先级,在 keepalived .conf 配置中 priority 属性决定。但是一般哪台主机上的 Keepalived 服务先启动就会抢占到 vip ,即使是 slave ,只要先启动也能抢到(要注意避免 Keepalived 的资源抢占问题)

3). HAProxy 负责将 vip 的请求分发到 MyCat 集群节点上,起到负载均衡的作用。同时 HAProxy 也能监测到 MyCat 是否存活,HAProxy 只会将请求转发到存活的 MyCat 上。

4).如果 Keepalived+HAProxy 高可用集群中的一台服务器宕机,集群中的另一台服务器上的 Keepalived 会立刻抢占VIP并接管服务,此时抢占了 vip 的 Keepalived 节点可以继续提供服务。

5).如果一台 MyCat 服务器宕机,  HAProxy 转发请求时不会转发到宕机的 MyCat 上,所以 MyCat 依然可用。

综上: MyCat 的高可用及负载均衡由 HAProxy 来实现,而 HAProxy 的高可用由 keepalived 来实现。

Keepalived 介绍:

Keepalived 是一种基于 VRRP 协议来实现的高可用方案,可以利用其避免单点故障。通常有两台甚至多台服务器运行 Keepalived,一台为主服务器( Master ),其他为备份服务器,但是对外表现为一个虚拟 IP ( VIP ),主服务器会发送特定的消息给备份服务器,也就是说它们之间会维持一个心跳,主服务器要发送一个心跳包给备用服务器,当备用服务器接收不到这个消息时(备用服务器无任何压力)即认为主服务器宕机,备用服务器就会将此 IP 与当前服务器进行绑定,一旦与当前服务器的 IP 绑定好之后,接下来客户端请求此 VIP 时就会将请求转发到第二台服务器上,此时相当于备用服务器生效了,备份服务器就会接管虚拟 IP ,继续提供服务,从而保证了整个集群的高可用。

VRRP (虚拟路由冗余协议﹣Virtual Router Redundancy Protoco1)协议是用于实现路由器冗余的协议, VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP (一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER ,或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网塔功能,如 ARP 请求, ICMP ,以及数据的转发等;其他设备不拥有该虚拟 IP ,状态是 BACRUP ,除了接收 MASTER 的 VRRP 状态通告信息外,不执行对外的网络功能。

当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。 VRRP 协议使用多插数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAc 地址发送数据而不是自身网卡的 MAC 地址, VRRP 运行时只有 MASTER 路由器定时发送 VRRE 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP (组), BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER ,发送通告信息,重新进行 MASTER 选举状态。

 

三、 课程总结

在这一小节上讲到 MyCat 集群的一个演变,共提到了三种架构。第一个是通过 MyCat 来实现 MySQL 的读写分离架构,由于 MyCat 是一个单节点,存在单节点的故障。

第二个是通过 HAProxy 负载均衡器来完成 MyCat 的高可用,在此幅架构图中,MyCat 是高可用的,通过 HAProxy 来完成它的负载均衡。但是 HAProxy 却是单节点的,当 HAProxy 的压力过大的时候,  HAProxy 就会宕机,此时实际上后面的 MyCat 没有任何意义,因此衍生出了第三个集群 , MyCat 的高可用集群,在其中要通过 HAProxy 和 Keepalived来完成这个高可用集群。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
518 0
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
7月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
8月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
707 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
11月前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
953 81
|
8月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
8月前
|
存储 SQL 并行计算
【赵渝强老师】达梦数据库MPP集群的架构
达梦数据库提供大规模并行处理(MPP)架构,以低成本实现高性能并行计算,满足海量数据存储和复杂查询需求。DM MPP采用完全对等无共享体系,消除主节点瓶颈,通过多节点并行执行提升性能。其执行流程包括主EP生成计划、分发任务、各EP并行处理及结果汇总返回。为确保高可用性,建议结合数据守护部署。
266 0
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
下一篇
oss云网关配置