LVS+Keepalived 高可用
目录
一、核心概念
1. LVS(Linux Virtual Server)
2. Keepalived
二、高可用架构设计
1. 架构拓扑图
2. 工作流程
三、部署步骤(以 DR 模式为例)
1. 环境准备
2. 主 LVS 节点配置
(1)安装 Keepalived
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
3. 备 LVS 节点配置
4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
(2)关闭 IP 转发
(3)启动 Nginx 服务
四、验证与维护
1. 状态检查
2. 故障切换测试
五、注意事项
六、扩展场景
命令解析
全局配置部分
VRRP 实例配置
LVS 虚拟服务器配置
后端服务器配置
配置总结
一、核心概念
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 PASSauth_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 80connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.1.111 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3retry 3delay_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 PASSauth_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 80connect_timeout 3retry 3delay_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 在同一个物理网段