wiki/运维/负载均衡/KeepAlived/KeepAlived原理.md
2026-04-08 19:40:00 +08:00

47 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Keepalive详解
------
## 工作原理
Keepalived主要的任务就是去调用ipvsadm命令来生成ipvs规则并自动实现将用户需要访问的地址转移到可用LVS节点实现。
Keepalived工作在多个LVS主机节点上当前活动的节点叫做Master备用节点叫做BackupMaster会不停的向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. 虚拟路由器中的路由器根据优先级选举出MasterMaster路由器通过发送免费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来监控子进程的。