Keepalived 实现原理要点

Keepalived 实现原理要点

引言 #

在现代的网络环境中,高可用性(High Availability)比如说双中心主备服务是一个非常重要的需求。在许多情况下,我们不能承受单点故障导致的服务中断。为了满足这个需求,有很多工具和技术可以帮助我们构建高可用性的系统,其中一个就是 Keepalived。

Keepalived 是一个用于保持系统高可用性的软件。它使用了 Linux Virtual Server(LVS)进行负载均衡,以及 Virtual Router Redundancy Protocol(VRRP)来实现高可用性。本文将详细介绍 Keepalived 的工作原理,特别是它如何使用 VRRP 和 Gratuitous ARP 实现高可用性。

实际操作中 我们可以手动配置ip地址(静态ip),换成自动的方式:也可以通过心跳检测的方式声明并自动配置静态ip地址,而VRRP就是实现这种自动化方案的协议.

VRRP 协议 #

在路由层面,Keepalived 使用 VRRP(Virtual Router Redundancy Protocol)协议来实现高可用性。VRRP 是一种路由协议,它允许几台主机共享一个虚拟 IP 地址。这个虚拟 IP 地址被配置在网络中的其他主机或设备上,作为默认网关。

在一个 VRRP 组(也称为 VRRP 实例)中,一台主机被配置为主(MASTER),其他主机被配置为备份(BACKUP)。每个 VRRP 实例都有一个唯一的虚拟路由器标识符(Virtual Router Identifier,VRID)。

主主机会定期发送 VRRP 广播,这些广播包含 VRID 和主主机的优先级。备份主机监听这些广播,并根据收到的信息确定是否需要接管主的角色。

如果备份主机在一定时间内没有收到主主机的 VRRP 广播,它将认为主主机已经失效,并开始接管主的角色。这个过程包括声明自己为主主机,并将虚拟 IP 地址配置在自己的网络接口上。一旦虚拟 IP 地址被接管,所有发送到这个地址的数据包将被新的主主机处理。

Gratuitous ARP #

在网络层面,接管虚拟 IP 地址的过程通常涉及到发送 Gratuitous ARP。Gratuitous ARP 是一种特殊的 ARP 协议行为,用于通知网络中的其他设备某个 IP 地址对应的 MAC 地址已经发生了变化。

当备份主机接管主主机的角色时,它会发送一个 Gratuitous ARP 消息,源 IP 地址和目标 IP 地址都是设备自己的 IP 地址,源 MAC 地址是设备自己的 MAC 地址,目标 MAC 地址是广播地址(FF:FF:FF:FF:FF:FF)。网络中的其他设备收到这个 ARP 消息后,会更新它们的 ARP 缓存,将新的主主机的 IP 地址和 MAC 地址关联起来。

DHCP #

那么对于虚拟ip,应该排除在DHCP分配的ip范围内以避免ip冲突
DHCP (Dynamic Host Configuration Protocol) 是一种网络协议,它允许客户端动态地从服务器获取 IP 地址和网络配置信息。

IP 地址的分配是由 DHCP 服务器决定的,客户端只是提出请求。DHCP 服务器维护一个 IP 地址池,并负责将地址动态分配给请求的客户端。客户端不能自己决定使用哪个 IP 地址,只能从服务器提供的地址中选择。

DHCP 地址分配的过程如下:

  1. 客户端发送一个 DHCPDISCOVER 广播消息,寻找可用的 DHCP 服务器。

  2. DHCP 服务器会响应 DHCPOFFER 消息,提供一个可用的 IP 地址和其他配置信息。

  3. 客户端选择一个 DHCPOFFER,并发送 DHCPREQUEST 消息,请求使用该 IP 地址。

  4. DHCP 服务器发送 DHCPACK 消息确认,并将该 IP 地址分配给客户端。

如果你的网络中有使用静态 IP 地址的设备,包括使用虚拟 IP 地址的设备,那么你应该确保这些 IP 地址不在 DHCP 服务器的动态分配范围内。否则,可能会发生 IP 地址冲突,导致网络问题。

要配置 ISC DHCP 服务器以限制动态 IP 地址的分配范围,例如,如果你的网络中有一个设备使用了虚拟 IP 地址 192.168.1.50,那么你的 DHCP 服务器配置可能看起来像这样:

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option domain-name-servers ns1.example.org, ns2.example.org;
    option domain-name "example.org";
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
    max-lease-time 7200;
}

在这个例子中,range 指定了 DHCP 服务器可以分配的 IP 地址范围,这里是从 192.168.1.100192.168.1.200。你会注意到,虚拟 IP 地址 192.168.1.50 不在这个范围内,因此不会被 DHCP 服务器动态分配。

这就确保了虚拟 IP 地址不会与 DHCP 服务器分配的任何 IP 地址冲突。同样的原则也适用于任何使用静态 IP 地址的设备。

常见的DHCP服务器有:

  1. ISC DHCP - 开源的DHCP服务器,支持Linux和Unix平台。

  2. Microsoft DHCP Server - 微软的Windows Server中的角色服务,可以提供DHCP服务。

  3. Cisco IOS DHCP Server - 思科路由器的DHCP服务器功能。

  4. PfSense - 基于FreeBSD的防火墙和路由器系统,内置DHCP服务器。

  5. Dhcpd - Linux系统下的开源DHCP服务器。

  6. Kea DHCP - 新一代开源的高性能DHCP服务器。

  7. Infoblox - 商业DHCP和DNS服务器。

  8. BlueCat - 商业DHCP和DNS服务器。

  9. DNSmasq - 轻量级的DHCP和DNS服务器。

  10. Ubiquiti UniFi - Ubiquiti公司UniFi系列产品的DHCP服务器。

结论 #

通过使用 VRRP 和 Gratuitous ARP,Keepalived 可以在主主机失效时快速将虚拟 IP 地址切换到备份主机,从而保证服务的连续可用性,网络中的DHCP配置应该排除静态ip的分配。这种机制使得 Keepalived 成为实现网络高可用性的有效工具。但是,网络管理员需要注意,虽然 Gratuitous ARP 可以解决一些问题,但它也可能被用于 ARP 欺骗攻击,因此在设计和配置网络时需要考虑安全性。

2023-10-15