LVS 集群技术实践:NAT 与 DR 模式的配置与对比

发布于:2025-07-20 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. 引言

  • 背景:简要介绍 LVS(Linux Virtual Server)是什么,为什么需要负载均衡技术(如高可用性、高并发、扩展性等)。
  • 目标:说明本文的目标是通过实验验证 LVS 的 NAT 模式和 DR 模式,并对比两者的差异与适用场景。
  • 读者对象:适合有一定 Linux 基础、对网络负载均衡感兴趣的技术人员或运维工程师。

2. LVS 技术概述

2.1 LVS 的核心概念

  • LVS 的组成
    • Director(调度器):接收客户端请求并转发到后端服务器。
    • Real Server(真实服务器):处理具体业务请求的后端服务器。
    • VIP(虚拟 IP):对外提供服务的 IP。
    • DIP(Director IP):调度器的 IP。
    • RIP(Real Server IP):后端服务器的 IP。
  • LVS 的工作模式
    • NAT(Network Address Translation)
    • DR(Direct Routing)
    • TUN(IP Tunneling)(可简要提及,但重点放在实验的 NAT 和 DR 模式上)。

2.2 LVS 的调度算法

  • 静态算法:轮询(RR)、加权轮询(WRR)、源地址哈希(SH)。
  • 动态算法:最少连接(LC)、加权最少连接(WLC)。
  • 适用场景:根据业务需求选择合适的算法。

3. LVS-NAT模式集群实验

3.1 实验环境规划

实验目标是搭建一个负载均衡集群,通过 LVS 调度器将流量分发到两台真实服务器(RS1 和 RS2)。

主机名 角色 网卡配置 IP 地址分配
VS LVS 调度器 (VS) 双网卡: - 网卡1:NAT 模式(172.25.254.0/24) - 网卡2:仅主机模式(192.168.0.0/24) - VIP:172.25.254.100(NAT 模式) - DIP:192.168.0.100(仅主机模式)
RS1 真实服务器 (RS1) 单网卡:仅主机模式(192.168.0.0/24) - RIP:192.168.0.101
RS2 真实服务器 (RS2) 单网卡:仅主机模式(192.168.0.0/24) - RIP:192.168.0.102
Client 测试机 单网卡:NAT 模式(172.25.254.0/24) - 任意 IP(可动态分配)

3.2 网络配置详解

1. 网卡模式说明

  • NAT 模式:允许主机访问外部网络,适合调度器 VS 和测试机 Client 的外网接口。

  • 仅主机模式:隔离外部网络,仅在虚拟机内部通信,适合调度器 VS 的内网接口和真实服务器(RS2/RS3)。

2. 每台主机的网卡配置

VS(调度器)
  • 网卡1(NAT 模式):

    • 配置 IP:172.25.254.100/24

    • 网关:172.25.254.2(根据虚拟机 NAT 网络配置)

  • 网卡2(仅主机模式):

    • 配置 IP:192.168.0.100/24

RS1 和 RS2
  • 网卡(仅主机模式):

    • RS2:192.168.0.101/24,网关:192.168.0.100

    • RS3:192.168.0.102/24,网关:192.168.0.100

Client(测试机)
  • 网卡(NAT 模式):

    • 配置 IP:172.25.254.101/24(可动态分配)

    • 网关:172.25.254.2

验证网关

[root@VS ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.2    0.0.0.0         UG    100    0        0 ens160
0.0.0.0         192.168.0.100   0.0.0.0         UG    101    0        0 ens192
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.0.0     0.0.0.0         255.255.255.0   U     101    0        0 ens192
​
[root@RS1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens160
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens160

[root@RS2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens160
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens160

[root@Client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.2    0.0.0.0         UG    100    0        0 ens160
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160

3.3 实验步骤

1. 所有主机的基础配置

  • 关闭防火墙和 SELinux

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
  • 安装 HTTP 服务(在 RS21和 RS2 上):

sudo dnf install -y httpd
sudo systemctl enable --now httpd
在 RS1 上创建测试页面:

echo "RS1 server - 192.168.0.101" > /var/www/html/index.html
在 RS2 上创建测试页面:

echo "RS2 server - 192.168.0.102" > /var/www/html/index.html

2. VS(调度器)配置

(1) 启用 IP 转发
sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
sudo sysctl --system

作用:
IP 转发(IP Forwarding) 是 Linux 内核的功能,允许系统将接收到的数据包从一个网络接口转发到另一个网络接口。
在 LVS-NAT 模式 中,调度器需要将客户端的请求(VIP:80)转发到真实服务器(RIP:80),并将真实服务器的响应返回给客户端。如果未启用 IP 转发,调度器会丢弃这些数据包,导致服务不可用。
# 验证是否启用

cat /proc/sys/net/ipv4/ip_forward

# 输出应为 1

(2) 安装 ipvsadm 工具
sudo dnf install -y ipvsadm
(3) 配置 LVS-NAT 规则
  • 添加虚拟服务器(VIP)和真实服务器(RIP):

    # 添加虚拟服务器(轮询算法)
    sudo ipvsadm -A -t 172.25.254.100:80 -s rr
    ​
    # 添加真实服务器(NAT 模式)
    sudo ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
    sudo ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
  • 验证规则:

sudo ipvsadm -Ln
# 输出示例:
# TCP  172.25.254.100:80 rr
# -> 192.168.0.101:80         Masq    1      0          0         
# -> 192.168.0.102:80         Masq    1      0          0
(4) 保存规则并设置开机启动
# 保存规则到配置文件
sudo ipvsadm -S > /etc/sysconfig/ipvsadm
​
# 设置开机启动
sudo systemctl enable --now ipvsadm

3. node2 和 node3(真实服务器)配置

  • 设置默认网关(确保响应流量通过调度器返回):

    sudo ip route add default via 192.168.0.100
  • 验证网关

    [root@RS1 ~]# ip route
    default via 192.168.0.100 dev ens160 proto static metric 100 
    192.168.0.0/24 dev ens160 proto kernel scope link src 192.168.0.101 metric 100 
    [root@RS1 ~]# 
    ​
    ​
    [root@RS2 ~]# ip route
    default via 192.168.0.100 dev ens160 proto static metric 100 
    192.168.0.0/24 dev ens160 proto kernel scope link src 192.168.0.102 metric 100 
    [root@RS2 ~]# 
    ​

4. Client(测试机)验证

  • 使用curl测试负载均衡:

    for N in {1..6}; do curl 172.25.254.100; done
    • 预期结果:输出交替显示 RS1 server - 192.168.0.101RS2 server - 192.168.0.102,表示轮询生效。

3.4 进阶配置

1. 修改为加权轮询(WRR)

  • 调整调度算法和权重

    # 修改虚拟服务器的调度算法
    sudo ipvsadm -E -t 172.25.254.100:80 -s wrr
    ​
    # 修改真实服务器的权重
    sudo ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101:80 -m -w 2
    sudo ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.102:80 -m -w 1
  • 测试加权轮询

    for N in {1..6}; do curl 172.25.254.100; done
    • 预期结果RS1 的访问次数是 RS2 的两倍(权重 2:1)。

3.5 总结

  • LVS-NAT 模式特点

    • 调度器负责地址转换(SNAT/DNAT),所有流量需经过调度器。

    • 真实服务器的网关必须指向调度器的 DIP。

    • 适合后端服务器数量较少的场景。

  • 实验成功标志

    • 测试机访问 VIP 时,流量能正确分发到两台真实服务器。

    • 加权轮询算法生效,访问比例符合权重配置。

4. LVS-DR模式集群实验

4.1 实验目标

  1. 在LVS-DR模式下实现负载均衡。

  2. 客户端通过VIP访问Web服务,请求被分发到RS1和RS2。

  3. 验证DR模式的流量转发机制和负载均衡策略。


4.2 实验环境

主机名 角色 网卡配置 VIP(Virtual IP)
client 测试客户端 ens160(NAT模式): 172.25.254.10/24,网关 172.25.254.100
router 路由器 ens160(NAT模式): 172.25.254.100/24 ens192(仅主机模式): 192.168.0.10/24
lvs 调度器 ens160(仅主机模式): 192.168.0.200/24,网关 192.168.0.10 192.168.0.100(lo接口)
rs1 真实服务器1 ens160(仅主机模式): 192.168.0.101/24,网关 192.168.0.10 192.168.0.100(lo接口)
rs2 真实服务器2 ens160(仅主机模式): 192.168.0.102/24,网关 192.168.0.10 192.168.0.100(lo接口)

4.3 实验步骤

1. 环境准备

1.1 关闭防火墙和SELinux

在所有主机上执行以下命令:

# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
​
# 关闭SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.2 网络配置
配置 client 主机、route主机、LVS主机、RS1和RS2主机(以client为例)
  1. 编辑 ens160 的网络配置文件:

    [root@client ~]# vim /etc/NetworkManager/systemconnections/ens160.nmconnection

    内容如下:

    [connection]
    id=ens160
    type=ethernet
    interface-name=ens160
    ​
    [ipv4]
    method=manual
    address1=172.25.254.10/24,172.25.254.100
  2. 重启网络服务:

    [root@client ~]# nmcli connection reload
    [root@client ~]# nmcli connection up ens160
  3. 验证路由表:

    [root@client ~]# route -n
    # 输出应包含默认网关 172.25.254.100
    ​
    [root@Client ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 ens160
    172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160

4.验证网络连通性:

在所有主机上执行以下命令,确保网络互通:

ping 192.168.0.10      # 测试到路由器
ping 192.168.0.101     # 测试到RS1
ping 192.168.0.102     # 测试到RS2

2. 安装必要的软件

2.1 安装 httpdipvsadm
[root@lvs ~]# dnf install -y ipvsadm
[root@rs1 ~]# dnf install -y httpd
[root@rs2 ~]# dnf install -y httpd
2.2 启动并启用 httpd 服务
[root@rs1 ~]# systemctl enable --now httpd
[root@rs2 ~]# systemctl enable --now httpd


3. 配置 VIP 和 ARP 参数

3.1 在 lvsrs1rs2 上配置 VIP
  1. 添加 VIP 到 lo 接口:

    [root@lvs ~]# ip addr add 192.168.0.100/32 dev lo
    [root@rs1 ~]# ip addr add 192.168.0.100/32 dev lo
    [root@rs2 ~]# ip addr add 192.168.0.100/32 dev lo
  2. 验证 VIP 是否生效:

    [root@lvs ~]# ip a show dev lo
    ​
    [root@LVS ~]# ip a show dev lo
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet 192.168.0.100/32 scope global lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
3.2 调整 ARP 参数(rs1rs2
  1. 临时设置 ARP 参数:

    [root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    [root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    [root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    ​
    [root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    [root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    [root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  2. 持久化 ARP 参数:

    [root@rs1 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
    [root@rs1 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
    [root@rs1 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
    [root@rs1 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
    [root@rs1 ~]# sysctl -p
    ​
    [root@rs2 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
    [root@rs2 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
    [root@rs2 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
    [root@rs2 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
    [root@rs2 ~]# sysctl -p

4. 配置 LVS 调度器(lvs

4.1 添加 IPVS 规则
  1. 创建虚拟服务(VIP:80)并设置加权轮询(WRR)算法:

    [root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
  2. 添加真实服务器(RS1 和 RS2):

    [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
    [root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
  3. 验证 IPVS 规则:

    [root@lvs ~]# ipvsadm -Ln
    # 输出示例:
    TCP  192.168.0.100:80 wrr
      -> 192.168.0.101:80 Route   1      0          0         
      -> 192.168.0.102:80 Route   1      0          0         
4.2 保存 IPVS 规则
  1. 保存规则到文件:

    [root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
  2. 设置开机自动加载规则:

    [root@lvs ~]# systemctl enable ipvsadm
    [root@lvs ~]# systemctl start ipvsadm

5. 配置 Web 服务器(rs1rs2

5.1 配置测试页面
  1. rs1 上创建测试页面:

    [root@rs1 ~]# echo "RS1 server - 192.168.0.101" > /var/www/html/index.html
  2. rs2 上创建测试页面:

    [root@rs2 ~]# echo "RS2 server - 192.168.0.102" > /var/www/html/index.html

6. 测试 LVS-DR 模式

6.1 在 client 上测试负载均衡
  1. 访问 VIP 并观察轮询效果:

[root@client ~]# for N in {1..6}; do curl http://192.168.0.100; done
# 预期输出交替显示 RS1 和 RS2 的内容

      2. 修改服务器权重

sudo ipvsadm -e -t 192.168.0.100:80 -r 192.168.0.101:80 -g -w 3
sudo ipvsadm -e -t 192.168.0.100:80 -r 192.168.0.102:80 -g -w 1

再次观察轮询效果:

5.NAT与DR模式的对比

特性 NAT 模式 DR 模式
流量路径 请求和响应均经过 Director 请求经过 Director,响应直接返回客户端
性能 较低(Director 成为瓶颈) 高(适合大规模集群)
网络要求 Real Server 可跨网络 Real Server 必须与 Director 同局域网
配置复杂度 简单 较复杂(需配置 ARP 和 VIP)
适用场景 小型集群(后端服务器数量少) 大型集群(高性能需求)

实际应用建议

  • 选择 NAT 模式:适用于后端服务器数量较少、网络环境简单的场景(如小型 Web 服务)。

  • 选择 DR 模式:适用于高性能、高并发的场景(如大型 Web 服务、数据库集群)。

  • 结合 Keepalived:通过 Keepalived 实现 Director 的高可用性(主备切换)。


网站公告

今日签到

点亮在社区的每一天
去签到