linux系统lvs负载均衡和四种工作模式

lvs负载均衡和工作模式

LVS负载均衡

LVS 优势与不足

优势

高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。

**稳定性强:**是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。

**成本低廉:**硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。

**配置简单:**LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。

**支持多种算法:**支持多种论调算法,可根据业务场景灵活调配进行使用

**支持多种工作模型:**可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

不足

工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

LVS 核心组件和专业术语

核心组件
复制代码
LVS的管理工具和内核模块 ipvsadm/ipvs

ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等

ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发
专业术语
ini 复制代码
VS:Virtual Server             #虚拟服务
Director, Balancer            #负载均衡器、分发器
RS:Real Server                #后端请求处理服务器 
CIP: Client IP                #用户端IP
VIP:Director Virtual IP       #负载均衡器虚拟IP
DIP:Director IP               #负载均衡器IP
RIP:Real Server IP            #后端请求处理服务器IP

LVS负载均衡四种工作模式

shell 复制代码
LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址)  --利用三层功能
LVS/DR:直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)--利用二层功能mac地址
LVS/TUN:隧道模式,只有进站的数据流量经过分发器
LVS/full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发

NAT模式

ini 复制代码
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢
ini 复制代码
# 配置后台服务器
yum install nginx -y
echo web1 > /usr/share/nginx/html/index.html
systemctl start nginx
ip route add default via [ip]      # 配置下一跳默认路由,rs主机配置lvs-server端仅主机ip

route -n   查看目前路由表
routef     清除所有网关项的路由表

#配置lvs-server开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p								//确保打开路由转发

yum install ipvsadm -y                  //下载ipvsadm工具

ipvsadm -A -t 公网ip:80 -s rr     //转发访问到rs主机的ip

设置后端服务器:
ipvsadm -a -t 公网ip:80 -r 后端仅主机ip -m
ipvsadm -a -t 公网ip:80 -r 后端仅主机ip -m


查看ipvsadm规则:ipvsadm -Ln

浏览器访问公网ip

ab -c 1000 -n 1000 http://公网ip/               //压力测试工具访问公网ip

DR模式

ini 复制代码
原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
ini 复制代码
Director分发器配置

DR服务器配置
配置VIP
ip addr add dev ens33 ip/子网掩码                  //添加新的一个ip设置VIP
ip addr del ip/子网掩码 dev ens33                  //如果添加ip错了,用这个删除ip
yum install -y ipvsadm                            //RHEL确保LoadBalancer仓库可用

定义LVS分发策略
ipvsadm -C  #清除内核虚拟服务器表中的所有记录。

ipvsadm -A -t 新添加ip:80 -s rr 
ipvsadm -a -t 新添加ip:80 -r 后台服务器ip:80 -g 
ipvsadm -a -t 新添加ip:80 -r 后台服务器ip:80 -g  

ipvsadm -ln


所有后端服务器配置
yum install -y nginx

echo "real-server1" >> /usr/share/nginx/html/index.html

ip addr add dev lo DR服务器新加的ip/32               #在lo接口上绑定VIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore    #忽略arp广播
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  #匹配精确ip地址回包
systemctl start nginx                              #启动nginx
systemctl enable  nginx                            #设置开启自启


其他服务器访问DR服务器新加的ip,查看负载均衡效果

Tun隧道模式

复制代码
原理:互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

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

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

FULL-NAT模式

复制代码
原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP

四者的区别

复制代码
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头实现转发,支持远距离通信 
相关推荐
软件测试很重要4 分钟前
UOS20系统安装与 SSH/XRDP 远程访问功能配置指南
linux·运维·ssh
GanGuaGua1 小时前
Linux系统:线程的互斥和安全
linux·运维·服务器·c语言·c++·安全
lsnm1 小时前
【LINUX网络】IP——网络层
linux·服务器·网络·c++·网络协议·tcp/ip
不掰手腕2 小时前
在UnionTech OS Server 20 (统信UOS服务器版) 上离线安装PostgreSQL (pgsql) 数据库
linux·数据库·postgresql
乐大师2 小时前
腾讯云负载均衡增加访问策略后访问失败
云计算·负载均衡·腾讯云
Lynnxiaowen2 小时前
今天继续昨天的正则表达式进行学习
linux·运维·学习·正则表达式·云计算·bash
努力学习的小廉2 小时前
深入了解linux系统—— POSIX信号量
linux·运维·服务器
刘一说2 小时前
CentOS部署ELK Stack完整指南
linux·elk·centos
从零开始的ops生活2 小时前
【Day 50 】Linux-nginx反向代理与负载均衡
linux·nginx
IT成长日记3 小时前
【Linux基础】Linux系统配置IP详解:从入门到精通
linux·运维·tcp/ip·ip地址配置