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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
传统型负载均衡 CLB,每月750个小时 15LCU
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 快速学习 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来完成这个高可用集群。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
3月前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
50 2
|
4月前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
366 2
|
5月前
|
存储 监控 关系型数据库
关系型数据库设计集群架构节点规划
【5月更文挑战第6天】在实际项目中,可能还需要考虑其他因素,如安全性、合规性、成本等。因此,在进行关系型数据库设计集群架构节点规划时,建议与经验丰富的数据库管理员和架构师合作,以确保项目的成功实施和稳定运行。
50 4
关系型数据库设计集群架构节点规划
|
5月前
|
分布式计算 负载均衡 关系型数据库
关系型数据库设计集群架构需求分析
【5月更文挑战第6天】关系型数据库设计集群架构的需求分析是一个综合考虑业务需求、性能、可用性、可扩展性、数据一致性、安全性、成本效益和技术选型等多个方面的过程。通过深入分析和评估,可以设计出满足业务需求且高效可靠的数据库集群架构。
58 3
关系型数据库设计集群架构需求分析
|
4月前
|
存储 负载均衡 NoSQL
MongoDB的架构设计基于三种集群模式
【6月更文挑战第5天】MongoDB的架构设计基于三种集群模式
176 3
|
5月前
|
存储 负载均衡 关系型数据库
关系型数据库设计集群架构架构选择
【5月更文挑战第6天】还可以考虑使用现有的数据库管理系统(DBMS)提供的集群解决方案,如MySQL的InnoDB Cluster、PostgreSQL的Streaming Replication和Patroni等。这些解决方案已经经过了广泛测试和验证,可以大大降低集群架构设计和实现的难度。
67 1
关系型数据库设计集群架构架构选择
|
4月前
|
存储 缓存 NoSQL
redis的集群架构
规避方法可以在redis配置里加上参数(这种方法不可能百分之百的避免数据丢失,参数集群leader选举机制)
43 0
|
5月前
|
架构师 网络协议 算法
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
|
5月前
|
Kubernetes API 调度
Kubernetes学习-核心概念篇(二) 集群架构与组件
Kubernetes学习-核心概念篇(二) 集群架构与组件