开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat - 集群 - keepalived 作用及流程介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/757/detail/13290
MyCat - 集群 - keepalived 作用及流程介绍
内容介绍:
一、 课程回顾
二、 Keepalived 安装配置
一、 课程回顾
在学习 Keepalived 安装配置之前首先要了解 Keepalived 的原理和运行机制,在讲解 Keepalived 的原理之前,先回顾之前高可用集群的架构,如下:
下图中已经通过 HAProxy 完成了 MyCat 的高可用集群的搭建,通过 HAProxy 可以得到 MyCat 的负载均衡,
如下图中安装了两台 HAProxy ,虽然是两台 HAProxy ,但是它们是单节点(也就是 192.159 这台服务器停止其工作,192.160 这台服务器不会停止工作),
要做到是去搭建 HAProxy 的高可用,HAProxy 的搭建需要借助于 Keepalived ,通过 Keepalived 虚拟出需要的 IP ,前端的应用程序去访问时是通过此 VIP 来访问,如果没有 Keepalived 的虚拟 VIP ,客户端不能确定是连接 159 还是 160,如果连接的是 159,意味着请求的一直是 159 服务器,即使 159 停止工作,也不能自动切换到 160 上,只能手动地在客户端应用程序上修改,如此会造成许多不便,因此会考虑 HAProxy 的高可用如何通过 Keepalived 来实现。
二、 Keepalived 安装配置
安装配置
上图有两台服务器,分别是 159 和 160,159 和 160 两台服务器上都会安装 HAProxy 和 Keepalived ,两台服务器上的 Keepalived 都会虚拟出同一个 VIP(192.200),这两台 Keepalived 的关系实际上是一主一备,假如第一个 Keepalived 是主,那么他们虚拟出的 VIP 将会与主节点进行绑定,换而言之,192.200 会和 192.159 进行绑定,访问 192.200 就相当于访问 192.159,那么,我们前段的应用程序在去访问 MyCat 集群的时候实际上是直接访问的 VIP ,访问192.200 就是访问 192.159,也就相当于访问了第一台 HAProxy ,而这台 HAProxy 会将请求继续路由,路由到后端的 MyCat ,然后进行 MyCat 的负载均衡。
假如第一台服务器停止工作,此时就要考虑到 Keepalived 的心跳机制,Keepalived 这两台服务器会维护一个心跳机制(主节点每隔一段时间都会往从节点或备用节点发送一个心跳包,当备用节点没有接收到这个心跳包,或相隔了几秒未接收到,此时就会开始判定 Keepalived 的工作情况,如果未接收到心跳包就说明 Keepalived 已经停止工作了)如果 192.159 这台服务器的 Keepalived 停止工作了,那么此时就会解绑 VIP ,并且将这个 VIP 与第二台服务器 192.160 绑定,接下来前端的应用程序请求的依然是 190.200(应用程序请求的地址固定不变),绑定第二台服务器后请求 190.200 实际上就是请求 192.160,并且通过第二台 HAProxy 将请求继续往下转发,转发给后端的 MyCat ,然后来实现 MyCat 的负载均衡。
在这个机制下,实际上有这么一种可能,当考虑如何去判断第一台节点停止工作,就是两个 Keepalived 维持一个心跳,如果没有接收到 Keepalived 的心跳包,那么就认为此节点停止工作,那么假如,在第一台节点中,首先初始情况下,VIP 与第一台 159 进行绑定,那么这个时候由于某种原因,在运行的时候 HAProxy 停止工作了,Keepalived 保存工作状态,第一台 Keepalived 会向第二台 Keepalived 发送备用心跳包,备用节点若接收到心跳包就会判定主节点仍在工作,但是主节点中的 HAProxy 已经停止工作了,接下来前端的应用程序请求 HAProxy 的时候,就不能转发给后端的 MyCat 了,此时就会出现问题,但在实际操作过程中,会在 Keepalived 中嵌入一个脚本,通过此脚本来检测 HAProxy 的状态,如果发现 HAProxy 已经停止工作了,Keepalived 中的脚本会尝试重启 HAProxy ,如果 HAProxy 重启之后发现没有此进程,Keepalived 中的脚本会将 Keepalived 自删,一旦自删 Keepalived 就不能向备用节点发送心跳包,备用节点接收不到心跳包就会判定第一个服务器停止工作了,此时会将 VIP 与第二台节点进行绑定。