企业级调度器LVS

发布于:2025-05-22 ⋅ 阅读:(15) ⋅ 点赞:(0)
访问效果
涉及内容:浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等

集群

1.1 集群类型简介

对于⼀个业务项⽬集群来说,根据业务中的特性和特点,它主要有三种分类:
高扩展 (LB) :单个主机负载不足的时候,采取增加主机的方式来满足负载需求的解决方案。
高可用(HA):集群中的某主机失效时,避免业务中断,我们将其任务转交给其他主机的解决方案。
高性能 (HPA) :通过某些技术,实现同样资源来承受更多用户请求负载的解决方案。

1.2 扩展集群

扩展集群 (Load Balancing Cluster), 也称 " 负载均衡集群 "
它是指在当前业务环境集群中,所有的主机节点都处于正常的工作活动状态,它们共同承担起用户的请求带来的工作负载压力,保证用户的正常访问。

1.3 可用集群

可⽤集群 (High Availability Cluster) ,也称 " 主机冗余 " 集群。
它是指将 核心业务使用多台 ( 一般是 2 ) 主机共同工作,支撑并保障核心业务的正常运行,尤其是业务的对外不间断的对外提供服务。核心特点就是 " 冗余 " .
它存在的目的就是为了解决单点故障 (Single Point of Failure) 问题的。
A = MTBF / (MTBF + MTTR)
MTBF(Mean Time Between Failure), 即平均故障间隔时间,表示产品多长时间出现一次问题。
MTTR(Mean Time To Restoration) ,即平均恢复时间 产品,从故障到稳定状态的维修花费时间。
1 = 365 = 8760 小时。
90 % 的可用性 = ( 1 - 90 % ) * 365 = 36.5 , 又称 1 9

1.4 ⾼性能集群(HPA)

⾼性能集群 (High Perfermance Computing Cluster) ,也称科学计算集群。
它是基于前两种技术实现的集群基础上,将多个计算机通过高速网络连接起来,协同工作以完成复杂的计算任务或处理大量数据的系统。高效利用这些主机资源,结合某些特有的技术方案,提供的强大的计算能力,从而实现特定用户 | 大型任务的高复杂度数据处理功能,比如生物计算、大场景模拟计算、预测计算等。

1.5 集群实现细节

前置知识:OSI 七层模型
物理层 ( 网线、 MAC)
数据链路层 (ARP PPTP)
网络层 (IP ICMP)
传输层 (Port)
会话层 (Session ssl tsl rpc)
表示层 ( 各种文件格式, JPEG ASCll)
应用层 (HTTP / HTTPS 、各种应用服务 )
LVS 可以实现二~四层的负载均衡效果
Nginx 可以实现四~七等的负载均衡效果
Haproxy 可以实现四~七层的负载均衡效果
阿里云  可以实现四~七层的负载均衡效果
               
阿里云ALB(七层负载均衡),阿里云NLB(四层负载均衡),阿里云 CLB(传统型负载均衡)
               https://help.aliyun.com/zh/slb/
AWS 可以实现四~七层的负载均衡效果
               ALB(七层负载均衡),AWS NLB(四层负载均衡),AWS CLB(传统型负载均衡)
               https://aws.amazon.com/cn/elasticloadbalancing/

1.6 ⼯作的协议层次分类[M]

⼯作在传输层(四层)的负载均衡:
传输层负载均衡基于四层通用协议( TCP / UDP )进行调度
LVS
nginx (基于 stream 划模块)
haproxy (基于 tcp 模式)
阿里云 NLB CLB
AWS NLB CLB
⼯作在应⽤层(七层)的负载均衡:
应用层负载均衡通常基于应用层特定协议进行调度,又被称为 proxy server
基于 http 协议的负载均衡: nginx httpd haproxy mode http , ......
基于 fastcgi 协议的负载均衡: nginx httpd ......
基于 mysql 协议的负载均衡: mysql-proxy mycat ......

2 LVS基础

防⽕墙的五表五链

security : 对数据包的 mac 信息进行过滤
filter :对主机接收的数据包实现过滤功能,它是 iptables 的默认规则。
nat : 对主机接收的数据包实现转换功能,端口映射,地址映射等 , 使用场景比较多表。
mangle : 用于对特定数据包的修改,报文拆开,修改,封装表
raw : 特殊场景下实现的自定义规则
PREROUTING : 数据包进入路由表之前             INPUT : 通过路由表后目的地为本机
FORWARD : 通过路由表后,目的地不为本机    OUTPUT : 由本机产生,向外转发
POSTROUTIONG : 发送到网卡接口之前
效果图
数据包转发场景:
nat prerouting forwardfilter forwardnat postrouting 离开主机
数据包处理场景:
nat prerouting forwardfilter input local processroutingnat output filter output nat
postrouting 】离开主机
SNAT DNAT
⽹络数据包,我们主要是根据请求报⽂中的数据地址转换划分为 SNAT DNAT ,⽽不是响应数据包。

1.1 LVS简介

  LVS ,全称 Linux Virtual Server ,即 Linux 虚拟服务器。它是 1998 5 月由章文嵩博士发起的一个中国的开源软件项目,官方网站是 http :// www.linuxvirtualserver.org
   LVS 基于 IP 负载均衡 | 内容请求分发等技术,整合了一些特有的理念和思想后的一套解决方案。普通的 linux 主机可以基于 lvs 提供的负载均衡技术,实现一个高扩展的 linux 的服务器集群。
官方网站: http :// www.linuxvirtualserver.org /
完整资料: http :// www.austintek.com / LVS / LVS-HOWTO / HOWTO / index.html

1.2 项目结构

⼀般来说,LVS集群有三部分组成

负载调度器 (load balancer) ,负责将客户的请求调度到后端主机上。
服务器池 (server pool) ,真正响应用户请求的后端主机。
共享存储 (shared storage) ,存储配置、元数据等相关信息
LVS 集群提供了四种主要的资源调度功能:
NAT(NAT)  修改请求数据包的目标 ip 地址,实现请求转发功能
Tunneling(TUN)  给请求数据包外部增加新的 ip 首部,实现请求转发功能
DirectRouting(DR)  修改请求数据包的 mac 地址,实现请求转发功能
FULLNAT 结合 SYNPROXY 技术,修改数据包的源 ip 地址和目标 ip 地址,实现请求转发功能
1.3  常见术语
物理术语 - ⽤于描述主机的常见术语
DSDirector Server   
指的是 LVS 集群中的负责调度 (Dispatcher) 或者负载均衡 (Load Balancer) 的主机,即部署 LVS 的主机。 也称 VS(Virtual Server)
RSReal Server  
指的是这正相应用户主机的后端服务器主机。 也称 BS(Backend Server)
逻辑术语 - 用于描述逻辑关系的常见术语
VIPVirtual Server IP
LVS 主机上用于向外部用户提供服务的 ip 地址,作为用户请求的目标的 IP 地址。
它是一个在物理主机上没有物理网卡的 ip 地址,一般用于 LVS 主机的外网 ip
DIPDirector Server IP
LVS 主机上和后端提供真正服务的主机通信的 IP 地址。  
它是一个独立的物理网卡上的地址,一般用于 LVS 主机的内网 ip
RIPReal Server IP
LVS 调度主机后端,真正响应用户请求的主机 IP 地址。
CIPClient IP    
发起请求的用户客户端 IP 地址。 一般都是外网 ip 地址。
这四者之间的访问关系: CIP <--> VIP == DIP <--> RIP
实践的时候往往在 LVS 上配置两个网卡,⼀个对外,⼀个对内
为了达到不同网段的 ip 地址能够达到正常的通信,我们需要开启 linux 服务的 ip 转发功能
   
方法一:在 / etc / sysctl.conf 中开启功能    net.ipv4.ip_forward = 1    
方法二:直接修改 ip_forward 文件   echo 1 > / proc / sys / net / ipv4 / ip_forward
注意: 0 代表禁用, 1 代表开启。
1.4 工作流程
LVS 集群环境中,用户请求的处理流程如下:
1 用户在客户端发起访问服务的请求
2 经过层层的 dns 解析原理,获取服务的提供 ip 地址 -- VIP
3 客户端向 VIP 所在的 LVS 主机 (VS) 发起服务请求
4 LVS 主机 (VS) 接收到用户请求,根据自身的配置,将用户请求转交到后端的某主机 (RS)
5 用户请求经 LVS DIP 网卡,进入到公司内网环境
6 根据数据包的结构,找到真正提供服务的后端主机 (RS)
7 公司内部的后端主机,处理用户请求后,采用某种方式返回给客户端

1.3 软件环境

LVS 软件 由 2 部分程序组成: ipvs ipvsadm
ipvs(ip virtual server):一个 支持多种 IP 负载均衡技术的 IP 虚拟服务器的软件。
ipvsadm 是工作在用户空间的命令行工具,负责为 ipvs 的资源调度编写转交规则。
查看内核模块关于 ipvs 的信息
grep -i -C 2 ipvs /boot/config-6.8.0-51-generic  注:颜色的是uname -r 系统的版本号 
注:里面字符的表示含义如下
m 表现为模块方式,按需加载。
y 表现为直接内签到内核中,开机就加载。
modinfo ip_vs    # 查看模块信息

1.4 软件部署

ubuntu系统为例
apt info ipvsadm #查看版本信息
apt install ipvsadm #安装软件
dpkg -L ipvsadm #查看软件
ipvsadm --version  #查看版本信息

1.5 集群状态查看

命令格式: ipvsadm - Ln
格式详解:
- L 显示当前的服务或者目标主机信息    
- n 地址和端口的数字输出
有规则⽂件 /proc/net/ip_vs 专⻔记录这些规则信息

1.6 工作模式解读

LVS 官方支持三种工作模式,分别是 NAT 模式, DR 模式, TUN 模式
1. NAT 模式
NAT Network address translation (网络地址转换)
LVS 本质上使用的类似于 iptables 里面的 DNAT 策略
- LVS 工作于内核上,而不是 iptables 的五表五链上
整个网络环境需要涉及到两个网段:公网网段、私网网段
请求报文和响应报文都必须经由 LVS 转发, LVS 易成为系统瓶颈
- 数据包进入到私网的时候,转换的是目标 ip 地址,因为提供服务的是 RIP 主机
- 数据包进入到外网的时候,转换的是源 ip 地址,因为数据包来的时候,找的就是 VIP
RIP DIP 应在同一个 IP 网络,且应使用私网地址;
- 由于数据包在流转的时候,尤其是 RS 响应的数据包要走到 lvs 主机,所以必须 配置网关地址DIP
- 支持端口映射,可修改请求报文的目标 PORT
其他内容
- VS 必须是 Linux 系统, RS 可以是任意 OS 系统
- LVS 主机需要开启 ip_forward 转发
小结
NAT 双网段  来去数据包流经LVS主机    LVS主机开启数据包转发
2. DR 模式
DR Direct Routing(直接路由)
LVS 默认模式 ,应用广泛,通过为请求报文重新封装一个 MAC 首部进行转发,源 MAC DIP 所在的接口的 MAC ,目标 MAC 是某挑选出的 RS RIP 所在接口的 MAC 地址;源 IP/ PORT ,以及目标 IP / PORT 均保持不变,但源 MAC 和目标 MAC 会发生改变, DR 模式下,数据链路层之上的内容不会发生变化。
DR模式的特点
LVS 服务器 和 RS 服务器 上都配置有 VIP 地址
RS RIP 可以使用私网地址,也可以是公网地址
LVS 服务器只处理请求报文,不处理响应报文
RS 服务器可以使用大多数 OS 系统(支持相关网络设置即可)
3 TUN 模式
TUN IP tunneling IP 隧道)
 TUN 模式不修改请求报文的 IP 首部(源 IP CIP ,目标 IP VIP ),而是在原 IP 报文之外再封装一个 IP 首部 (源 IP DIP ,目标 IP RIP ),再将报文发往后端 RS RS 直接响应客户端(源 IP VIP ,目标 IP CIP ), TUN   模式与 DR 模式的区别是 TUN 模式下 LVS 服务器和后端 RS 可以不在同一个物理网络,可以跨公网。
相较于 DR 模型来说,它修改的是 更深层的 ip 报文,所以性能有些差。但是好处是可以跨网络。

3 调度分类

lvs 的调度算法,站在 " 是否考虑到后端主机负载 " 的⻆度可以划分为以下三类
静态方法:仅仅从调度策略本身实现的功能角度进行工作  RR WRR DH SH
RR Round Robin ,轮询算法
WRR Weight RR ,加权轮询算法
SH Source Hash ,源 IP 地址 hash
DH Destinatio Hash ,目标 IP 地址 hash
动态方法:在满足调度策略本身实现功的前提下,还要考虑后端主机的动态负载效果
LC WLC LBLC LBLCR SED NQ
LC Least Connections ,最少连接算法
WLC Weighted Least Connections ,加权最少连接算法,此算法是 LVS 默认调度算法
SED Shortest Expected Delay ,最短延迟调度算法,此算法是 WLC 算法的改进版
LBLC Locality-Based Least Connections ,基于局部性的最少链接调度算法
LBLCR Locality-Based Least Connections with Replication ,带复制的基于局部性的最少链接调度算法
高版本内核中新增的调度算法 : 4.15 版本的内核中新增的方法     FO OVF MH TNDR
FO Weighted Fail Over ,权重过载算法
OVF Overflow-connection ,溢出连接算法
MH Masquerading Hashing ,源 IP 地址 hash
TNDR Two Node Direct Routing ,直接路由调度,而不使用 NAT 网络转换

4 LVS实践

1.增加集群
命令格式: ipvsadm - A - t | u | f service_address : port [ - s scheduler] [ - p [timeout]]
格式详解:    
- A 增加 lvs 集群   
- t 指定 lvs 主机地址信息       
        - t 指定 lvs 集群服务主机的 tcp 端口     
        - u 指定 lvs 集群服务主机的 udp 端口        
         -f 指定 lvs 集群服务主机采用的防火墙自定义规则的标记,默认是数字       
- s 指定 lvs 集群的调度策略,默认是 wlc
例:
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - A - t 192.168.8.15 : 80
2.编辑集群
命令格式: ipvsadm - E - t service_address : port [ - s scheduler]
格式详解:
- E 编辑 lvs 集群的信息
注意: 更改集群信息的时候,只能更改已存在的 lvs 集群的细节属性,不能直接将 lvs 的地址更改
例:
ipvsadm - E - t 192.168.8.15 : 80 - s lc
ipvsadm - E - t 192.168.8.14 : 80 - p 30
3.删除集群
命令格式: ipvsadm - D - t service_address : port
格式详解:
- D 删除指定 lvs 集群的信息
- C 删除所有 lvs 集群的信息
   
注意: 删除集群信息的时候,必须指定已存在的 lvs 集群地址,协议也必须正确
例:
方法 1
ipvsadm - D - t 192.168.8.14 : 80
ipvsadm - D - t 192.168.8.15 : 80
方法 2
ipvsadm - C
4.主机命令
增加主机
命令格式: ipvsadm - a - t service_address : port - r server-address : port - g | m | i [options]
格式详解:
   
- a lvs 集群增加一个真实主机 RS    
- r 指定真实主机的地址信息,格式是 IP : [Port],Port 可以省略    
- g | m | i 设定后端主机的转发模式        
    - g 采用默认的 direct routing 模式       
    - m 采用 masquerading nat 模式        
     - i 采用 ipip tunneling 模式
      三者只能选择其一    
- w 指定真实主机的权重信息
例:
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.16
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.16
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168
添加主机的时候,增加扩展属性
- r 指定 RS 主机端口的效果,只有采用 - m 参数的时候会生效,否则都使用默认的 80 端口
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 88
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 88 - m
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 89 - m - w 3
注意:
在向 lvs 集群中增加真实主机的话,一定要保证指定的 lvs 集群地址存在而且正确。
lvs 本质上是一种网络扩展方案,即使网络不通,也可以随意增加真实主机的地址,只是不能用。
- r 指定 RS 主机端口的效果,只有采用 - m 参数的时候会生效,否则都使用默认的 80 端口。
编辑主机
命令格式: ipvsadm - e - t service_address : port - r server-address : port [options]
格式详解:    
- e 修改真实主机的属性信息    
- m 设定真实主机的转发模型信息为 nat 模型
   
注意:
修改真实主机信息的时候,必须指定已存在的 lvs 集群地址,协议也必须正确
- m - i 不能同时使用
ipvsadm - e - t 192.168.8.14 : 80 - r 192.168.8.16 : 80 - m # 转换成 NAT 模式
注意:  Tun 转发模式的标志是 Tunnel Nat 转发模式的标志是 Masq
对非默认端口的 RS 主机使用 - i ,它只会对同 ip 的默认 80 端口生效
如果想让 Rs 主机的模式从 nat 模式转换为其他模式的话,⽆法直接修改,只能先删后增。
删除主机
命令格式: ipvsadm - d - t service_address : port - r server-address : port
格式详解:    
- d 删除真实主机的属性信息
注意:
       lvs 服务主机和 rs 真实主机的地址必须指定正确        
单个删除 RS 主机有些繁琐,我们可以直接采用删除 lvs 主机的效果清空所有目标主机
单个清理主机
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.8.15 : 89
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.8.16
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.16
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168
规则命令
对于 ipvsadm 来说,我们可以通过 ipvsadm-save 的命令来查看和保存 lvs 的相关规则。
命令格式: ipvsadm-save [ - n]
格式详解:    
- n 以精确的数字格式打印出 lvs 规则,如果不加 - n 的话,他会基于域名解析,将相应的 ip 转换成主机名展示 使用 ipvsadm - Sn 可以实现同样的效果
保存规则
通过 ipvsadm-save + > 的方式实现 规则的保存
ipvsadm-save - n > n-ipvsadm
ipvsadm-save > non-ipvsadm
清空规则
命令格式: ipvsadm - C
格式详解:
- C 清空 lvs 服务集群规则
导⼊规则
命令格式: ipvsadm-restore < 规则文件
注意:    
我们在导入的规则的时候,如果备份是基于主机名的 lvs 规则,主机名解析记录的正确与否很关键。 我们使用 ipvsadm - R 也可是实现同样的效果
导⼊ 携带 -n 的备份规则⽂件
ipvsadm-restore < n-ipvsadm
规则保存
对于 ipvsadm 设置的规则来说,它是我们操作 lvs 规则的常⻅⽅法,⽽且是以命令⾏的⽅式来运⾏的,但是这种命令⾏编写的规则,好处就是灵活⽣效快,但是缺点就是重启主机后规则⾃动清空。
准备规则
ipvsadm -A -t 192.168.8.14:80
ipvsadm -A -t 192.168.8.15:80
ipvsadm -a -t 192.168.8.15:80 -r 192.168.8.17
ipvsadm -a -t 192.168.8.14:80 -r 192.168.8.18

cat /etc/ipvsadm.rules  #查看默认的规则保存⽂件
service ipvsadm save   #保存规则

增加⼀条规则
ipvsadm -a -t 192.168.8.14:80 -r 10.0.0.130 -m -w 30
ipvsadm -Ln

保存新规则到规则⽂件
ipvsadm-save -n > /etc/ipvsadm.rules
cat /etc/ipvsadm.rules

但是这种⽅式保存服务后,重启主机后,默认不会⾃动加载
reboot
ipvsadm -Ln

代码实现效果如下

但是这种⽅式保存服务后,重启主机后,默认不会⾃动加载
开机自动加载方式1
修改 ipvsadm 的配置⽂件
root @ubuntu24-13: ~ # vim /etc/default/ipvsadm
# if you want to start ipvsadm on boot set this to true
AUTO = "true" # false 改为 true
重启主机后,可以看到会⾃动加载规则⽂件
开机自动加载方式2
root @ubuntu24-13: ~ # cat /etc/rc.local
#!/bin/bash
ipvsadm-restore < / etc / ipvsadm.rules
为该文件增加执行权限
root @ubuntu24-13: ~ # chmod +x /etc/rc.local
Rocky系统规则保存策略
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - A - t 192.168.8.15 : 80
ipvsadm - a - t 192.168.8.15 : 80 - r 192.168.8.17
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.18
ipvsadm-save - n > / etc / sysconfig / ipvsadm   #保存规则
systemctl enable ipvsadm.service    #设置为开启⾃启

5 防⽕墙标识

FWM:FireWall Mark  

LVS Linux Virtual Server )的防火墙标记 FWM Firewall Mark )是一种用于在 LVS 负载均衡环境中对报文进行分类和管理的技术。
功能定制
1 使⽤ iptables 定义防⽕墙标记
Director 主机上执行命令
iptables - t mangle - A PREROUTING - d $vip - p $proto m multiport -- dports $port1 , $port2 ,
- j MARK -- set-mark NUMBER
命令解析
- t mangle 指定操作的是 mangle 表;
- A PREROUTING 将规则追加到 PREROUTING 链;
- d $vip 指定目标地址为 LVS VIP 地址;
- p $proto 指定协议;
- m multiport -- dports $port1 , $port2 , 指定目标端口;
- j MARK -- set-mark NUMBER 表示执行 MARK 动作并设置标记值为 NUMBER
2 基于标记定义集群服务
Director 主机上执行命令
ipvsadm - A -f NUMBER (options)
命令解析
- A 表示添加一个新的集群服务,
-f NUMBER 指定基于标记 NUMBER 来定义集群,
(options) 可设置调度算法等其他选项。
3 iptables 命令实践
对于 ubuntu 服务器版本的话,默认没有 iptables 命令
apt install iptables
iptables - t mangle - A PREROUTING - d 192.168.8.13 - p tcp - m multiport -- dports 80 , 443 - j MARK
-- set-mark 10     # 定制防⽕墙标记
定制转发规则
ipvsadm - C
ipvsadm - A -f 10 - s rr
ipvsadm - a -f 10 - r 192.168.8.7 - g
ipvsadm - a -f 10 - r 192.168.8.17 - g
解释上面的命令
效果如下: FWM 10 rr就是上面要求的结果。FWM 11 wlc 是不加-s 调度策略,直接使⽤默认的调度策略结果。

6 NAT实践[M]

前提操作条件
注意:    
为了避免网络效果出错,我们应该讲宿主机上的 vmnet1 网卡信息给清空掉或者直接将网卡禁用    
后端主机在没有网的情况下部署 web ,采用系统镜像的方式来安装。
最终达到的效果
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
配置主机⽹络环境
各个主机的⽹卡设备基本配置
定制lvs-client主机ip   (略 不用更改)
定制lvs-server主机ip
定制⽹卡配置, ens33 NAT 模式, ens37 是仅主机模式,仅主机模式不⽤配置⽹关
root@ubuntu24-13:~# cat /etc/netplan/50-cloud-init.yaml
network:
    version: 2
    ethernets:
        ens33:
            addresses:
            - 10.0.0.13/24
            nameservers:
                addresses:
                - 10.0.0.2
            routes:
            -   to: default
                via: 10.0.0.2
        ens37:
            addresses:
            - 192.168.8.13/24
netplan apply  重启生效
定制lvs-RS1主机ip
定制网卡服务
[root@openeuler-14 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.8.14
PREFIX=24

[root@openeuler-14 ~]# nmcli connection down ens33       关闭网卡的连接
[root@openeuler-14 ~]# systemctl restart NetworkManager  重启网卡服务
定制lvs-RS2主机ip
定制⽹卡服务
[root@rocky9-15 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160
[ipv4]
address1=192.168.8.15/24
method=manual

[root@rocky9-15 ~]# nmcli connection down ens160       关闭网卡的连接
[root@rocky9-15 ~]# systemctl restart NetworkManager   重启网卡服务
lvs-server主机定制数据包转发
定制内核参数
root@ubuntu24-13:~# cat /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
root@ubuntu24-13:~# sysctl -p /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1

测试效果
root@ubuntu24-13:~# sysctl -a | grep ip_forw
net.ipv4.ip_forward = 1
RS1和RS2 主机定制⽹关
注意:如果⽹关不指向 lvs 主机的 ip 地址,那么数据包交给其他主机,导致数据包⽆法原路通过 lvs 返回出去。但是因为他们属于同⼀个⽹段,数据包还是可以抓取到的,只不过没有意义⽽已。
[root @openeuler-14 ~ ] # ip route add default via 192.168.8.13
[root @openeuler-14 ~ ] # ip route list
default via 192.168.8.13 dev ens33
[root @rocky9-15 ~ ] # ip route add default via 192.168.8.13
[root @rocky9-15 ~ ] # ip route list
default via 192.168.8.13 dev ens160
RS1和RS2主机 定制本地镜像服务
挂载磁盘
[root @openeuler-14 ~ ] # mkdir /image
[root @openeuler-14 ~ ] # mount /dev/cdrom /image/
mount : / image : WARNING : source write-protected, mounted read-only.
定制软件源
[root @openeuler-14 ~ ] # mv /etc/yum.repos.d/openEuler.repo{,.bak}
[root @openeuler-14 ~ ] # cat > /etc/yum.repos.d/openEuler.repo <<-eof
[local_openeuler]
name = Local OpenEuler Repository
baseurl = file :/// image
enabled = 1
gpgcheck = 0
eof
更新软件源
[root @openeuler-14 ~ ] # yum makecache
关闭防⽕墙服务和selinux
[root @openeuler-14 ~ ] # systemctl disable --now firewalld.service
[root @openeuler-14 ~ ] # setenforce 0
部署httpd服务
[root @openeuler-14 ~ ] # yum install -y httpd vim
[root @openeuler-14 ~ ] # echo '<h1>hello RS1</h1>' > /var/www/html/index.html
[root @openeuler-14 ~ ] # systemctl start httpd
挂载磁盘
[root @rocky9-15 ~ ] # mkdir /image
[root @rocky9-15 ~ ] # mount /dev/cdrom /image
mount : / image : WARNING : source write-protected, mounted read-only.
定制软件源
[root @rocky9-15 ~ ] # mkdir /etc/yum.repos.d/bak
[root @rocky9-15 ~ ] # mv /etc/yum.repos.d/rocky* /etc/yum.repos.d/bak/
[root @rocky9-15 ~ ] # cat > /etc/yum.repos.d/rocky.repo <<-eof
[local-rocky-baseos]
name = Local Rocky 9.4 BaseOS Repository
baseurl = file :/// image / BaseOS
enabled = 1
gpgcheck = 0
[local-rocky-appstream]
name = Local Rocky 9.4 AppStream Repository
baseurl = file :/// image / AppStream
enabled = 1
gpgcheck = 0
eof
更新软件源
[root @rocky9-15 ~ ] # yum makecache
(下面的操作跟RS1上的操作一样 略)
lvs-server主机定制集群
root @ubuntu24-13: ~ # apt install ipvsadm  安装ipvsadm
定制lvs集群服务
root @ubuntu24-13: ~ # ipvsadm -A -t 10.0.0.13:80 -s rr
增加RS主机列表
root @ubuntu24-13: ~ # ipvsadm -a -t 10.0.0.13:80 -r 192.168.8.14 -m
root @ubuntu24-13: ~ # ipvsadm -a -t 10.0.0.13:80 -r 192.168.8.15 -m
注意: 我们这里用的是 nat 模式,所以再添加 RS 主机的时候,需要使用 - m 选项
客⼾端访问 lvs 的对外 ip 地址
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
结果显示:可以看到实现了流量的正常转发效果
按照我们刚才的实验情况:这四类 IP 的具体情况如下:
CIP 10.0.0.12 VIP 10.0.0.13 DIP 192.168.8.13
RIP1 192.168.8.14 RIP2 192.168.8.15
1 用户向具有公网 ip 地址的 LVS 主机地址 (VIP) 发起请求, (Src = CIP Dst = VIP)
2 LVS 主机接收到数据包后,修改数据包的目标地址为后端 RS1 主机并转发出去, (Src = CIP Dst = RIP1)
3 后端 RS1 主机处理完请求后,返回数据包给 LVS 主机, (Src = RIP1 Dst = CIP)
4 LVS 主机接收到数据包后,修改数据包的源地址为 LVS 的公网地址 (VIP) 并转发出去, (Src = VIP Dst = RIP1)
抓取数据包
yum install tcpdump -y   安装    在除了客户机上的所有主机进行安装
tcpdump -nn -i ens160   抓包    网卡 不是唯一的 根据网卡的实际名字进行修改 两个网卡选NAT的
curl 10.0.0.13 【在客户机上进行测试】
得到如下结果
7 多业务NAT实践
⼀个 lvs 调度器,实现多种不同业务集群的负载均衡
主机资源

网站公告

今日签到

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