云原生(LVS DR模式ipvs实验)

实验简介

实验一:利用防火墙标记解决轮询错误

该实验针对 HTTP(80 端口)和 HTTPS(443 端口)独立配置 IPVS 轮询时出现的 "轮询重复 / 不一致" 问题进行优化。

  1. 问题场景:在 RS 上同时开启 HTTP/HTTPS 服务,且在 VS 节点分别为 80、443 端口配置独立 IPVS 轮询规则后,客户端同时访问 HTTP 和 HTTPS 时,请求可能被转发到同一台 RS,未实现跨协议的轮询负载。
  2. 解决思路:取消 80/443 端口的独立 IPVS 规则,改用 iptables 为 VIP 的 80/443 端口数据包统一打标记 6666;基于该标记配置全局 IPVS 轮询规则,将两类协议的数据包纳入同一调度体系。
  3. 效果验证:客户端同时 curl HTTP 和 HTTPS 地址时,请求被分别转发到不同 RS(如 RS2、RS1),解决了跨协议轮询不一致的问题。

实验二:利用持久连接实现会话粘滞

该实验核心是基于 IPVS(IP 虚拟服务器)配置会话粘滞,确保客户端请求持续定向到同一台后端真实服务器(RS)。

  1. 配置逻辑 :先通过 iptables 在 mangle 表中为目标 VIP(192.168.0.200)的 80/443 端口 TCP 数据包打上标记 6666;再基于该标记配置 IPVS 规则,采用 rr(轮询)调度策略,并通过-p 1开启持久连接(会话粘滞),将标记数据包转发至 192.168.0.10/20 两台 RS。
  2. 效果验证 :客户端多次 curl 访问 VIP 时,请求始终被转发到同一台 RS(如 RS1),实现了会话粘滞;同时可通过ipvsadm -Lnc观察连接状态,确认会话的持续性。

核心差异

  • 实验一聚焦 "跨协议轮询一致性",通过统一防火墙标记整合 HTTP/HTTPS 调度,解决独立配置导致的轮询错误;
  • 实验二聚焦 "会话粘滞",通过持久连接让同一客户端请求固定到一台 RS。

利用火墙标记解决轮询错误

1.在RS主机中同时开始http和https两种协议

复制代码
[root@RS1 yxs]# dnf install mod_ssl -y
[root@RS1 yxs]# systemctl restart httpd

[root@RS2 yxs]# dnf install mod_ssl -y
[root@RS2 yxs]# systemctl restart httpd

2.在vsnode中添加https的轮询策略

复制代码
[root@vsnode yxs]# ipvsadm -A -t 192.168.0.200:80  -s rr
[root@vsnode yxs]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@vsnode yxs]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
[root@vsnode yxs]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@vsnode yxs]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@vsnode yxs]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
[root@vsnode yxs]# 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.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0         
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0         
  -> 192.168.0.20:443             Route   1      0          0         

3.轮询错误展示

复制代码
[root@client yxs]# curl  192.168.0.200;curl -k https://192.168.0.200
RS1 - 192.168.0.10
RS1 - 192.168.0.10
[root@client yxs]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS2 - 192.168.0.20

#当上述设定完成后http和https是独立的service,轮询会出现重复问题

4.解决方案

使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载

复制代码
[root@vsnode yxs]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark  6666
[root@vsnode yxs]# ipvsadm -A -f 6666 -s rr
[root@vsnode yxs]# ipvsadm  -a -f 6666 -r 192.168.0.10 -g
[root@vsnode yxs]# ipvsadm  -a -f 6666 -r 192.168.0.20 -g

#测试:在客户端
[root@client yxs]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS1 - 192.168.0.10

利用持久连接实现会话粘滞

1.设定ipvs调度策略

复制代码
[root@vsnode yxs]# ipvsadm -A -f 6666 -s rr -p 1
[root@vsnode yxs]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  6666 rr persistent 1
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0         

2.测试

复制代码
[root@client yxs]# curl 192.168.0.200
RS2 - 192.168.0.20
[root@client yxs]# curl 192.168.0.200
RS2 - 192.168.0.20

3.观察

复制代码
[root@vsnode yxs]# watch -n 1 ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:56  FIN_WAIT    172.25.254.99:42420 192.168.0.200:80   192.168.0.20:80
IP  00:57  ASSURED     172.25.254.99:0    0.0.26.10:0        192.168.0.20:0
TCP 01:54  FIN_WAIT    172.25.254.99:46216 192.168.0.200:80   192.168.0.20:80
TCP 01:55  FIN_WAIT    172.25.254.99:46222 192.168.0.200:80   192.168.0.20:80
相关推荐
却道天凉_好个秋6 小时前
密码学(一):sm4+ofb
网络·密码学·sm4·ofb
RisunJan6 小时前
Linux命令-lprm(删除打印队列中任务)
linux·运维·服务器
云姜.6 小时前
TCP协议特性
服务器·网络·tcp/ip
zzzsde6 小时前
【Linux】进程(5):命令行参数和环境变量
linux·运维·服务器
The森6 小时前
Linux IO 模型纵深解析 03:同步 IO 与异步 IO
linux·服务器
草莓熊Lotso7 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
寻星探路12 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
七夜zippoe15 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥16 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造