12.5.3 配置要点与示例(virtual_server/real_server)
在 Keepalived 与 LVS 集成中,核心配置围绕 virtual_server 与 real_server 两部分展开:前者定义 VIP、端口、调度算法与转发模式,后者定义后端真实节点及健康检查。下面给出原理草图、安装准备、配置要点、完整示例、验证与排错、练习。
原理草图(LVS-DR)
安装与准备(节点角色:LB/RS)
# LB节点安装
yum -y install keepalived ipvsadm
# RS节点安装(只需服务与网络工具)
yum -y install nginx iproute
# 启动服务(示例:nginx)
systemctl enable --now nginx
配置要点(参数解释)
- virtual_server ip port:对外服务入口 VIP 与端口
- delay_loop:健康检查周期(秒)
- lb_algo:调度算法(rr/wrr/lc)
- lb_kind:转发模式(DR/NAT/TUN)
- protocol:协议(TCP/UDP)
- persistence_timeout:会话保持(秒)
- real_server ip port:后端节点
- weight:权重
- TCP_CHECK/HTTP_GET:健康检查策略与超时/重试
示例一:LVS-DR + TCP 服务(Keepalived 主节点)
文件:/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24 dev eth0
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
persistence_timeout 300
real_server 192.168.10.201 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
}
real_server 192.168.10.202 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
}
}
示例二:LVS-NAT + HTTP 服务(Keepalived 主节点)
文件:/etc/keepalived/keepalived.conf
virtual_server 10.0.0.10 8080 {
delay_loop 5
lb_algo rr
lb_kind NAT
protocol TCP
real_server 172.16.0.11 8080 {
weight 1
HTTP_GET {
url {
path /health
status_code 200
}
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
real_server 172.16.0.12 8080 {
weight 1
HTTP_GET {
url {
path /health
status_code 200
}
connect_timeout 3
nb_get_retry 2
delay_before_retry 1
}
}
}
DR 模式后端回环与 ARP 抑制(RS 节点)
# 绑定VIP到lo,避免对外响应ARP
ip addr add 192.168.10.100/32 dev lo
# ARP 抑制
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
# 持久化(/etc/sysctl.conf)
cat >> /etc/sysctl.conf <<'EOF'
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
EOF
sysctl -p
NAT 模式内核转发与 SNAT(LB 节点)
# 开启转发
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 若需要SNAT(示例:出向改写为LB地址)
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j SNAT --to-source 10.0.0.10
启动与验证
# 启动 keepalived
systemctl enable --now keepalived
# 查看VIP是否绑定
ip addr show dev eth0 | grep 192.168.10.100
# 查看LVS规则
ipvsadm -Ln
# 访问测试
curl -I http://192.168.10.100
常见排错(命令与解释)
# 1) VIP未漂移/未绑定
ip addr show | grep 192.168.10.100
# 2) 规则未生成
ipvsadm -Ln
# 3) 后端健康检查失败(检查端口与路径)
curl -I http://192.168.10.201/health
curl -I http://192.168.10.202/health
# 4) DR 模式回包异常(RS上确认VIP在lo)
ip addr show dev lo | grep 192.168.10.100
练习
1. 将 lb_algo 改为 lc,观察 ipvsadm -Ln 中的调度策略变化。
2. 在 RS2 上停止 nginx,观察 Keepalived 是否从调度池剔除该节点。
3. 将 persistence_timeout 设置为 0,验证会话是否仍被固定到同一后端。