LVS 工作模式

1、LVS DR模式

DR 模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。DR 模式可以极大的提高集群系统的伸缩性。但是要求调度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR 模式是互联网使用比较多的一种模式。 如果要提供互联网业务,要求每台服务器都具有外网 IP 地址。

工作原理

客户端 192.168.1.10 向目标 vip:192.168.1.88 发出请求

调度器收到客户端请求后,根据负载均衡算法选择一台 active 的 real server(假设是 cong12),并把数据包的目标地址的 MAC 地址修改为 cong12 的 MAC 地址,然后把数据包发送到局域网里。

cong12 服务器在局域网收到这个数据包,发现数据包的目的地址和本机匹配(因为所有的 realserver 配置了相同的 VIP),MAC 地址和本机匹配,于是这个包被合法接受,开始处理数据包,随后重新封装报文,发送到局域网。

注意:RS 返回响应时,直接向源 IP(即客户端的 IP)返回数据包,不再经过 LVS 调度器。

如果 client 与 LVS 同一网段,那么 client(192.168.1.10)将收到这个回复报文。如果跨了网段,那么报文通过 gateway/路由器经由 Internet 返回给用户。

lvs-dr 做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差 多少。数据包、数据帧的大致流向是这样的:client --> lVS --> RS --> client

模式特点

保证前端路由将目标地址为 VIP 报文统统发给 Director Server,而不是 RS

RS 可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对 RIP 进行直接访问。

RS 跟 Director Server 必须在同一个物理网络中

所有的请求报文经过 Director Server,但响应报文不会经过 Director Server

不支持地址转换,也不支持端口映射

RS 可以是大多数常见的操作系统

RS 的网关绝不允许指向 DIP

RS 上的 lo 接口配置 VIP 地址

缺陷:唯一的缺陷在于它要求 LVS 调度器及所有应用服务器在同一个网段中,因此不能实现集群的跨网段应用。

实验拓扑

主机

内网/外网 IP

VIP

角色

JClouds

192.168.137.253

192.168.137.88

LVS

Book

192.168.137.252

192.168.137.88

httpd

Client01

192.168.137.6

192.168.137.88

httpd

配置负载调度器

从 lvs-dr 模式的工作原理我们可以看出负载调度器 ens33 有 2 个 IP 地址,所以我们需要配置 ens33 和 ens33:0 两个 IP

# 配置 VIP 
ifconfig ens33:0 192.168.1.88/24 
ifconfig ens33:0# 加载 ip_vs 模块并安装 ipvsadm 软件包 
modprobe ip_vs 
yum -y install ipvsadm# 使用 ipvsadm 创建负载分配策略 
ipvsadm -A -t 192.168.1.88:80 -s wrr 
# -g 表示 DR 模式 , -m 表示 IP NAT 模式
ipvsadm -a -t 192.168.137.88:80 -r 192.168.137.252:80 -g -w 1 
ipvsadm -a -t 192.168.137.88:80 -r 192.168.137.6:80 -g -w 2 
# 保存配置或规则 
ipvsadm --save > /etc/sysconfig/ipvsadm 
systemctl start ipvsadm 
systemctl enable ipvsadm#  查看负载均衡策略 
ipvsadm -Ln

注:三个 LVS 模式中,只有 NAT 模式需要开启路由转发功能。 DR 和 TUN 模式不需要开启,也不需要把网关指向调度器

配置真实服务器

Book & Client01 配置相同

① 关闭 ARP 转发

同一个广播域:配置了多个相同的 VIP 是不允许的, 要想实现,就必须让外面的网络, 无法发现这个 VIP 的存在。因此在 Linux 里面, 可以修改内核参数, 实现接口 IP 的广播不响应、不广播。

# 临时配置
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce# 永久生效:在配置文件最后添加
vim /etc/sysctl.conf 
net.ipv4.conf.ens33.arp_ignore = 1 
net.ipv4.conf.ens33.arp_announce = 2 
# 或:
net.ipv4.conf.ens33.arp_ignore = 1 
net.ipv4.conf.ens33.arp_announce = 2 
net.ipv4.conf.all.arp_ignore = 1 
net.ipv4.conf.all.arp_announce = 2 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce = 2

arp_ignore:定义了网卡在响应外部 ARP 请求时候的响应级别,即当 ARP 请求发过来后发现自己正是请求的地址是否响应。

  • 0:默认值,不管哪块网卡接收到了 ARP 请求,只要发现本机有这个 MAC 都给与响应
  • 1:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了 ARP 请求,发现所请求的 MAC 是本机另一块网卡的,这个时候接收到 ARP 请求的这块网卡就一定不响应,只有发现请求的 MAC 是自己的才给与响应。

arp_announce: 的作用是控制系统在对外发送 arp 请求时,如何选择 arp 请求数据包的源 IP 地址:

  • 0:默认值,允许使用任意网卡上的 IP 地址作为 arp 请求的源 IP。
  • 1:尽量避免使用不属于该发送网卡子网的本地地址作为发送 arp 请求的源 IP 地址。
  • 2:选择该发送网卡上最合适的本地地址作为 arp 请求的源 IP 地址。

② 配置虚拟IP地址

# 生成回环口配置文件:
cd /etc/sysconfig/network-scripts/ 
cp ifcfg-lo ifcfg-lo:0 
vim ifcfg-lo:0
#--------------------------
DEVICE=lo:0 
IPADDR=192.168.1.88 
NETMASK=255.255.255.255 
ONBOOT=yes 
NAME=loopback
#----------------------------
systemctl restart network
ifconfig lo:0

③ 配置Http服务

yum install -y httpd 
systemctl start httpd 
systemctl enable httpd 
echo "192.168.137.5" > /var/www/html/index.html

2、LVS NAT模式
工作原理

通过网络地址转换,客户端访问调度器时,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端真实服务器;真实服务器的响应报文通过调度器时,报文源地址被重写再返回给客户,完成整个负载调度过程。但通常在流量比较大的情况下会造成调度器的瓶颈。因为服务数据的返回必须通过调度器出去。

客户端访问VIP1

CIP 客户端的 IP

VIP 是域名解析的 IP, 是集群对外的公网 IP

DIP 用来和后端服务器进行数据交互的 IP, 请求报文转发给后端服务器从此口出去

RIP 真实服务器的 IP

调度器使用 NAT 进行地址转换

客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器。

真实服务器返回处理结果

真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程

实验拓扑

主机名

内网ip

外网ip

角色

JClouds

192.168.137.253

192.168.2.253

LVS

Book

192.168.137.252

httpd

Client01

192.168.137.6

httpd

前期准备
# 关闭防火墙和 selinux(所有服务器)
systemctl stop firewalld 
systemctl disable firewalld 
setenforce 0 
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
配置真实服务器
#--------------------配置Book------------------------------
# 安装 httpd 
yum install -y httpd 
systemctl enable httpd 
# 生成测试网页 
echo "192.168.1.12" > /var/www/html/index.html 
# 修改本机网关为JClouds的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network 
# 测试网页 
curl 192.168.1.12#--------------------配置Client01------------------------------
yum install -y httpd 
systemctl restart httpd 
echo "192.168.137.6" > /var/www/html/index.html 
# 修改本机网关为JClouds的IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network 
curl 192.168.137.6
director 配置负载均衡器

JClouds主机 添加一块网卡

配置宿主机 vmnet1 ip 地址

cd /etc/sysconfig/network-scripts/ 
cp ifcfg-ens33 ifcfg-ens37 vim ifcfg-ens37
TYPE="Ethernet" 
PROXY_METHOD="none" 
BROWSER_ONLY="no" 
BOOTPROTO="none" 
DEFROUTE="yes" 
IPV4_FAILURE_FATAL="no" 
IPV6INIT="yes" 
IPV6_AUTOCONF="yes" 
IPV6_DEFROUTE="yes" 
IPV6_FAILURE_FATAL="no" 
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens36" 
DEVICE="ens36" 
ONBOOT="yes" 
IPADDR="192.168.2.10" 
PREFIX="24"systemctl restart network 
ifconfig ens36#  打开路由转发功能 
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
sysctl -p

加载LVS内核模块

LVS 现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调 用。以下操作可以手动加载 ip_vs 模块,并查看当前系统中 ip_vs 模块的版本信息。

modprobe ip_vs
lsmod | grep ip_vs

cat /proc/net/ip_vs

# 安装 LVS 管理工具:ipvsadm 
yum install -y ipvsadm
ipvsadm 命令
  • -A 添加虚拟服务器
  • -t 用来指定 VIP 地址及 TCP 端口
  • -s 指定调度算法,rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连 接)。
  • -a 表示添加 real server 的地址
  • -r 指定 real server 的 IP 地址和端口
  • -m 表示 masquerade 也就是 NAT 方式的 LVS,(-g: DR 模式、-i:TUN 模式)
  • -w 用来设置权重(权重为 0 时表示暂停节点)。
  • -C 清除内核虚拟服务器表中的所有记录
  • -Z 虚拟服务表计数器清零
  • -d 删除服务器节点
  • -D 删除整个虚拟服务器
# 清除内核虚拟服务器表中的所有记录
ipvsadm -C # 创建虚拟服务器
ipvsadm -A -t 192.168.2.10:80 -s rripvsadm -a -t 192.168.2.10:80 -r 192.168.137.252:80 -m 
ipvsadm -a -t 192.168.2.10:80 -r 192.168.137.6:80 -m# 查看配置 
ipvsadm -Ln

# 保存配置或规则 
#LVS 的规则配置文件:/etc/sysconfig/ipvsadm 
ipvsadm --save >/etc/sysconfig/ipvsadm

# 查看客户端连接分发器和 real server 的情况
ipvsadm -Lnc

# 查看分发情况
ipvsadm -Ln --stats

# 查看速率
ipvsadm -Ln --rate 
# 清空当前的连接数量ipvsadm -Z #虚拟服务表计数器清零
ipvsadm -Ln --stats# 删除服务器节点
ipvsadm -d -t 192.168.2.10:80 -r 192.168.137.252:80
ipvsadm -Ln# 删除整个虚拟服务器
ipvsadm -D -t 192.168.2.11:80 
ipvsadm -Ln

3、LVS TUN模式

DR 方式是通过 MAC,规模是一个交换网络。而 TUN 方式,是通过给数据包加上新的 IP 头部来实现,这个可以跨整个广域网。TUN 模式可以解决 DR 模式下不能跨网段的问题,甚至可以跨公网进行。

LVS/TUN 使用 IP Tunneling 技术,在 Director 机器和 Real Server 机器之间架设一个IP Tunnel,通过 IP Tunnel 将负载分配到 Real Server 机器上。Director 和 Real Server 之间的关系比较松散,可以是在同一个网络中,也可以是在不同的网络中,只要两者能够通过 IP Tunnel 相连就行。收到负载分配的 Real Server 机器处理完后会直接将反馈数据送回给客户,而不必通过 Director 机器。实际应用中,服务器必须拥有正式的 IP 地址用于与客户机直接通信,并且所有服务器必须支持 IP 隧道协议。

工作原理

在原有的 IP 报文外再次封装一层 IP 首部,内部 IP 首部(源地址为 CIP,目标 IP 为 VIP),外层 IP 首部(源地址为 DIP,目标 IP 为 RIP)

当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 VIP 。

PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链

IPVS 比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层 IP 报文,封装源 IP 为 DIP,目标 IP 为 RIP。然后发至 POSTROUTING 链。 此时源 IP 为 DIP,目标 IP 为 RIP

POSTROUTING 链根据最新封装的 IP 报文,将数据包发至 RS(因为在外层封装多了一层 IP 首部,所以可以理解为此时通过隧道传输)。 此时源 IP 为 DIP,目标IP 为 RIP

RS 接收到报文后发现是自己的 IP 地址,就将报文接收下来,拆除掉最外层的 IP 后,会发现里面还有一层 IP 首部,而且目标是自己的 lo 接口 VIP,那么此时 RS 开始处理此请求,处理完成之后,通过 lo 接口送给 ens33 网卡,然后向外传递。此时的源 IP 地址为 VIP,目标 IP 为 CIP

响应报文最终送达至客户端

模型特性

RIP、VIP、DIP 全是公网地址

RS 的网关不会也不可能指向 DIP

所有的请求报文经由 Director Server,但响应报文必须不能进过 Director Server

此模式不支持端口映射

RS 的操作系统得支持隧道功能

缺点:由于后端服务器 RS 处理数据后响应发送给用户,此时需要租借大量 IP(特别是后端服务器使用较多的情况下)。

优点:实现 lvs-tun 模式时,LVS 调度器将 TCP/IP 请求进行重新封装并转发给后端服务器,由目标应用服务器直接回复用户。负载调度器和应用服务器之间是通过 IP 隧道来进行转发,故两者可以存在于不同的网段中(如异地机房,好处是可以容灾, 通过智能 dns(DNS view)实现边界 最近访问)。

注:其实企业中最常用的是 DR 实现方式。

实验拓扑

主机

外网 IP

VIP

角色

JClouds

192.168.137.253

192.168.137.88

LVS

Book

192.168.137.252

192.168.137.88

httpd

Client01

192.168.137.6

192.168.137.88

httpd

配置负载调度器

加载 ipip 隧道模块

modprobe ipip 
lsmod | grep ipip

② 为 tunl0 设备配置 VIP

# 激活隧道
ip link set up tunl0 
# 添加虚拟 ip
ip addr add 192.168.137.88 dev tunl0  
ifconfig tunl0

# 加载 ip_vs 模块并安装 ipvsadm 软件包 
modprobe ip_vs 
yum -y install ipvsadm 
systemctl enable ipvsadm # 使用 ipvsadm 创建负载分配策略 
ipvsadm -C 
ipvsadm -A -t 192.168.137.88:80 -s rr 
# -i 隧道模式
ipvsadm -a -t 192.168.137.88:80 -r 192.168.137.252:80 -i 
ipvsadm -a -t 192.168.137.88:80 -r 192.168.137.6:80 -i 
ipvsadm --save > /etc/sysconfig/ipvsadm# 查看配置 
ipvsadm -ln

配置真实服务器

Book & Client01 配置相同

① 查看加载 ipip 模块

modprobe ipip
lsmod | grep ipip # 查看tunl0
ifconfig -a

关闭 ARP 转发

# 文件最后添加以下内容
vim /etc/sysctl.conf net.ipv4.conf.all.rp_filter = 0 
net.ipv4.conf.tunl0.rp_filter = 0
  • rp_filter 定义系统是否开启对数据包源地址的校验
  • net.ipv4.conf.tunl0.rp_filter 默认为 1 ,改为 0,关闭此功能。Linux 的 rp_filter用于实现反向过滤技术,它验证反向数据包的流向,以避免伪装 IP 攻击 。然而,在 LVS TUN 模式中,我们的数据包是有问题的,因为从 realserver ens33 出去的 IP 数据包的源 IP 地址应该为 192.168.1.12,而不是 VIP 地址。所以必须关闭这一项功能。 DR 和 TUN 在网络层实际上使用了一个伪装 IP 数据包的功能。
  • net.ipv4.conf.all.rp_filter = 0 #这个值默认就是 0,此功能就是关闭的。所以在 LVS DR 模式中,不需要修改这一样内核参数。

③ 配置VIP

ifconfig tunl0 192.168.137.88 netmask 255.255.255.255 up
ifconfig tunl0

④ 配置 Httpd 服务

 yum install -y httpd 
systemctl start httpd 
systemctl enable httpd echo "192.168.137.253" > /var/www/html/index.html

# 查看调度情况
ipvsadm -Lnc

4、DR VS NAT VS TUN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 785 C. Palindrome Basis

C. Palindrome Basis 题意 定义一个正整数 a a a 是回文的(没有前导 0 0 0)当且仅当: a a a 的十进制表示形式回文 给定一个正整数 n n n ,求出将 n n n 拆分成若干个回文数之和的方案数 思路 这是一个经典模型&#xff0…

媒体邀约:怎么吸引总体目标受众?

新闻媒体影响力日益扩大。不论是公司、机构还是其他,都希望能够通过新闻媒体的曝光来吸引更多总体目标受众。要想真正吸引住总体目标受众并非易事,需要一定的方案和方法。下面我们就深入探究媒体邀约推广的真相,共享怎么吸引总体目标受众的方…

秋招面试—计算机网络安全

2021 计算机网络安全 1.Get 和 Post 的区别 get 用于获取数据,post用于提交数据; get 的缓存保存在浏览器和web服务器日志中; get 使用明文传输,post请求保存在请求体中; get 长度限制在2048以内 2.常见的HTTP请…

Android P 屏保和休眠相关知识

Android P添加屏保功能,如果休眠时间设定大于屏保时间,则先进入屏保,达到休眠时间后再进入休眠 需求: 添加屏幕互保开关,默认关闭。只保留时钟,可设定指针和数字、夜间模式。启用时间改多长时间无操作进入…

###C语言程序设计-----C语言学习(6)#

前言:感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 一. 主干知识的学习 1. while语句 除了for语句以外,while语句也用于实现循环,而且它…

初识elasticsearch

一、了解ES 1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 …

(七)for循环控制

文章目录 用法while的用法for的用法两者之间的联系可以相互等价用for改写while示例for和while的死循环怎么写for循环见怪不怪表达式1省略第一.三个表达式省略(for 改 while)全省略即死循环(上面已介绍) 用法 类比学习while语句 …

MySQL原理(一)架构组成(1)物理文件组成

目录 一、日志文件 1、错误日志 Error Log 1.1、作用: 1.2、开启关闭: 1.3、使用 2、二进制日志 Binary Log & Binary Log Index 2.1、作用: 2.2、开启关闭: 2.3、Binlog还有一些附加选项参数 (1&#x…

江科大stm32学习笔记6——GPIO输入准备

一、按键消抖 由于按键内部使用的是机械式弹簧片,所以在按下和松开时会产生5~10ms的抖动,需要通过代码来进行消抖。 二、滤波电容 在电路中,如果见到一端接在电路中,一端接地的电容,则可以考虑它的作用为滤波电容&am…

linux -- 内存管理 -- 页面分配器

linux内存管理 为什么要了解linux内存管理 分配并使用内存,是内核程序与驱动程序中非常重要的一环。内存分配函数都依赖于内核中一个非常复杂而重要的组件 - 内存管理。 linux驱动程序不可避免要与内核中的内存管理模块打交道。 linux内存管理可以总体上分为两大…

MYSQL基本查询(CURD:创建、读取、更新、删除)

文章目录 前言一、Create1.全列插入2.指定列插入3.插入否则更新4.替换 二、Retrieve1.SELECT列2.WHERE条件3.结果排序4.筛选分页结果 三、Update四、Delete1.删除数据2.截断表 五、插入查询结果六、聚合函数 前言 操作关系型数据库的编程语言,定义了一套操作关系型…

Unity中URP下额外灯角度衰减

文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数:spotDirection.xyz2、_AdditionalLightsSpotDir3、参数:lightDirection4、参数:distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…

Spring Security关键之5张数据表与7张表 !!!

一、什么是认证和授权: 认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。授权:用户认证成功后,需要为用户授权,其实就…

全连MGRE(OSPF)综合实验

一.要求 二.底层--所有节点拥有合法ip地址 r1: r2(isp): r3: r4: r5: r6: 三.全网可达 r1: r3: r4: r5: r6: 四.构建全连的MGRE环境 R1-R3-R4 R1: r3: r4: R1-R5-R6 r1: r5: r6: 五.ospf配置 R1: r3: r4: r5: r6:…

Qt应用软件【串口篇】串口通信

文章目录 1.串口概述2.串口传输数据的基本原理电信号的传输过程 3.串口的几个概念数据位(Data Bits)奇偶校验位(Parity Bit)停止位(Stop Bits)流控制(Flow Control)波特率&#xff0…

142. 环形链表 II(力扣LeetCode)

文章目录 142. 环形链表 II题目描述解题思路判断链表是否有环如果有环,如何找到这个环的入口 c代码 142. 环形链表 II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个…

7.【SpringBoot3】项目部署、属性配置、多环境开发

文章目录 1. SpringBoot 项目部署2. 属性配置方式2.1 通过 cmd 命令行配置2.2 通过环境变量配置2.3 通过外部配置文件来配置 3. 多环境开发 Profiles3.1 多环境开发的单文件配置3.2 多环境开发的多文件配置3.3 多环境开发-分组 1. SpringBoot 项目部署 项目完成后,…

LLM大模型x知识图谱2024最新SOTA方案【附开源代码】

大模型LLM与知识图谱KG的结合可以充分发挥两者的优势,例如LLMs的通用知识和语言处理能力,以及KGs的结构化和准确性。这种结合不仅能够提升模型的知识处理能力,还能够在多个层面上优化模型的性能,更好地解决各种现实世界的问题&…

新火种AI|Taylor Swift不雅照被疯传!AI背后的隐患和危机引人深思...

作者:小岩 编辑:彩云 如今本就是一个信息爆炸的年代,再伴随2023年AI技术的井喷式发展,AI正在以迅雷不及掩耳之势渗透到我们生活的方方面面。不过,AI技术是一把双刃剑,我们在享受AI技术带来的便捷和实用的…

代码随想录刷题笔记 DAY17 | 平衡二叉树 No.110 | 二叉树的所有路径 No.257 | 左叶子之和 No.404

Day 17 01. 平衡二叉树(No. 110) 题目链接 代码随想录题解 1.1 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超…