一、集群和分布式简介
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 模式数据逻辑
- 客户端发送请求,数据包包含源 IP(CIP)、目标 IP(VIP)、目标端口(如 9000)。
- VS 接收请求后,执行 DNAT:将目标 IP(VIP)改为 RS 的 RIP,目标端口改为 RS 的端口(如 80)。
- RS 处理请求后,响应数据包包含源 IP(RIP)、目标 IP(CIP)、目标端口(9000)。
- VS 接收响应后,修改源 IP(RIP→VIP)、源端口(80→9000),再回传给客户端。
- 注意: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 模式数据传输过程
- 客户端发送数据帧:包含源 IP(CIP)、源 MAC(客户端 MAC)、目标 IP(VIP)、目标 MAC(VIP 的 MAC)。
- VS 接收后,修改数据帧的目标 MAC 为选中 RS 的 MAC(如 RS1 的 MAC),其他信息不变。
- RS 接收数据帧后,处理请求并响应,响应数据包包含源 IP(VIP)、源 MAC(RS1 的 MAC)、目标 IP(CIP)、目标 MAC(客户端 MAC),直接回传给客户端。
- 仅请求报文经过 Director,响应报文由 RS 直接发往客户端,性能优于 NAT。
- 不支持端口映射,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