开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat-集群-集群架构 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/757/detail/13284
MyCat-集群-集群架构
内容介绍:
一、 集群架构
二、 高可用集群搭建
三、 课程总结
一、 集群架构
1. MyCat 实现读写分离架构
通过 MyCat 来实现 MySQL 集群的负载均衡,如下面的结构图:
当客户端(应用程序)连接 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 。
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 的高可用集群
如上图,所有的应用程序(客户端)不会直接去连接 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来完成这个高可用集群。