全网详解LVS的四种工作模式及案例

目录

LVS(Linux virual server)

一、集群和分布式的简介

二、LVS的运行原理

1、LVS简介

2、LVS 相关术语

3、LVS的集群类型

三、LVS-NAT工作模式

部署NAT工作模式案例:

1、实验环境

2、实验环境说明

3、配置

四、LVS-DR工作模式

部署DR工作模式案例:

1、实验环境

2、实验环境配置及说明

3、配置

五、LVS-TUN工作模式

六、fullnet工作模式

七、LVS工作模式总结

八、LVS的调度算法

1、lvs调度算法类型

2、lvs静态调度算法

3、lvs动态调度算法

4、部署DR模式集群案例

九、LVS部署命令介绍

ipvsadm命令参数的使用

LVSLinux virual server

一、集群和分布式的简介

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

二、LVS的运行原理

1、LVS简介

LVS:Linux Virtual Server ,负载调度器,内核集成,章文嵩,阿里的四层 SLB(Server LoadBalance) 是基于LVS+keepalived 实现
LVS 官网 : http://www.linuxvirtualserver.org/

2、LVS 相关术语

VS Virtual Server
RS Real Server
CIP Client IP
VIP: Virtual serve IP VS 外网的 IP
DIP: Director IP VS 内网的 IPL
RIP: Real server IP

3、LVS的集群类型

lvs-nat : 修改请求报文的目标IP, 多目标 IP DNAT
lvs-dr 操纵封装新的 MAC 地址
lvs-tun : 在原请求IP 报文之外新加一个 IP 首部
lvs-fullnat 修改请求报文的源和目标 IP

三、LVS-NAT工作模式

本质是多目标 IP DNAT ,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS RIP 和PORT实现转发
RIP DIP 应在同一个 IP 网络,且应使用私网地址 ;RS 的网关要指向 DIP
请求报文和响应报文都必须经由 Director 转发, Director 易于成为系统瓶颈
支持端口映射,可修改请求报文的目标 PORT
VS 必须是 Linux 系统, RS 可以是任意 OS 系统

部署NAT工作模式案例:

此实验采用openEuler版本系统

1、实验环境
主机名IP角色
lvs

192.168.182.141

仅主机:192.168.237.100

负载均衡器
client192.168.182.144客户端
webserver1仅主机:192.168.237.142web服务器
webserver2仅主机:192.168.237.143web服务器
 
2、实验环境说明

web服务器上的网络适配器改为仅主机模式

负载均衡器上添加一个网络适配器并改为仅主机模式

3、配置
web服务器配置
[root@webserver1 ~]# dnf install nginx -y
[root@webserver1 ~]# echo webserver1 > /usr/share/nginx/html/index.html
[root@webserver1 ~]# systemctl restart nginx.service
 
[root@webserver2 ~]# dnf install nginx -y
[root@webserver2 ~]# echo webserver1 > /usr/share/nginx/html/index.html
[root@webserver2 ~]# systemctl restart nginx.service 
lvs配置
开启内核路由转发:
[root@lvs ~]# vim /etc/sysctl.conf 
[root@lvs ~]# dnf install nginx -y
[root@lvs ~]# ipvsadm -A -t 192.168.182.141:80 -s rr  #rr指轮询算法
[root@lvs ~]# ipvsadm -a -t 192.168.182.141:80 -r 192.168.237.142:80 -m #-a添加,-r指要添加的web服务器IP
[root@lvs ~]# ipvsadm -a -t 192.168.182.141:80 -r 192.168.237.143:80 -m #-m指开启nat模式
[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.182.141:80 rr
  -> 192.168.237.142:80           Masq    1      0          1         
  -> 192.168.237.143:80           Masq    1      0          0 
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
客户端测试
[root@node4 ~]# for i in {1..10} 
> do
> curl 192.168.182.141
> done
webserver1
webserver2
webserver1
webserver2
webserver1
webserver2
webserver1
webserver2
webserver1
webserver2

四、LVS-DR工作模式

DR Direct Routing ,直接路由, LVS 默认模式 , 应用最广泛 , 通过为请求报文重新封装一个 MAC 首部进行
转发,源 MAC DIP 所在的接口的 MAC ,目标 MAC 是某挑选出的 RS RIP 所在接口的 MAC 地址;源
IP/PORT ,以及目标 IP/PORT 均保持不变
在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs上都要有vip

部署DR工作模式案例:

此实验采用openEuler版本系统

1、实验环境
主机名IPVIP角色
client192.168.182.144客户端
lvs仅主机:192.168.237.101lo:192.168.237.200负载均衡器
router

192.168.182.10

仅主机:192.168.237.100

路由器
webserver1仅主机:192.168.237.10lo:192.168.237.200web服务器
webserver2仅主机:192.168.237.20lo:192.168.237.200web服务器
2、实验环境配置及说明

client网络适配器为NAT模式

lvs添加一块网络适配器并改为仅主机模式
                
router添加一块网络适配器并改为仅主机模式
为你的仅主机模式的网卡添加一个IP 
webserver1和webserver2将网络适配器改为仅主机模式
         
webserver1和webserver2以环回接口添加VIP,VIP可自己指定但必须和lvs和web服务器在同一网段                   
将lvs、webserver1、webserver2的网关都改为路由器的IP
[root@lvs ~]# nmcli connection modify ens224 ipv4.gateway 192.168.237.100
[root@lvs ~]# nmcli con up ens224 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@lvs ~]# 
 
[root@webserver1 ~]# nmcli connection modify ens160 ipv4.gateway 192.168.237.100
[root@webserver1 ~]# nmcli con up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@webserver1 ~]# 
[root@webserver2 ~]# nmcli connection modify ens160 ipv4.gateway 192.168.237.100
[root@webserver2 ~]# nmcli con up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@webserver2 ~]# 
3、配置
在webserver1和webserver2上搭建一个nginx服务并做ARP抑制

[root@webserver1 ~]# dnf install nginx -y
[root@webserver1 ~]# echo my name is lhd > /usr/share/nginx/html/index.html
[root@webserver1 ~]# systemctl restart nginx.service 
[root@webserver1 ~]#

[root@webserver2 ~]# dnf install nginx -y
[root@webserver2 ~]# echo my name is lhd2 > /usr/share/nginx/html/index.html
[root@webserver2 ~]# systemctl restart nginx.service 
[root@webserver2 ~]#

做ARP抑制,防止web服务发起广播
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
负载调度器上的配置
[root@lvs ~]# ipvsadm -A -t 192.168.237.200:80 -s wrr #wrr指加权轮询
[root@lvs ~]# ipvsadm -a -t 192.168.237.200:80 -r 192.168.237.10:80 -g -w 1 #-a指添加
[root@lvs ~]# ipvsadm -a -t 192.168.237.200:80 -r 192.168.237.20:80 -g -w 2 #-g指DR模式
[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.237.200:80 wrr
  -> 192.168.237.10:80            Route   1      0          0         
  -> 192.168.237.20:80            Route   2      0          0
客户端测试:
[root@client ~]# for ((i=1;i<=10;i++)) ; do curl 192.168.237.200; done
my name is lhd2
my name is lhd
my name is lhd2
my name is lhd2
my name is lhd
my name is lhd2
my name is lhd2
my name is lhd
my name is lhd2
my name is lhd2

五、LVS-TUN工作模式

转发方式:不修改请求报文的 IP 首部(源 IP CIP ,目标 IP VIP ),而在原 IP 报文之外再封装一个 IP 首部
(源 IP DIP, 目标 IP RIP ),将报文发往挑选出的目标 RS
RS 直接响应给客户端(源 IP VIP ,目标 IP是CIP
1. 客户端发送请求数据包,包内有源 IP+vip+dport
2. 到达 vs 调度器后对客户端发送过来的数据包重新封装添加 IP 报文头,新添加的 IP 报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到 RS1
3.RS 收到 VS 调度器发送过来的数据包做出响应,生成的响应报文中包含 SRCIP(VIP)+DSTIP CIP) +port,响应数据包通过网络直接回传给 client

六、fullnet工作模式

fullnat :通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP 是公网地址, RIP DIP 是私网地址,且通常不在同一 IP 网络;因此, RIP 的网关一般不会指向 DIP
2.RS 收到的请求报文源地址是 DIP ,因此,只需响应给 DIP ;但 Director 还要将其发往 Client
3. 请求和响应报文都经由 Director
4. 支持端口映射
注意:此类型kernel默认不支持

七、LVS工作模式总结

NAT模式DR模式TUN模式
RS 操作系统
不限
支持隧道禁用arp
调度器和服务器网络
可跨网络可跨网络不可跨网络
调度服务器数量服务器数量
RS 服务器网关
指向到调度器 DIP
指向到路由
指向到路由
lvs-nat lvs-fullnat :请求和响应报文都经由 Director
lvs-nat RIP 的网关要指向 DIP
lvs-fullnat RIP DIP 未必在同一 IP 网络,但要能通信
lvs-dr lvs-tun :请求报文要经由 Director ,但响应报文由 RS 直接发往 Client
lvs-dr :通过封装新的 MAC 首部实现,通过 MAC 网络转发
lvs-tun :通过在原 IP 报文外封装新 IP 头实现转发,支持远距离通信

八、LVS的调度算法

1、lvs调度算法类型

ipvs scheduler :根据其调度时是否考虑各 RS 当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况
动态方法:主要根据每 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 将被调度

2、lvs静态调度算法

1 RR roundrobin 轮询 RS 分别被调度,当 RS 配置有差别时不推荐
2 WRR Weighted RR ,加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少
3 SH Source Hashing ,实现 session sticky ,源 IP 地址 hash ;将来自于同一个 IP 地址的请求始终发往第一次挑中的RS ,从而实现会话绑定
4 DH Destination Hashing ;目标地址哈希,第一次轮询调度至 RS ,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

3、lvs动态调度算法

主要根据 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 会被调度
1 LC least connections (最少链接发)
适用于长连接应用 Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns (非活
动链接数)
2 WLC Weighted LC (权重最少链接)
默认调度方法 Overhead=(activeconns x 256+inactiveconns)/weight
3 SED Shortest Expection Delay, 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当 node1 的权重为 1 node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接
4 NQ Never Queue ,第一轮均匀分配,后续 SED
5 LBLC Locality-Based LC ,动态的 DH 算法,使用场景:根据负载状态实现正向代理
6 LBLCR LBLC with Replication ,带复制功能的 LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的RS

4、部署DR模式集群案例

利用防火墙标签解决轮询错误(基于lvs的DR直连路由工作模式)
后端服务器需使用mod_ssl工具并使用https的443端口
Iptables -t mangle -A PREROUTING  -d 192.168.237.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 88

-t:指定是什么类型的表
-A:添加
PREROUTING 链规则:在数据包进入路由之前进行处理,常用于对数据包进行 NAT 转换。
-d:指定VIP
-p:指定网络协议tcp
-m:指定多个端口
--dports:目标端口
-j:后面指标签
--set-mark:设定标签号

九、LVS部署命令介绍

ipvsadm命令参数的使用

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 火墙标记,是一个数字
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
ipvsadm -Z [-t|u|f service-address] 清楚计数器
-a # 添加 realserver
-e # 更改 realserver
-t #tcp 协议
-u #udp 协议
-f # 火墙 标签
-r #realserver 地址
-g # 直连路由模式
-i #ipip 隧道模式
-m #nat 模式
-w # 设定权重
-Z # 清空计数器
-C # 清空 lvs 策略
-L # 查看 lvs 策略
-n # 不做解析
--rate :输出速率信息
  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LVS(Linux Virtual Server)是一个用于构建高性能、高可用性的服务器集群的软件。它支持四种工作模式,它们是: 1. NAT模式(Network Address Translation):在NAT模式下,负载均衡器将客户端请求的源IP地址和端口转换为负载均衡器自身的IP地址和端口,并将请求转发给后端服务器。这种模式适用于需要隐藏后端服务器真实IP地址的场景。 2. IP隧道模式(Tunneling):在IP隧道模式下,负载均衡器将客户端请求封装在一个新的IP包中,并将该包的目的IP地址设置为后端服务器的IP地址,然后将请求发送给后端服务器。该模式适用于需要直接将请求发送给后端服务器的场景。 3. DR模式(Direct Routing):在DR模式下,负载均衡器将客户端请求的目标MAC地址设置为后端服务器的MAC地址,并将请求转发给后端服务器。后端服务器处理完请求后,直接发送响应给客户端,不经过负载均衡器。这种模式适用于后端服务器和负载均衡器在同一子网内的场景。 4. TUN模式(Routing):在TUN模式下,负载均衡器将客户端请求封装在一个新的IP包中,并将该包的目标IP地址设置为后端服务器的IP地址,然后将请求发送给后端服务器。后端服务器处理完请求后,将响应发送给负载均衡器,再由负载均衡器发送给客户端。这种模式适用于后端服务器和负载均衡器在不同子网内的场景。 这些工作模式的选择取决于具体的应用场景和网络架构需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值