lvs

本文深入讲解LVS(Linux Virtual Server)集群系统,包括其工作原理、三种主要模式(NAT、DR、TUN)的配置与优缺点,以及内核模块IPVS支持的调度算法。LVS是由章文嵩博士主导的开源项目,现已集成到Linux内核中,适用于负载均衡场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

LVS( linux virtual server )即linux虚拟服务器,是一个虚拟的服务器集群系统,由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到linux内核模块中。

LVS工作原理
LVS的 IP负载均衡技术是通过 IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在 Director server上,同时在 director server 上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务器。这个虚拟的IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从real server 列表中选取一个服务节点响应用户的请求。在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的real server 节点,而 real server 节点如何返回数据给用户,是IPVS实现的技术。

IPVS : 工作在内核空间,主要用于使用户定义的策略生效
ipvsadm:工作于用户空间,主要用于定义和管理集群服务的工具

在这里插入图片描述
上图所示,ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入 netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWARD链,将报文转发至后端真实提供服务的主机。

| 名称 | 缩写 | 说明
| 虚拟IP地址 | VIP | VIP为Director 用于向客户端计算机提供服务的IP地址。
| 真实IP地址 | RIP | 在集群节点上使用的真实地址
| Director的IP地址 | DIP |用于连接内外网络的IP地址,物理网卡上的IP地址。负载均衡器上的IP。
| 客户端主机IP地址 | CIP |客户端用于计算机请求集群服务器的IP地址,该IP地址用作发送给集群的请求的源IP地址。

LVS—nat模式
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT来实现转发。
实现要点:
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发;极高负载的场景中,Director可能成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)VS必须是linux系统,RS可以是任意系统
在这里插入图片描述
1、客户端访问集群的VIP,请求WEB资源(请求报文:源地址为CIP,目标地址为VIP);
2、Director收到客户端的请求报文,会修改请求报文中的目标地址(VIP)为RIP,并且将请求根据相应的调度算法送往后端WEB服务器(请求报文:源地址CIP,目标地址为RIP);
3、WEB服务器收到请求,检查报文是访问自己的而自己也提供WEB服务,就会响应这个请求报文,并发送给Director(响应报文:源地址RIP,目标地址CIP);
4、Director收到WEB服务器的响应报文,会根据自己内部的追踪机制,判断出用户访问的是VIP,此时会修改源地址为VIP并响应客户端请求(响应报文:源地址VIP,目标地址CIP)。

nat模型优劣势:
  优势:节点服务器使用私有IP地址,与负载调度器位于同一个物理网络,安全性比DR模式和TUN模式要高。
  劣势:调度器位于客户端和集群节点之间,并负责处理进出的所有通信(压力大的根本原因),大规模应用场景中,调度器容易成为系统瓶颈

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

在这里插入图片描述
1、客户端将请求发送给Director的VIP请求服务;
2、VIP通过调度算法,将请求发送给后端的RS,这个时候源地址改成DIP,目标地址改成RIP;
3、RS接收到请求后,由于源地址是DIP,则一定会对DIP进行回应;
4、Director收到RS的响应后,修改数据报的源地址为VIP,目标地址为CIP进行响应。

DR模式
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
要点:
(1)Director和各RS都得配置使用VIP;
(2)确保前端路由器将目标IP为VIP的请求报文发往Director:通过在RS上修改内核参数以限制arp通告及应答级别(arp_announce及arp_ignore);
(3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;VIP配置在DR上的时候,应该是在eth0:0上,在RS上配置VIP的时候,就必须是lo:0了,否则达不到让RS不响应VIP的ARP通告的效果。
(4)RS跟Director要在同一个物理网络即同一广播域;
(5)请求报文要经由Director,但响应不能经由Director,而是由RS通过网关直接发往Client;
(6)不支持端口映射

在这里插入图片描述
1、客户端CIP的请求发送给Director调度器的VIP;
2、Director调度器收到客户端的请求包后,将数据包的MAC地址改成Director调度器选择的某一台RS的MAC地址,并通过交换机(数据链路层)发送给RS服务器(因为MAC地址是RS的MAC地址,所以,RS可以接收到该数据报),注意:此时数据包的目的及源IP地址没有发生任何改变;
3、 (1) RS的数据链路层收到发送来的数据报文请求后,会从链路层往上传给IP层,此时IP层需要验证请求的目标IP地址。因为包的目标IP(即VIP)并不是像常规数据报那样为RS的本地IP,而仅仅目的MAC地址是RS的。所以,在RS上需要配置一个VIP的LoopbackDevice,是因为LoopbackDevice是服务器本地使用的网络接口,对外是不可见的,不会跟Director的VIP冲突;
(2) RS处理数据包完成后,将应答直接返回给客户端(源IP为VIP,目标IP为CIP),响应的数据报不再经过Director调度器。因此如果对外提供LVS负载均衡服务,则RS需要连上互联网才能将应答包返回给客户端。RS最好为带公网IP的服务器,这样可以不经过网关直接回应客户;如果多个RS使用了同一网关出口,网关会成为LVS架构的瓶颈,会大大降低LVS的性能。

dr模型优劣势:
  优势:负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端,大大提高了服务器并发能力。
  劣势:(1) LVS-RS间必须在同一个VLAN; (2) RS上绑定VIP,风险大。

LVS—tun:

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。
要点:
(1)DIP,VIP,RIP都应该是公网地址;
(2)RS的网关不能,也不可能指向DIP,在RS的lo别名网卡上配置vip地址;
(3)请求报文要经由Director,但响应不能经由Director;
(4)不支持端口映射;
(5)RS的OS得支持隧道功能
在这里插入图片描述
1、用户发送请求到Director的VIP请求服务;
2、当用户请求到达Director的时候,根据调度算法选择一台RS进行转发,这时使用隧道(tun)封装两个IP首部,此时源IP是DIP,目标IP是RIP;
3、当RS接收到数据报后,看到外层的IP首部,目标地址是自己,就会拆开封装,解析完毕后,发送响应报文,源IP是VIP,目标IP是CIP。
 tun模型优劣势:

优势:实现了异地容灾,避免了一个机房故障导致网站无法访问。
  劣势:RS配置复杂。

LVS调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:

轮叫调度(Round-Robin Scheduling)
加权轮叫调度(Weighted Round-Robin Scheduling)
最小连接调度(Least-Connection Scheduling)
加权最小连接调度(Weighted Least-Connection Scheduling)
基于局部性的最少链接(Locality-Based Least Connections Scheduling)
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
目标地址散列调度(Destination Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

课堂记录
系统的扩展方式:
scale up:向上扩展
scale out: 向外扩展
集群类型:
LB
HA
LB集群的实现
硬件:
F5
Redware

	软件:
		lvs
		haproxy
		nginx
		
		基于工作的协议层划分:
			传输层:
				lvs:工作在内核模块中
				haproxy:1.mode tcp,如果工作在应用层只能调度http协议,如果基于tcp协议它能够调度https,mysql等常用的tcp协议
						2.haproxy只是模拟tcp协议,因为tcp协议工作在内核当中,而haproxy属于应用程序工作在第七层,是工作在某个套接字上的应用程序
			应用层:
				haproxy,nginx


lvs:
	章文嵩:正明
	lvs:linux virtual server
	
	工作在input链上,lvs接收报文转发的流程:PREROUTING-->INPUT-->POSTROUTING
	用户空间:ipvsadm:定义转发规则通过系统调用把规则发送给内核中的ipvs
	
			
	
	lvs术语:
		调度器:director server
		RS: Real Server
		
		
		Client IP: CIP
		Director Virtual IP:VIP
		Director IP: DIP
		Real Server IP: RIP
		
	lvs type:
		lvs-nat
		lvs-dr(direct routing)
		lvs-tun(ip tunneling)
		
			lvs-nat:
				多目标的DNAT(IPTABLES):它通过修改请求报文的目标ip地址(同时可能修改目标端口)
				至挑选出来的某个RS的RIP地址实现转发
				特点:
					(1)RIP应该和DIP使用私网地址,且RS的网关应该指向DIP;
					(2)请求和响应报文都要经过director server,因此在并发量较高的情况下,director server有可能成为瓶颈
					(3)支持端口映射
					(4)RS可以使用任意OS
					(5)RS的RIP和director的DIP必须同一网络中
					
					
			lvs-dr: direct routing
				它通过修改请求报文的目标mac地址进行转发
				特点:
					(1)保证前段路由器将目标ip为vip的请求发送给director server
						解决方案:
							静态绑定
							arptables
							修改RS主机内核的参数
					(2)RS的DS必须在同一个物理网络中
					(3)请求报文经由Director调度,但响应报文一定不能经过director
					(4)不支持端口映射
					(5)RS可以是大多数的OS
					(6)RS的网关不能指向DIP
					
					
	lvs支持的算法
		grep -i -A 10 'IPVS' /boot/config-3.10.0-957.el7.x86_64 
			# IPVS scheduler
			CONFIG_IP_VS_RR=m
			CONFIG_IP_VS_WRR=m
			CONFIG_IP_VS_LC=m
			CONFIG_IP_VS_WLC=m
			CONFIG_IP_VS_LBLC=m
			CONFIG_IP_VS_LBLCR=m
			CONFIG_IP_VS_DH=m
			CONFIG_IP_VS_SH=m
			CONFIG_IP_VS_SED=m	
			
		静态方法:仅根据算法本身进行调度
			RR:round robin,轮调
			WRR:weighted RR
			SH:source hash,实现session保持的机制
			DH:destination hash,将同一个目标的请求始终发往同一个RS
		动态方法:gun局算法及各RS的当前负载状态进行调度
			LC:Least Connection
				Overhead=Active*256 + Inactive
			WLC:Weighted LC
				Overhead=(Active*256 + Inactive)/weighted
				overhead较小的即被挑选的主机
			SED:
			LBLC:
			LBLCR:

nat模式配置
环境说明:
DS:nat网卡(自动获取也可以,充当vip):
192.168.254.13
255.255.255.0
vmnet3网卡(仅主机):
172.16.100.1
255.255.255.0
RS1:(仅主机vmnet3)
172.16.100.10
255.255.255.0
172.16.100.1
RS2:(仅主机vmnet3)
172.16.100.20
255.255.255.0
172.16.100.1
安装lvs:
yum install ipvsadm
调度器上开启路由转发模式:
临时性:
[root@db1 ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
永久性:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
ipvsadm配置:
ipvsadm -A -t 192.168.254.13:80 -s rr
ipvsadm -a -t 192.168.254.13:80 -r 172.16.105.10 -m
ipvsadm -a -t 192.168.254.13:80 -r 172.16.100.20 -m

ipvsadm命令
	查看lvs集群连接状态		ipvsadm -Ln --stats
	查看lvs集群配置			ipvsadm -Ln 
	保存ipvs配置			ipvsadm-save
	还原					ipvsadm-restore

dr模式配置:
虚拟机网卡模式:
DS:NAT(自动获取)
RS1:NAT(自动获取)
RS2:NAT(自动获取)
DR模式
direct_server:192.168.254.13
real_server:192.168.254.12
real_server:192.168.254.10
#vip为虚拟服务ip
vip:192.168.254.250
在这里插入图片描述

	direct_server:
		yum install ipvsadm

	老板
	direct_server:
		ipvsadm -C    #清除配置信息
		#添加对外提供的服务ip
		ipvsadm -A -t 192.168.254.250:80 -s rr    #-A为ADD   -t为tcp   -s rr为设置算法为轮叫算法
		#添加2台real_server主机
		ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.12:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式
		ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.10:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式
		#配置网卡的子网口为vip,ip地址为192.168.254.250
		ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up
		#添加路由(访问192.168.254.250都走ens33:0这个网卡)
		route add -host 192.168.254.250 dev ens33:0

	员工1 | 员工2
	real_server:
		#在回环地址的子网口上配置服务ip(vip)
		ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up 
		#添加路由
		route add -host 192.168.254.250 dev lo:0
		echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
		echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
		echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
		echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

	关闭:
		echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
		echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
		echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
		echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

		arp_ignore:定义接收到ARP请求时的响应级别      
			0:默认,只用本地配置的有响应地址都给予响应       
			1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
				(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
		arp_announce:定义将自己的地址向外通告时的级别       
			0:默认,表示使用配置在任何接口的任何地址向外通告       
			1:尽量仅向目标网络通告与其网络匹配的地址       
			2:仅向与本地接口上地址匹配的网络进行通告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值