# Keepalive详解 ------ ## 工作原理 Keepalived主要的任务就是去调用ipvsadm命令,来生成ipvs规则,并自动实现将用户需要访问的地址转移到可用LVS节点实现。 Keepalived工作在多个LVS主机节点上,当前活动的节点叫做Master,备用节点叫做Backup,Master会不停的向Backup节点通告自己的心跳,这种通告是基于VRRP协议的。Backup节点一旦接收不到Master的通告信息,它就会把LVS的VIP拿过来,并且把ipvs的规则也拿过来,在自己身上生效,从而替代Master节点。 在LVS+KEEPALIVED模型中,所有的工作在Keepalived中配置就可以了。 ### VRRP工作原理简述 传统上来说我们通过一个路由器上网,如果这个路由器故障那就不能上网了,如果使用2个路由器,有一个故障你就需要手动的设置客户端切换到另外的路由器上: ![img](./assets/1448094-20190427140322369-437523071.png) 我们可以通过VRRP协议来实现路由器的故障转移。如下图: ![img](./assets/1448094-20190427140331315-1105050518.png) VRRP协议提供一个VIP,它可以来设定那个路由器是活动节点,然后出现故障进行切换,VIP也随之对应到新的路由器上,但是内网是用过MAC地址来寻址的,虽然VIP对应到了新的路由器上,可是MAC变了,客户端的ARP表也没有更新,所以还是用不了,为了解决这个问题VRRP不但提供VIP还提供VMAC地址,这个VMAC地址是VRRP单独申请的,路由器集群内的节点都可以正常使用。 故障切换的时候虽然改变了后端路由器,但是由于客户端使用的是VIP和VMAC地址,这样就不会有任何影响了。 所以Keepalived就是在Linux系统上提供了VRRP功能,当然还提供了服务监控功能,比如监控后端服务器的健康检查、LVS服务可用性检查。 VRRP的工作过程是这样的: 1. 虚拟路由器中的路由器根据优先级选举出Master,Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通告给与它连接的设备。 2. Master路由器周期性发送VRRP报文,以公布自己的配置信息(优先级等)和工作状态 3. 如果Master故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master 4. 虚拟路由器状态切换时,Master路由器由一台设备切换会另外一台设备,新的Master路由器只是简单的发送一个携带虚拟MAC地址和虚拟IP的免费ARP报文,这样就可以更新其他设备中缓存的ARP信息 5. Backup路由器的优先级高于Master时,由Backup的工作方式(抢占式或者非抢占式)决定是否重新选举Master。 VRRP还支持认证,就是为了防止随意一个VRRP设备加入到当前的虚拟路由组离来,它提供无认证、简单8位字符串认证和MD5认证(该认证方式Keepalive不支持)。 ### Keepalive软件结构 ![img](./assets/1448094-20190427140344609-1485693863.png) Keepalived启动后以后会有一个主进程Master,它会生成还有2个子进程,一个是VRRP Stack负责VRRP(也就是VRRP协议的实现)、一个是Checkers负责IPVS的后端的应用服务器的健康检查,当检测失败就会调用IPVS规则删除后端服务器的IP地址,检测成功了再加回来。当检测后端有失败的情况可以使用SMTP通知管理员。另外VRRP如果检测到另外一个Keepalive失败也可以通过SMTP通知管理员。 Control Plane:这个就是主进程,主进程的功能是分析配置文件,读取、配置和生效配置文件,指挥那2个子进程工作。 WatchDog:看门狗,这个是Linux系统内核的一个模块,它的作用是帮助主进程盯着那2个子进程,因为主进程并不负责具体工作,具体工作都是子进程完成的。如果子进程挂了,那Keepalived就不完整了,所以那2个子进程会定期的向主进程打开的一个内部Unix Socket文件写心跳信息。如果有某个子进程不写信息了,它就会重启子进程,主进程就是让WatchDog来监控子进程的。