目录
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
一、核心概念
1. LVS(Linux Virtual Server)
- 定义:基于 Linux 内核的负载均衡器,工作在 OSI 模型的第四层(传输层),通过 IP 和端口实现流量分发。
- 工作模式:
- NAT 模式:客户端请求经 LVS 转发至后端服务器,响应流量需通过 LVS 返回(需配置 SNAT/DNAT)。
- DR 模式(Direct Routing):LVS 仅转发请求,后端服务器直接响应客户端(需共享 VIP,配置路由或调整内核参数)。
- TUN 模式(隧道模式):通过 IP 隧道封装技术将请求转发至后端服务器(适用于跨网段场景)。
- 调度算法:
- 轮询(Round Robin)、加权轮询(Weighted RR)、最少连接(Least Connections)、加权最少连接(Weighted LC)等。
2. Keepalived
- 定义:基于 VRRP(Virtual Router Redundancy Protocol)协议的高可用解决方案,用于监控 LVS 节点状态,实现主备切换。
- 核心功能:
- 健康检查:通过 TCP、HTTP、SSL 等方式检测后端服务器和 LVS 节点的存活状态。
- 虚拟路由冗余:多个 Keepalived 节点组成 VRRP 组,共享一个虚拟 IP(VIP),主节点故障时自动切换至备节点。
二、高可用架构设计
1. 架构拓扑图
客户端 <---- VIP ----> [主LVS+Keepalived] <---- 内网 ----> 后端服务器集群
└---- VIP ----> [备LVS+Keepalived]
- 关键组件:
- 主备 LVS 节点:运行 LVS 负载均衡服务,共享 VIP。
- Keepalived 服务:部署在主备 LVS 节点上,通过心跳机制同步状态。
- 后端服务器:处理实际业务请求,需配置为 LVS 的 Real Server。
2. 工作流程
- 正常状态:
- 主节点持有 VIP,接收客户端请求并通过 LVS 调度算法分发给后端服务器。
- 备节点处于待命状态,定期监听主节点心跳。
- 主节点故障:
- 备节点检测到主节点心跳丢失,接管 VIP 并成为新的主节点,继续处理流量。
- 原主节点恢复后,自动转为备节点(需配置抢占模式)。
三、部署步骤(以 DR 模式为例)
1. 环境准备
角色 | IP 地址 | 软件组件 |
---|---|---|
主 LVS 节点 | 192.168.1.100 | LVS+Keepalived |
备 LVS 节点 | 192.168.1.101 | LVS+Keepalived |
虚拟 IP(VIP) | 192.168.1.200 | - |
后端服务器 1 | 192.168.1.110 | Nginx+Keepalived(健康检查) |
后端服务器 2 | 192.168.1.111 | Nginx+Keepalived(健康检查) |
2. 主 LVS 节点配置
(1)安装 Keepalived
yum install keepalived -y
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
global_defs {
router_id LVS_MASTER # 节点标识,主备需不同
}
vrrp_instance VI_1 {
state MASTER # 主节点状态(备节点为BACKUP)
interface eth0 # 绑定VIP的网卡
virtual_router_id 51 # VRRP组ID(主备需一致)
priority 100 # 优先级(备节点设为90)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 认证密码(主备需一致)
}
virtual_ipaddress {
192.168.1.200/24 # 虚拟IP
}
}
# LVS健康检查(监控后端服务器)
virtual_server 192.168.1.200 80 {
delay_loop 6 # 健康检查间隔(秒)
lb_algo rr # 调度算法(轮询)
lb_kind DR # 工作模式(DR)
protocol TCP # 协议类型
# 后端服务器配置
real_server 192.168.1.110 80 {
weight 1 # 服务器权重
TCP_CHECK { # TCP健康检查
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.1.111 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3. 备 LVS 节点配置
- Keepalived 配置:与主节点基本一致,需修改:
state BACKUP # 状态改为BACKUP priority 90 # 优先级低于主节点 router_id LVS_BACKUP # 节点标识不同
- 内核参数配置:与主节点相同。
4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
(2)关闭 IP 转发
echo "0" > /proc/sys/net/ipv4/ip_forward
(3)启动 Nginx 服务
yum install nginx -y
systemctl start nginx
四、验证与维护
1. 状态检查
- 查看 Keepalived 状态:
systemctl status keepalived # 主节点应显示"Master",备节点显示"Backup"
- 查看 VIP 绑定情况:
ip addr show eth0 | grep 192.168.1.200 # 主节点应存在VIP
- LVS 规则检查:
ipvsadm -L -n # 应显示后端服务器列表
2. 故障切换测试
- 停止主节点 Keepalived 服务:
systemctl stop keepalived
- 检查备节点是否接管 VIP,且 LVS 规则正常。
- 重启主节点 Keepalived,验证是否恢复为备节点(非抢占模式需手动切换)。
五、注意事项
- 网络互通性:
- 主备 LVS 节点需与后端服务器网络互通(DR 模式需共享 VIP 所在网段)。
- 后端服务器响应流量需直接返回给客户端,避免经过 LVS(需配置路由或环回接口)。
- 健康检查优化:
- 根据业务类型选择检查方式(如 HTTP 检查需配置 URL 路径)。
- 调整检查间隔(
delay_loop
)和重试次数,避免误判。
- 防火墙配置:
- 开放 Keepalived 心跳端口(UDP 112)和业务端口(如 80、443)。
- 在 DR 模式中,确保后端服务器不响应 VIP 的 ARP 请求。
六、扩展场景
- 多 VRRP 组:为不同业务配置独立的 VRRP 组,实现更细粒度的高可用。
- 负载均衡与高可用分离:使用独立节点部署 Keepalived,避免与 LVS 共享资源。
- 结合云平台:在云环境中通过浮动 IP(EIP)和私有网络实现 LVS+Keepalived 架构。
命令解析
全局配置部分
global_defs {
router_id LVS_MASTER # 节点标识,主备需不同
}
global_defs
:定义全局参数
router_id
:标识 Keepalived 实例的唯一名称,主备节点必须不同,用于区分不同的 Keepalived 节点
VRRP 实例配置
vrrp_instance VI_1 {
state MASTER # 主节点状态(备节点为BACKUP)
interface eth0 # 绑定VIP的网卡
virtual_router_id 51 # VRRP组ID(主备需一致)
priority 100 # 优先级(备节点设为90)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 认证密码(主备需一致)
}
virtual_ipaddress {
192.168.1.200/24 # 虚拟IP
}
}
vrrp_instance VI_1
:定义 VRRP 实例,名称为 VI_1state MASTER
:当前节点的初始状态,主节点为 MASTER,备节点为 BACKUPinterface eth0
:绑定虚拟 IP 的物理网卡virtual_router_id 51
:VRRP 组 ID,取值范围 1-255,主备节点必须相同priority 100
:节点优先级,数值越大优先级越高,主节点应高于备节点advert_int 1
:发送 VRRP 通告的时间间隔(心跳间隔)authentication
:VRRP 认证配置,防止非法节点加入auth_type PASS
:密码认证方式auth_pass 1111
:认证密码,主备必须一致
virtual_ipaddress
:定义虚拟 IP 地址,可配置多个
LVS 虚拟服务器配置
virtual_server 192.168.1.200 80 {
delay_loop 6 # 健康检查间隔(秒)
lb_algo rr # 调度算法(轮询)
lb_kind DR # 工作模式(DR)
protocol TCP # 协议类型
virtual_server
:定义虚拟服务器,即负载均衡的 VIP 和端口delay_loop 6
:健康检查的时间间隔(秒)lb_algo rr
:负载均衡调度算法- rr:轮询(Round Robin)
- wrr:加权轮询
- lc:最少连接(Least Connections)
- wlc:加权最少连接
lb_kind DR
:LVS 工作模式- DR:直接路由模式(Direct Routing)
- NAT:网络地址转换模式
- TUN:IP 隧道模式
protocol TCP
:使用 TCP 协议进行负载均衡
后端服务器配置
real_server 192.168.1.110 80 {
weight 1 # 服务器权重
TCP_CHECK { # TCP健康检查
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server
:定义真实服务器(后端服务器)的 IP 和端口weight 1
:服务器权重,数值越大被分配的请求越多TCP_CHECK
:TCP 健康检查配置connect_port 80
:检查的端口connect_timeout 3
:连接超时时间(秒)retry 3
:重试次数delay_before_retry 3
:重试前的延迟时间(秒)
配置总结
这个配置文件实现了一个基于 DR 模式的 LVS 负载均衡器的高可用方案:
- 使用 Keepalived 实现主备节点自动切换
- 虚拟 IP 地址为 192.168.1.200,绑定在 eth0 网卡上
- 负载均衡采用轮询算法,工作在 DR 模式
- 对两个后端服务器(192.168.1.110 和 192.168.1.111)进行健康检查
- 当主节点出现故障时,备节点将接管虚拟 IP 继续提供服务
配置注意事项:
- 主备节点的 virtual_router_id 和 auth_pass 必须相同
- 主备节点的 state 和 priority 必须不同
- 后端服务器需要配置 VIP 的回环地址,并设置合适的 ARP 参数
- DR 模式下,后端服务器需要和 LVS 在同一个物理网段