Keepalived 是一个用于实现高可用性(High Availability, HA)和负载均衡的开源软件。
它主要依赖于 Linux Virtual Server(LVS)和 Virtual Router Redundancy Protocol(VRRP)两个关键技术。
下面我们详细介绍 Keepalived 的工作原理
Linux Virtual Server(LVS)
LVS 是一个内核级别的负载均衡解决方案,它可以在网络层实现负载均衡。Keepalived 使用 LVS 来分发请求到后端的真实服务器(Real Servers)。LVS 主要有三种工作模式:NAT(Network Address Translation)、DR(Direct Routing)和 TUN(IP Tunneling)。每种模式都有各自的优缺点和使用场景,但它们的共同目标是在不同的服务器之间分发负载,从而提高服务的可用性和性能。
Virtual Router Redundancy Protocol(VRRP)
VRRP 是一个用于实现路由器冗余的网络协议,它允许多台路由器组成一个虚拟路由器组,这个虚拟路由器组具有一个虚拟 IP 地址。
在这个组中,有一个主路由器(Master)和一个或多个备份路由器(Backup)。
当主路由器出现故障时,备份路由器会自动接管虚拟 IP,从而保证网络通信的连续性。
Keepalived 使用 VRRP 实现了 IP 地址和网络设备的高可用性。
Keepalived 的工作原理:
- 在 Keepalived 集群中,有一个 Master 节点和一个或多个 Backup 节点。它们都运行着 Keepalived 实例,并通过 VRRP 协议相互通信。
- 每个 Keepalived 实例都有一个优先级值(Priority),用于在选举 Master 节点时进行比较。优先级值越高的节点,成为 Master 的可能性越大。
- 当 Master 节点正常运行时,它将接管虚拟 IP,并将请求分发到后端的真实服务器。同时,它还会定期发送 VRRP 广播,告知其他节点自己的状态。
- Backup 节点会监听来自 Master 节点的 VRRP 广播。如果在预定时间内没有收到广播,Backup 节点会认为 Master 出现故障,然后开始 VRRP 选举过程。
- 在 VRRP 选举过程中,具有最高优先级的 Backup 节点将成为新的 Master 节点,并接管虚拟 IP,继续为用户提供服务。
- 当原 Master 节点恢复正常后,根据配置,它可能会重新成为 Master 节点,也可能继续作为 Backup 节点。这取决于 Keepalived 的配置和节点优先级设置。
- 例如,如果启用了 “nopreempt” 选项,那么原 Master 节点恢复后不会重新成为 Master 节点,而是作为 Backup 节点继续运行,直到当前 Master 节点出现故障。
总结
通过这种方式,Keepalived 能够实现高可用性和负载均衡。
它可以帮助维护系统的稳定性和性能,确保关键服务在故障发生时仍然可以正常运行。
此外,Keepalived 还提供了丰富的配置选项,允许用户根据实际需求对集群行为进行定制。