温馨提示×

如何用Linux DHCP实现负载均衡

小樊
34
2025-12-06 04:40:34
栏目: 云计算

Linux DHCP负载均衡与高可用实践

一、方案总览与选择

  • 推荐采用 ISC DHCP Server 的 failover 对等体在同一网段内做负载均衡 + 故障转移,两台服务器同时为客户端分配地址,按策略分担流量,单机故障不影响服务。适用于绝大多数园区网与数据中心接入层。
  • 跨网段或多子网的场景,使用 **DHCP 中继(DHCP Relay)**将请求转发到后端多台 DHCP 服务器;配合 failover 或地址池划分实现分担与冗余。
  • 若已有 Keepalived/VRRP 环境,可将其用于外层高可用(VIP 漂移、服务监控),但 DHCP 本身仍建议启用 failover 来正确同步租约与避免冲突。

二、方案一 ISC DHCP 对等体负载均衡(同一网段)

  • 适用:单广播域内需要高可用与负载分担。
  • 思路:两台服务器建立 failover peer,共享同一作用域;通过 splitload balance max seconds 控制分配比例与时机,租约数据库在两端自动同步。

示例最小配置(两台服务器,示例网段 192.168.1.0/24):

  • 主服务器(primary,示例 IP:192.168.1.10)
# /etc/dhcp/dhcpd.conf
authoritative;
failover peer "dhcp" {
  primary;                 # 角色:主
  address 192.168.1.10;     # 本端地址
  port 520;                 # 本端 failover 端口
  peer address 192.168.1.11; # 对端地址
  peer port 519;             # 对端 failover 端口
  max-response-delay 60;
  max-unacked-updates 10;
  mclt 600;                 # 仅主端配置
  split 128;                 # 地址分配比例(主:备 = 128:128)
}
include "/etc/dhcp/dhcpd.subnet";
  • 从服务器(secondary,示例 IP:192.168.1.11)
# /etc/dhcp/dhcpd.conf
authoritative;
failover peer "dhcp" {
  secondary;               # 角色:备
  address 192.168.1.11;
  port 519;
  peer address 192.168.1.10;
  peer port 520;
  max-response-delay 60;
  max-unacked-updates 10;
  # 注意:mclt 只在 primary 配置
}
include "/etc/dhcp/dhcpd.subnet";
  • 公共子网与地址池(/etc/dhcp/dhcpd.subnet)
# 全局选项
option domain-name-servers 223.5.5.5, 8.8.8.8;
default-lease-time 7200;
max-lease-time 14400;

subnet 192.168.1.0 netmask 255.255.255.0 {
  option routers 192.168.1.1;
  pool {
    failover peer "dhcp";
    range 192.168.1.100 192.168.1.254;
    deny dynamic bootp clients;   # failover 不支持 BOOTP
  }
}
  • 启动与验证
    • 启动服务:systemctl start isc-dhcp-server(两台均启动)
    • 查看租约与日志:tail -f /var/log/messages | grep dhcpd,确认 failover 握手与分配情况
    • 故障演练:停掉主服务器,验证备机继续分配地址

要点说明:

  • 同一作用域只能建立一个 failover 关系;mclt 仅在主端配置;建议始终拒绝 BOOTP 客户端;端口 67/68 为 DHCP 客户端/服务器端口,520/519 为 failover 专用端口,注意防火墙放行。

三、方案二 跨网段与多服务器扩展

  • 跨网段部署
    • 在三层设备(交换机/路由器)为每个 VLAN 配置 DHCP 中继,将 DHCP Discover/Request 转发到后端两台(或多台)DHCP 服务器;中继与服务器之间同样建议启用 failover,避免地址冲突与租约不一致。
  • 多服务器分担(同一网段)
    • 若不使用 failover,可采用“地址池划分”方式:每台服务器配置不重叠的 range,实现静态分担;但缺少租约同步与健康接管,生产环境优先使用 failover。

四、方案三 结合 Keepalived 的高可用外层封装

  • 适用:已有 VRRP/VIP 架构,需要在节点故障时快速漂移服务 IP。
  • 思路:Keepalived 负责 VIP 与进程健康检查(如检测 dhcpd 是否在监听 UDP 67),异常时降低本机优先级,由对端接管 VIP;DHCP 层仍使用 failover 保证租约一致性。
  • 健康检查脚本示例(/etc/keepalived/check_dhcp.sh)
#!/usr/bin/env bash
ss -lunpt | grep -q ':67' || exit 1
exit 0
  • 配置要点:VRRP 实例中调用脚本,监控间隔建议 2 秒;确保 VIP 所在网段与 DHCP 作用域匹配,且服务器间 failover 配置已就位。

五、部署与运维要点

  • 防火墙与端口
    • 放行 UDP 67/68(DHCP),以及 TCP/UDP 520/519(failover);不同发行版服务名与端口可能不同,建议按实际监听端口放行。
  • 租约与日志
    • 默认租约文件 /var/lib/dhcp/dhcpd.leases;排查使用 journalctl -u isc-dhcp-server 或查看 /var/log/messages
  • 地址规划
    • 保留地址(host 声明)应位于作用域的 range 内;避免与静态分配冲突。
  • 变更与回滚
    • 先备份配置与租约文件;变更后先在测试网段验证,再推广到生产。
  • 客户端行为
    • 多数客户端在 Discover 阶段以广播发送,跨网段必须依赖中继;同网段多服务器场景下,failover 会自动分担与接管,无需客户端额外配置。

0