12.5.3 配置要点与示例(virtual_server/real_server)

在 Keepalived 与 LVS 集成中,核心配置围绕 virtual_serverreal_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.confcat >> /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,验证会话是否仍被固定到同一后端。