集群、分布式与 LVS 负载均衡详解

发布于:2025-07-29 ⋅ 阅读:(30) ⋅ 点赞:(0)

一、集群和分布式简介

1.1 系统性能扩展方式

  • Scale UP:向上扩展,通过增强单台设备的性能(如提升 CPU、内存、硬盘等)来提高系统性能。
  • Scale Out:向外扩展,通过增加设备数量,并解决设备间的调度分配问题,形成集群(Cluster)来提升系统性能。

1.2 集群(Cluster)

集群(Cluster)是为解决某个特定问题,将多台计算机组合起来形成的单个系统。常见的三种类型如下:

  • LB(Load Balancing,负载均衡):由多个主机组成,每个主机仅承担一部分访问请求,实现请求的均衡分配。
  • HA(High Availability,高可用):解决单点故障(SPOF,Single Point Of Failure)问题,确保服务持续可用。
    • MTBF(Mean Time Between Failure):平均无故障时间,即系统正常运行的时间。
    • MTTR(Mean Time To Restoration/Repair):平均恢复前时间,即系统发生故障后恢复正常的时间。
    • 可用性公式:A = MTBF /(MTBF + MTTR),取值范围为 (0,1),常见指标为 99%、99.5%、99.9%、99.99%、99.999%。
    • SLA(Service Level Agreement,服务等级协议):服务提供商与用户间定义的协定,规定服务性能和可用性标准(如 “三个 9”“四个 9”),未达标可能有惩罚措施,运维的核心目标是达成 SLA。
    • 停机时间分为计划内停机计划外停机,运维重点关注计划外停机。
  • HPC(High-performance Computing,高性能计算):属于国家战略资源,不在常规课程范围内。

1.3 分布式

分布式系统通过将任务拆分到多台设备上协同完成,常见应用场景包括:

  • 分布式存储:Ceph、GlusterFs、FastDFS、MogileFs 等。
  • 分布式计算:Hadoop、Spark 等。
  • 分布式常见应用
    • 分布式应用:服务按功能拆分,采用微服务架构。
    • 分布式静态资源:静态资源(如图片、视频)存储在不同的集群上。
    • 分布式数据和存储:使用 key-value 缓存系统(如 Redis 集群)。
    • 分布式计算:针对特殊业务(如大数据处理)使用分布式计算框架(如 Hadoop 集群)。

1.4 集群和分布式的区别

  • 集群:同一业务系统部署在多台服务器上,每台服务器功能、数据、代码完全一致,通过 “提高单位时间内执行的任务数” 提升效率。
  • 分布式:一个业务拆分为多个子业务(或本身是不同业务),部署在多台服务器上,每台服务器功能、数据、代码有差异,组合起来才是完整业务。通过 “缩短单个任务的执行时间” 提升效率。

举例

  • 大型网站的负载均衡集群:前端部署负载均衡服务器,后端多台服务器运行同一业务,某台服务器故障时其他服务器可顶替。
  • 分布式系统:若一个业务拆分为用户服务、订单服务、支付服务,分别部署在不同服务器上,某台服务器故障会导致对应子业务失效。

二、LVS(Linux Virtual Server)运行原理

2.1 LVS 简介

LVS(Linux Virtual Server)是内核集成的负载调度器,由章文嵩博士开发。阿里的四层 SLB(Server Load Balance)基于 LVS+keepalived 实现。

  • 核心术语
    • VS(Virtual Server):负载调度器,负责请求调度。
    • RS(Real Server):真实服务器,负责实际提供服务。

2.2 LVS 集群体系结构

LVS 集群由 VS(调度器)和多个 RS(真实服务器)组成,VS 接收客户端请求并调度至合适的 RS,RS 处理请求后响应客户端(具体流程因工作模式而异)。

2.3 LVS 核心概念

  • CIP(Client IP):客户端 IP 地址。
  • VIP(Virtual Server IP):VS 对外提供服务的 IP 地址(外网 IP)。
  • DIP(Director IP):VS 内网的 IP 地址(与 RS 通信的 IP)。
  • RIP(Real Server IP):RS 的 IP 地址。

访问流程:CIP <--> VIP == DIP <--> RIP

2.4 LVS 集群的类型

LVS 有四种核心工作模式,分别通过不同的报文处理方式实现负载均衡:

2.4.1 NAT 模式(lvs-nat)
  • 本质:多目标 IP 的 DNAT(目标地址转换),通过修改请求报文的目标 IP 和端口为某台 RS 的 RIP 和端口实现转发。
  • 特点
    • RIP 和 DIP 需在同一 IP 网络(建议使用私网地址),且 RS 的网关必须指向 DIP。
    • 请求报文和响应报文均需经过 Director,Director 易成为系统瓶颈。
    • 支持端口映射(可修改请求报文的目标端口)。
    • VS 必须是 Linux 系统,RS 可是任意 OS。
2.4.2 NAT 模式数据逻辑
  1. 客户端发送请求,数据包包含源 IP(CIP)、目标 IP(VIP)、目标端口(如 9000)。
  2. VS 接收请求后,执行 DNAT:将目标 IP(VIP)改为 RS 的 RIP,目标端口改为 RS 的端口(如 80)。
  3. RS 处理请求后,响应数据包包含源 IP(RIP)、目标 IP(CIP)、目标端口(9000)。
  4. VS 接收响应后,修改源 IP(RIP→VIP)、源端口(80→9000),再回传给客户端。
  5. 注意:NAT 模式下,客户端请求和响应均经过 VS,可能导致 VS 阻塞;需清理 iptables 规则(IPVS 工作在 PREROUTING 和 INPUT 链之间,iptables 规则可能干扰)。
2.4.3 DR 模式(lvs-dr)
  • 本质:Direct Routing(直接路由),LVS 默认模式,应用最广泛。通过为请求报文重新封装 MAC 首部转发:源 MAC 为 DIP 所在接口的 MAC,目标 MAC 为选中 RS 的 RIP 所在接口的 MAC;源 IP / 端口、目标 IP / 端口均不变。
2.4.4 DR 模式数据传输过程
  1. 客户端发送数据帧:包含源 IP(CIP)、源 MAC(客户端 MAC)、目标 IP(VIP)、目标 MAC(VIP 的 MAC)。
  2. VS 接收后,修改数据帧的目标 MAC 为选中 RS 的 MAC(如 RS1 的 MAC),其他信息不变。
  3. RS 接收数据帧后,处理请求并响应,响应数据包包含源 IP(VIP)、源 MAC(RS1 的 MAC)、目标 IP(CIP)、目标 MAC(客户端 MAC),直接回传给客户端。
  4. 仅请求报文经过 Director,响应报文由 RS 直接发往客户端,性能优于 NAT。
  5. 不支持端口映射,RS 可使用大多数 OS。
2.4.5DR模式数据传输过程
  • Director 和所有 RS 均需配置 VIP(避免地址冲突需特殊处理)。
  • 需确保前端路由器将目标 IP 为 VIP 的请求发往 Director(可通过网关静态绑定、arptables 或内核参数限制 ARP 响应)。
  • RIP 与 DIP 需在同一 IP 网络(可使用私网地址),RS 的网关不能指向 DIP(避免响应报文经过 VS)。
  • 仅请求报文经过 Director,响应报文由 RS 直接发往客户端,性能优于 NAT。
  • 不支持端口映射,RS 可使用大多数 OS。
2.4.6 TUN 模式(lvs-tun,了解)
  • 本质:在原请求报文外封装新 IP 首部(源 IP 为 DIP,目标 IP 为 RIP),原 IP 首部(源 IP=CIP,目标 IP=VIP)不变;RS 处理后直接响应客户端(源 IP=VIP,目标 IP=CIP)。
2.4.7 TUN 模式特点
  • DIP、VIP、RIP 均需为公网地址(支持远距离通信)。
  • RS 的网关一般不指向 DIP,请求报文经过 Director,响应报文直接发往客户端。
  • 不支持端口映射,RS 的 OS 需支持隧道功能。
2.4.8 fullnat 模式(lvs-fullnat,了解)
  • 本质:同时修改请求报文的源 IP(CIP→DIP)和目标 IP(VIP→RIP)。
  • 特点
    • VIP 为公网地址,RIP 和 DIP 为私网地址(可不在同一网络),RS 网关一般不指向 DIP。
    • 请求和响应报文均经过 Director(RS 响应给 DIP,再由 Director 转发给客户端)。
    • 支持端口映射。

2.4.9 LVS 工作模式总结
模式 请求 / 响应路径 网络要求 端口映射 RS OS 限制
lvs-nat 均经过 Director RIP 与 DIP 同网段,RS 网关指向 DIP 支持
lvs-dr 请求经 Director,响应直连客户端 RIP 与 DIP 同网段 不支持
lvs-tun 请求经 Director,响应直连客户端 均为公网地址 不支持 需支持隧道
lvs-fullnat 均经过 Director RIP 与 DIP 可不同网段 支持
2.4.10. fullnet模式(了解)

ullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

        CIP --> DIP

        VIP --> RIP

        1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP

        2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client

        3.请求和响应报文都经由Director

        4.支持端口映射

2.5 LVS 的调度算法

LVS 调度算法分为静态方法(不考虑 RS 负载)和动态方法(基于 RS 当前负载调度)。

2.5.1 静态调度算法
  • RR(Round Robin,轮询):按顺序将请求分配给 RS,不考虑 RS 性能差异,适用于 RS 配置一致的场景。
  • WRR(Weighted RR,加权轮询):根据 RS 权重分配请求,权重高的 RS 被调度次数多(性能好的 RS 可设高权重)。
  • SH(Source Hashing,源地址哈希):对客户端 IP 哈希,同一 IP 的请求始终调度到第一次选中的 RS,实现会话绑定。
  • DH(Destination Hashing,目标地址哈希):对目标地址哈希,同一目标地址的请求始终调度到第一次选中的 RS,适用于正向代理缓存场景(如宽带运营商)。
2.5.2 动态调度算法

基于 RS 当前负载(Overhead,负载值)调度,Overhead 越小的 RS 优先被选中。

  • LC(Least Connections,最少连接):适用于长连接应用,Overhead = 活动连接数 ×256 + 非活动连接数。
  • WLC(Weighted LC,加权最少连接):默认调度算法,Overhead =(活动连接数 ×256 + 非活动连接数)/ 权重。
  • SED(Shortest Expection Delay,最短预期延迟):初始连接优先分配给高权重 RS,Overhead =(活动连接数 + 1 + 非活动连接数)×256 / 权重。
  • NQ(Never Queue,无队列):第一轮均匀分配请求,后续按 SED 调度。
  • LBLC(Locality-Based LC,基于本地的最少连接):动态 DH 算法,适用于正向代理场景。
  • LBLCR(LBLC with Replication,带复制的 LBLC):解决 LBLC 负载不均衡问题,将负载重的 RS 任务复制到负载轻的 RS。
2.5.3 内核 4.15 + 新增调度算法
  • FO(Weighted Fail Over,加权故障转移):常用于灰度发布。遍历 RS 链表,选择未过载(未设置 IP_VS_DEST_F_OVERLOAD 标志)且权重最高的 RS;过载 RS 不被调度。
  • OVF(Overflow-connection,溢出连接):基于 RS 活动连接数和权重调度。优先调度到权重最高的 RS,直到其活动连接数超过权重,再调度到下一个高权重 RS(需满足未过载、权重非零)。

三、LVS 部署命令介绍

3.1 LVS 软件相关信息

  • 程序包:ipvsadm
  • Unit File:ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • 调度规则文件:/etc/sysconfig/ipvsadm

3.2 ipvsadm 命令核心功能

ipvsadm 用于管理 LVS 集群服务和真实服务器(RS),包括增删改查操作。

管理集群服务
 ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
 
        service-address(集群地址) \
 
        [-s scheduler(调度算法)] \
 
        [-p [timeout]] \
 
        [-M netmask] \
 
        [--pepersistence_engine] \
 
 
 
        [-b sched-flags] ipvsadm -D -t|u|f service-address 删除
 
        ipvsadm –C 清空
 
        ipvsadm –R 重载
 
        ipvsadm -S [-n] 保存
  • 参数说明
    • -A:新增集群服务;-E:修改集群服务。
    • -t:TCP 服务;-u:UDP 服务;-f:防火墙标记(数字)。
    • -s:指定调度算法(默认 WLC)。
    • -p [timeout]:设置持久连接超时(同一客户端在超时内请求调度到同一 RS)。
管理集群中的 Real Server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)
 
ipvsadm -d -t|u|f service-address -r server-address            删除RS
 
ipvsadm -L|l [options]                                         查看rs
 
ipvsadm -Z [-t|u|f service-address]                            清楚计数器
  • 参数说明
    • -a:新增 RS;-e:修改 RS。
    • -r:指定 RS 地址。
    • -g:DR 模式;-i:TUN 模式;-m:NAT 模式。
    • -w:设置 RS 权重。

3.3 LVS 集群规则增删改示例

1. 集群服务管理
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
 
-A           #添加
 
-E           #修改
 
-t            #tcp服务
 
-u           #udp服务
 
-s           #指定调度算法,默认为WLC
 
-p           #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
 
-f            #firewall mask 火墙标记,是一个数字

#增加

[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
 
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000

#修改

[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000

#删除

[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
 
[root@DR-server ~]# ipvsadm -D -f 66

2.管理集群中RealServer的曾增删改

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
 
-a           #添加realserver
 
-e           #更改realserver
 
-t            #tcp协议
 
-u           #udp协议
 
-f            #火墙 标签
 
-r            #realserver地址
 
-g           #直连路由模式
 
-i            #ipip隧道模式
 
-m          #nat模式
 
-w           #设定权重
 
-Z           #清空计数器
 
-C           #清空lvs策略
 
-L            #查看lvs策略
 
-n           #不做解析 --rate :输出速率信息

#添加

[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
 
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2


#更改

[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
 
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1


#删除

[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30

  pvs规则:/proc/net/ip_vs

 ipvs连接:/proc/net/ip_vs_conn

四、LVS 实战案例

4.1 部署 NAT 模式集群案例

4.1.1 实验环境
  • 调度器(VS):双网卡(外网网卡:桥接,内网网卡:仅主机,IP:192.168.0.100)。
  • 真实服务器(RS):单网卡(仅主机,IP:192.168.1.10、192.168.1.20),网关指向 VS 内网 IP(192.168.0.100),无需外网。

4.1.1.实验环境

真实服务器(RS)

调度器

4.1.2.配置命令

        1.在node1中启用内核路由功能      

    ]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
 
    ]# sysctl --system

 2.在node1中安装ipvsadm

]# yum install ipvsadm -y

  3.在node1中添加调度策略

]# ipvsadm -A -t 172.0.0.30:80 -s rr
 
]# ipvsadm -a -t 172.0.0.30:80 -r 192.168.1.10:80 -m
 
]# ipvsadm -a -t 172.0.0.30:80 -r 192.168.1.20:80 -m

  4.查看策略

]# ipvsadm -Ln
 
IP Virtual Server version 1.2.1 (size=4096)
 
Prot LocalAddress:Port Scheduler Flags
 
    -> RemoteAddress:Port                       Forward Weight ActiveConn InActConn
 
TCP 172.0.0.30:80 rr
 
    -> 192.168.1.10:80                             Masq         1         0          0
 
    -> 192.168.1.20:80                             Masq         1         0          0
]# cat /proc/net/ip_vs
 
IP Virtual Server version 1.2.1 (size=4096)
 
Prot LocalAddress:Port Scheduler Flags
 
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
 
TCP AC19FE64:0050 rr
 
-> C0A80066:0050                                  Masq          1          0          0
 
-> C0A80065:0050                                  Masq          1          0          0
]# cat /proc/net/ip_vs
 
IP Virtual Server version 1.2.1 (size=4096)
 
Prot LocalAddress:Port Scheduler Flags
 
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
 
TCP AC19FE64:0050 rr
 
-> C0A80066:0050                                  Masq          1          0          0
 
-> C0A80065:0050                                  Masq          1          0          0
]# cat /proc/net/ip_vs_conn
 
Pro    FromIP      FPrt     ToIP            TPrt     DestIP          DPrt     State               Expires  PEName  PEData
 
TCP   AC19FE01 D82F    AC19FE64   0050   C0A80066    0050    TIME_WAIT     117
 
TCP   AC19FE01 D830    AC19FE64   0050   C0A80065    0050    TIME_WAIT     117
 
TCP   AC19FE01 D832    AC19FE64   0050   C0A80065    0050    TIME_WAIT     117
 
TCP   AC19FE01 D834    AC19FE64   0050   C0A80065    0050    TIME_WAIT     117
 
TCP   AC19FE01 D831    AC19FE64   0050   C0A80066    0050    TIME_WAIT     117
 
TCP   AC19FE01 D833    AC19FE64   0050   C0A80066    0050    TIME_WAIT     117

  5.保存规则

]# ipvsadm -Sn
 
-A -t 172.0.0.30:80 -s rr
 
-a -t 172.0.0.30:80 -r 192.168.1.10:80 -m -w 1
 
-a -t 172.0.0.30:80 -r 192.168.1.20:80 -m -w 1
 
]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config

    6.删除所有规则

]# ipvsadm -C
 
]# ipvsadm -Ln
 
IP Virtual Server version 1.2.1 (size=4096)
 
Prot LocalAddress:Port Scheduler Flags
 
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

7.重新加载规则

]# ipvsadm -R < /etc/sysconfig/ipvsadm-config ]
 
# ipvsadm -Ln
 
IP Virtual Server version 1.2.1 (size=4096)
 
Prot LocalAddress:Port Scheduler Flags
 
    -> RemoteAddress:Port                       Forward Weight ActiveConn InActConn
 
TCP 172.0.0.30:80 rr
 
    -> 192.168.1.10:80                             Masq         1         0          0
 
    -> 192.168.1.20:80                             Masq         1         0          0

   8.以上操作均为临时,如果想开机启动

 9.测试:

]# for N in {1..6};do curl 172.0.0.30;done
 
RS2 server - 192.168.1.20
 
RS1 server - 192.168.1.10
 
RS2 server - 192.168.1.20
 
RS1 server - 192.168.1.10
 
RS2 server - 192.168.1.20
 
RS1 server - 192.168.1.10

  

   10.修改为权重调用算法

]# ipvsadm -E -t 172.25.254.100:80 -s wrr
 
]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101:80 -m -w 2
 
]# 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.0.0.30;done
 
RS2 server - 192.168.1.20
 
RS1 server - 192.168.1.10
 
RS2 server - 192.168.1.10
 
RS1 server - 192.168.1.20
 
RS2 server - 192.168.1.10
 
RS1 server - 192.168.1.10

4.2 部署 DR 模式集群案例

4.2.1 实验环境
  • 客户端:IP 172.25.254.10/24,网关指向 VS 的 VIP(172.25.254.100)。
  • VS(调度器):VIP 192.168.0.100,DIP 192.168.0.200,网关 192.168.0.10。
  • RS1:RIP 192.168.0.101,VIP 192.168.0.100(lo 接口),网关 192.168.0.10。
  • RS2:RIP 192.168.0.102,VIP 192.168.0.100(lo 接口),网关 192.168.0.10。
4.2.2 解决 VIP 地址冲突

DR 模式中所有节点均配置 VIP,需限制 ARP 响应和通告避免冲突,通过修改 RS 内核参数实现:

#在客户端主机中为nat模式网卡
 
[root@client ~]# vim/etc/NetworkManager/system-connections/eth0.nmconnection
 
[connection]
 
id=eth160
 
type=ethernet
 
interface-name=eth160
 
[ipv4]
 
method=manual
 
address1=172.25.254.10/24,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        eth160
 
172.25.254.0     0.0.0.0                     255.255.255.0 U          100          0         0        eth160

 

  #在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡

        #对于eth160的设定

[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
 
[connection]
 
id=eth160
 
type=ethernet
 
interface-name=eth160
 
 
 
[ipv4] method=manual
 
address1=172.25.254.100/24

#对于eth192的设定

[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
 
[connection]
 
id=eth192
 
type=ethernet
 
interface-name=eth192
 
 
 
[ipv4]
 
method=manual
 
address1=192.168.0.10/24

 

#对于dr调度器设定网卡为仅主机模式

[root@dr-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
 
[connection]
 
id=eth160
 
type=ethernet
 
interface-name=eth160
 
 
 
[ipv4]
 
method=manual
 
address1=192.168.0.200/24,192.168.0.10

[root@dr-server ~]# route -n

Kernel IP routing table   

Destination    Gateway            Genmask           Flags    Metric   Ref    Use     Iface

0.0.0.0            192.168.0.10      0.0.0.0               UG        100        0       0         eth160

192.168.0.0     0.0.0.0               255.255.255.0    U          100        0       0        eth16

[root@webserver1 ~]# route -n

Kernel IP routing table

Destination      Gateway                 Genmask        Flags     Metric     Ref     Use     Iface

0.0.0.0              192.168.0.10        0.0.0.0                UG        100          0         0        eth160

192.168.0.0     0.0.0.0                     255.255.255.0   U          100          0         0        eth160

 #对于RS2中的网络设定

[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
 
[connection]
 
id=eth0
 
type=ethernet
 
interface-name=eth0
 
 
 
[ipv4]
 
method=manual
 
address1=192.168.0.102/24,192.168.0.10

[root@webserver2 ~]# route -n

Kernel IP routing table

Destination      Gateway                 Genmask            Flags     Metric     Ref     Use     Iface

 0.0.0.0             192.168.0.10            0.0.0.0                UG        100          0         0        eth160

192.168.0.0       0.0.0.0                     255.255.255.0     U          100          0         0        eth160

 确保每台主机ping都可以互相通信

4.2.2解决vip响应问题
        DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

        (1)在前端网关做静态绑定

        (2)在各RS使用arptables

        (3)在各RS修改内核参数,来限制arp响应和通告的级别

                限制响应级别:arp_ignore

                        0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

                        1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

                限制通告级别:arp_announce

                        0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

                        1:尽量避免将接口信息向非直接连接网络进行通告

                        2:必须避免将接口信息向非本网络进行通告
 

# RS1配置
[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

# RS2配置(同上)
[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

4.2.3.配置详情
        配置要点

                1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP

                2.Web服务器采用和DIP相同的网段和Director连接

                3.每个Web服务器配置VIP

                4.每个web服务器可以出外网

        配置内容如下:

        在RS1和RS2中解决响应问题

[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

    在lvs中配置策略

[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
 
[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

[root@lvs ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

    -> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP  192.168.0.100:80 rr

    -> 192.168.0.101:80                Route      1      0       0

    -> 192.168.0.102:80                Route      1      0       0

4.3 防火墙标记解决多端口轮询错乱问题

4.3.1 问题描述

当 RS 同时提供 80(HTTP)和 443(HTTPS)服务时,默认 LVS 会对两个端口分别轮询,可能导致同一客户端的 HTTP 和 HTTPS 请求被分配到不同 RS(如 80→RS1,443→RS2),出现会话不一致。

4.3.2 解决方案(防火墙标记)

通过防火墙标记(FWM)将 80 和 443 端口归为同一集群服务,实现统一调度。

]# dnf install mod_ssl -y
 
]# systemctl restart httpd

在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略

]# ipvsadm -C
 
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
 
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
 
[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
 
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
 
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g

[root@lvs ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

    ->  RemoteAddress:Port                   Forward Weight ActiveConn InActConn

TCP   192.168.0.100:80 rr

    -> 192.168.0.101:80                           Route     1          0                   0

    -> 192.168.0.102:80                           Route     1          0                   0

TCP   192.168.0.100:443 rr

    -> 192.168.0.101:443                         Route     1          0                   0

    -> 192.168.0.102:443                         Route     1          0                   0

测试问题

​
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
 
RS1 server - 192.168.0.101
 
RS1 server - 192.168.0.101
 
​

当访问vip时两次调度都到了101


 


网站公告

今日签到

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