LVS负载均衡(三种工作模式、原理、实验)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 本篇内容记录了LVS负载均衡的一些相关知识。

一、LVS DR 模式


DR(Direct Routing)模式的网络结构:


微信图片_20220509085403.png


工作原理:


DR和REAL SERVER都是用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REAL SERVER对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REAL SERVER。这时REAL SERVER收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和REAL SERVER之间必须在一个广播域,也可以理解为在同一台交换机上。

白话文:客户端发起一个http请求,我要上网,那么这个请求发给DR(调度均衡服务器),DR看这个请求的MAC地址是那个然后发给对应的RS(真实服务器),RS直接把回应发给client。


搭建DR环境:


基础环境:
Centos7.7
DR:
DIP:11.11.11.10 VIP:11.11.11.13
RS1:
RIP:11.11.11.11 VIP:11.11.11.13
RS2:
RIP:11.11.11.12 VIP:11.11.11.13


1、关闭防火墙和SELINUX


[root@d ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl stop firewalld
[root@d ~]# setenforce 0
[root@rs1 ~]# setenforce 0
[root@rs2 ~]# setenforce 0


2、DR操作


(1)配置VIP和路由转发
[root@d ~]# ifconfig ens32:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
[root@d ~]# route add -host 11.11.11.13 dev ens32:0
[root@d ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1 #开启路由转发功能
 (2)安装集群管理工具并进行配置
[root@d ~]# yum install -y ipvsadm
[root@d ~]# ipvsadm -A -t 11.11.11.13:80 -s wrr
[root@d ~]# ipvsadm -a -t 11.11.11.13:80 -r 11.11.11.11 -g -w 1
[root@d ~]# ipvsadm -a -t 11.11.11.13:80 -r 11.11.11.12 -g -w 1
-A在服务器列表中新添加一条新的虚拟服务器记录
-t表示为tcp服务
-s使用的调度算法
-a在服务器表中添加一条新的真实主机记录
-r真实服务器地址
-m指定LVS工作模式为NAT模式
-g指定LVS工作模式为直接路由模式(LVS默认的模式)
-w真实服务器的权值


3.RS操作


[root@rs1 ~]# ifconfig lo:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
#配置VIP到本地回环网卡lo上,并只广播自己
[root@rs1 ~]# route add -host 11.11.11.13 lo:0
#配置本地回环网卡路由
[root@rs1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
#1只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
[root@rs1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
#2对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址
[root@rs1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
#1仅在请求的目标IP配置在本地主机的接收到请求报文的接口上,才给予回应
[root@rs1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#2必须避免将接口信息向非本网络进行通告
[root@rs2 ~]# ifconfig lo:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
[root@rs2 ~]# route add -host 11.11.11.13 lo:0
[root@rs2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce


4.RS进行测试


[root@rs1 ~]# yum install -y httpd
[root@rs1 ~]# echo "test" > /var/www/html/index.html && systemctl restart httpd
[root@rs2 ~]# yum install -y httpd
[root@rs2 ~]# echo "test" > /var/www/html/index.html && systemctl restart httpd


微信图片_20220509085735.png


微信图片_20220509085740.png


微信图片_20220509085745.png


DR模式负载均衡完成啦!


二、、LVS NAT模式


微信图片_20220509094737.png


实验原理:就是不端的转化dest地址,利用了nat原理(一目了然)


微信图片_20220509094810.png


搭建LVS的NAT模式环境


基础环境: Centos7.7


4台虚拟机


client: CIP:192.168.1.17
lvs: 内网:11.11.11.10 外网:192.168.1.16
RS1:内网:11.11.11.11
RS2: 内网:11.11.11.12
192.168.1.0网段网络为我虚拟机桥接网络,11.11.11.0为仅主机网段


1.关闭防火墙和selinux


[root@d ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl stop firewalld
[root@client ~]# systemctl stop firewalld
[root@d ~]# setenforce 0
[root@rs1 ~]# setenforce 0
[root@rs2 ~]# setenforce 0
[root@client ~]# setenforce 0


2.lvs服务器配置


[root@d ~]# yum install ipvsadm -y
#设置集群调度算法,(便于验证,此处使用轮询算法):
[root@d ~]# ipvsadm -A -t 11.11.11.10:80 -s rr
设置后端服务器:
[root@d ~]# ipvsadm -a -t 11.11.11.10:80 -r 11.11.11.11  -w 
[root@d ~]# ipvsadm -a -t 11.11.11.10:80 -r 11.11.11.12  -w
查看ipvsadm规则(这些规则没有保存在配置文件,重启失效):
[root@d ~]# 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.1.16:80 rr
  -> 11.11.11.11:80               Masq    1      0          0         
  -> 11.11.11.12:80               Masq    1      0          0 
#sever1收到客户端请求后,得到一个公网的ip,跟目的主机server2和server3不在一个网段
所以如果想要将客户端来的数据包转发给后端服务器,那么必须对这个数据包进行ip转换,再进行数据包转发。
出于安全考虑,Linux系统默认是禁止数据包转发的。配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能.
[root@d ~]# vi /etc/sysctl.conf 
...
net.ipv4.ip_forward = 1
[root@d ~]# systemctl restart network


3.web服务器配置


[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# echo web1 > /var/www/html/index.html
[root@rs1 ~]# systemctl start httpd
[root@rs1 ~]# route add default gw 11.11.11.10
[root@rs1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         11.11.11.10     0.0.0.0         UG    0      0        0 ens32
11.11.11.0      0.0.0.0         255.255.255.0   U     100    0        0 ens32
[root@rs2 ~]# yum install httpd -y
[root@rs2 ~]# echo web2 > /var/www/html/index.html
[root@rs2 ~]# systemctl start httpd
[root@rs2 ~]# route add default gw 11.11.11.10
[root@rs2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         11.11.11.10     0.0.0.0         UG    0      0        0 ens32
11.11.11.0      0.0.0.0         255.255.255.0   U     100    0        0 ens32


4.client端进行测试


[root@client ~]# curl 192.168.1.16
web1
[root@client ~]# curl 192.168.1.16
web2


LVS的nat模式实验成功啦!


三、VS/TUN模式


实验原理: ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。


②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。


③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。


优点:


负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。


缺点:


隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP

Encapsulation)协议,服务器可能只局限在部分Linux系统上。


相比于其他两种模式,TUN 模式用的不多






相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
20天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
2月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
72 8
LVS+Keepalived 负载均衡
|
1月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
37 3
|
2月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
63 5
|
3月前
|
负载均衡 算法 调度
负载均衡原理分析与源码解读
负载均衡原理分析与源码解读
|
3月前
|
负载均衡 算法 微服务
基于gRPC的注册发现与负载均衡的原理和实战
基于gRPC的注册发现与负载均衡的原理和实战
|
3月前
|
负载均衡 网络协议 Linux
在Linux中, LVS三种模式的工作过程是什么?
在Linux中, LVS三种模式的工作过程是什么?
|
3月前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现
|
3月前
|
负载均衡 监控 网络协议
在Linux中,LVS-DR模式原理是什么?
在Linux中,LVS-DR模式原理是什么?
|
3月前
|
负载均衡 算法 Linux
在Linux中,LVS-NAT模式的原理是什么?
在Linux中,LVS-NAT模式的原理是什么?