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

小程序和vue/react的区别/优势

小程序优势: 1.即开即走,不需要下载app,可以通过微信直接打开更加方便快捷 2.天然流量优势,依赖于微信这个大量流量平台 3.相比于app的开发 小程序的开发是前端人员更快上手 4.代码包要求为2M以内 性能更加突出 5.微信宿主提…

IBeginDragHandler,IEndDragHandler,IDragHandler拖拽接口

IBeginDragHandler, IEndDragHandler, 和 IDragHandler 是Unity的接口,用于处理拖拽相关的功能。需要引用 UnityEngine.EventSystems。 IBeginDragHandler 这个接口定义了一个方法,该方法在玩家开始拖拽一个对象时被调用。它通常用于初始化拖拽相关的变量…

Excel-Apache POI

Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。 Apache POI常用的类 HSSF - 提供读写Microsoft Excel XLS格式档案…

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

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

C++发起Https请求

Wininet库忽略Https证书 相信很多朋友使用C WINAPI开发的时候网络模块的时候遇到Https忽悠证书无效的情况下, 仍然希望获取结果下列代码便是忽略异常的Https CA证书,下面对原理进行简单的讲解首先, 需要设置Https忽略需要用到如下结果函数与参数Interne…

初识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。 如果链表中有某个…