Linux LVS 介绍
2022/1/9 7:03:36
本文主要是介绍Linux LVS 介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
lvs介绍
LVS: Linux Virtual Server, 负载调度器,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux2.6内核中已经集成,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。
LVS 时全球最流程的四层负载均衡开源软件。
LVS 官网:http://www.linuxvirtualserver.org/
阿里云SLB简介:https://developer.aliyun.com/article/1803
整个SLB系统由3部分构成:四层负载均衡,七层负载均衡 和 控制系统,如下图所示;
四层负载均衡,采用开源软件LVS(linux virtual server),并根据云计算需求对其进行了定制化;该技术已经在阿里巴巴内部业务全面上线应用2年多详见第3节;
七层负载均衡,采用开源软件Tengine;该技术已经在阿里巴巴内部业务全面上线应用3年多;参见第4节;
控制系统,用于 配置和监控 负载均衡系统;
LVS工作原理
LVS 根据报文的目标IP和目标协议及端口将其调度转发至某RS, 根据调度算法来挑选RS,LVS是内核级高恩那个, 工作在INPUT链上,将发往INPUT的流量进行处理。
ubuntu加载lvs
root@ops101:~# for i in $(ls /lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i; done ip_vs_dh ip_vs_fo ip_vs_ftp ip_vs ip_vs_lblc ip_vs_lblcr ip_vs_lc ip_vs_mh ip_vs_nq ip_vs_ovf ip_vs_pe_sip ip_vs_rr ip_vs_sed ip_vs_sh ip_vs_wlc ip_vs_wrr root@ops101:~# ls /lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*" >> /etc/modules root@ops101:~# lsmod | grep ip_vs ip_vs_wrr 20480 0 ip_vs_wlc 16384 0 ip_vs_sh 16384 0 ip_vs_sed 16384 0 ip_vs_rr 20480 0 ip_vs_pe_sip 16384 0 nf_conntrack_sip 45056 1 ip_vs_pe_sip ip_vs_ovf 16384 0 ip_vs_nq 16384 0 ip_vs_mh 16384 0 ip_vs_lc 16384 0 ip_vs_lblcr 24576 0 ip_vs_lblc 20480 0 ip_vs_ftp 20480 0 nf_nat 53248 1 ip_vs_ftp ip_vs_fo 16384 0 ip_vs_dh 16384 0 ip_vs 192512 30 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_ovf,ip_vs_fo,ip_vs_nq,ip_v_lblc,ip_vs_pe_sip,ip_vs_wrr,ip_vs_lc,ip_vs_mh,ip_vs_sed,ip_vs_ftp nf_conntrack 184320 3 nf_nat,nf_conntrack_sip,ip_vs nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs libcrc32c 16384 6 nf_conntrack,nf_nat,btrfs,xfs,raid456,ip_vs root@ops101:~# grep -i ip_vs /boot/config-5.4.0-91-generic CONFIG_IP_VS=m CONFIG_IP_VS_IPV6=y # CONFIG_IP_VS_DEBUG is not set CONFIG_IP_VS_TAB_BITS=12 CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_PROTO_AH_ESP=y CONFIG_IP_VS_PROTO_ESP=y CONFIG_IP_VS_PROTO_AH=y CONFIG_IP_VS_PROTO_SCTP=y CONFIG_IP_VS_RR=m CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m CONFIG_IP_VS_FO=m CONFIG_IP_VS_OVF=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m CONFIG_IP_VS_SH=m CONFIG_IP_VS_MH=m CONFIG_IP_VS_SED=m CONFIG_IP_VS_NQ=m CONFIG_IP_VS_SH_TAB_BITS=8 CONFIG_IP_VS_MH_TAB_INDEX=12 CONFIG_IP_VS_FTP=m CONFIG_IP_VS_NFCT=y CONFIG_IP_VS_PE_SIP=m
LVS 系统架构
LVS 工作模式 及 调度算法
LVS 工作模式
- lvs-nat:修改请求报文的目标IP,多目标的IP的DNSAT
- lvs-dr: 为请求报文重新封装一个MAC首部进行转发。
- lvs-tun: 在原请求报文之外新增加一个IP首部。
- lvs-fullnat:修改请求报文的源和目标IP。
LVS 的 NAT 模式
NAT 模式本质是多目标IP的DNAT, 通过将请求报文中的目标地址和目标端口修改为某哥挑选出的RS和RIP实现转发。
特点:
- RIP 和 DIP 应在同一个IP网络,且应使用私网地址,RS的网关要指向DIP。
- 请求报文和相应报文都必须由 Director 转发。 Director 易于成为系统瓶颈。
- 支持端口映射,可修改请求报文的目标PORT。
- VS 必须是Linux系统,RS可以是任意OS系统。
LVS 的 DR 模式
DR 模式即 Direct Routing,直接路由。LVS 默认模式, 应用最广泛,通过为请求报文重新封装一个MAC首部进行转发。源 MAC 是DIP 所在的借口MAC, 目标MAC是挑选出的RS的RIP所在的借口MAC地址,源IP/PORT,以及目标IP/PORT均保持不变。
特点:
- Direcotor 和 各RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求发往Director。
- 在前端网关做静态绑定VIP和Director的MAC地址
- 在RS上使用 arotables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
- 在 RS 上修改内核参数限制 ARP 通告几应答级别。
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
- RS 的 RIP 可以使用似网地址, 也可以是公网地址,RIP 与 DIP 在同一个IP网络,RIP的网管不能指向DIP,已确保报文不会经由Director。
- RS 和 Director 要在同一个物理网络。
- 请求报文要经由 Director, 但相应报文不经由 Director,而由Rs 直接发往 CLient。
- 不支持端口映射(端口不能修改)
- 无需开启 ip_forward
- Rs 可以使用大多数的OS系统。
LVS 的 TUN 模式
隧道模式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP), 而在源IP报文之外在封装一个IP首部(源IP是DIP, 目标IP是RIP),将报文发往挑选出的目标RS,RS直接相应给客户端(源IP是VIP,目标IP是CIP)。
特点:
- RIP和DIP可以不在同一无力网络内,RS的网关一半不能指向DIP,且RIP可以和公网通信,也就是说集群节点可以跨互联网实现,DIP,VIP,RIP可以是公网地址。
- RealServer 的 Tun 接口上需要配置VIP地址,以便接收发过来的数据包,以及作为相应的报文源IP。
- Director 转发给 RealServer 时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer 相应给客户端的IP头部是根据隧道内层的IP头分析的到的。源IP是VIP,目标IP是CIP。
- 请求报文都要经过 Director, 但相应不经由 Director,响应由 RealServer 自己完成。
- 不支持端口映射。
- RS的OS必须支持隧道功能。
应用场景
一般来说,TUN模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。
LAN环境一般多采用DR模式,WAN环境虽然可以用TUN模式,但是一般在WAN环境下,请求转发更多的被haproxy/nginx/DNS等实现。因此,TUN模式实际应用的很少,跨机房的应用一般专线光纤连接或DNS调度
LVS 的 FULLNAT 模式
通过同时修改报文的源IP和目标IP进行转发。
CIP -->> DIP
VIP -->> RIP
特点:
- VIP 是公网地址,RIP 和 DIP 是私网地址,且通常在不同IP网络,因此RIP的网关一般不会指向DIP。
- RS 接收到的请求报文源地址是DIP,因此,只需相应给DIP, 但 Director 还要将其发往 CLient
- 请求和相应报文都经由 Director。
- 相对 NAT 模式,可以更好的实现 LVS-realServer间垮VLAN通信。
- 支持端口映射。
总结
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头实现转发,支持远距离通信
调度算法
静态调度算法
仅根据算法本身进行调度
- RR: roundrobin,轮询,
- WRR: Weighted RR, 加权轮询。
- SH: Source Hashing,实现 session sticky, 源IP 地址hash。将来自同一个IP地址的请求始终发往同一次挑选的RS,从而实现会话绑定。
- DH: Destination Hashing: 目标地址哈希, 第一次轮询调度至RS, 后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡。例如:Web缓存。
- FO(内核4.15)
(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未
过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
动态调度算法
主要根据每台 RS 当前的负载状态几调度算法进行调度 Overhead=value 较小的RS将被调度。
-
LC: least connections 适用于长连接应用。
活动连接表示正在传送数据
非活动连接表示建立连接了,但是没有传送数据
Overhead=activeconns*256+inactiveconns
-
WLC: Weighted LC, 默认调度方法,
WLC是默认调度方法
这里如果是第一次连接,活动和非活动连接的值都是0.,这样同LC和WL的算法计算结果都是0,需要通过SED来解决这个问题。因为初始+1,就会有数值的对比
Overhead=(activeconns*256+inactiveconns)/weight
-
SED:Shortest Expection Delay, 初始连接高权重优先,只检查活动连接而不考虑非活动连接。
Overhead=(activeconns+1)*256/weight
-
NQ: Never Queue, 第一轮均匀分配,后续SED。
解决了第一次分配不均匀的问题。使得所有的服务器都会执行一定的任务 -
LBLC: Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
-
LBLCR: LVLC with Replication 带复制高恩那个的LBLC,解决LBLC负载不均问题,从负载重的复制到轻的RS, 实现WEb Cache等。
-
OVF(内核4.15)
(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度
到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服
务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。,属
于动态算法
一个可用的真实服务器需要同时满足以下条件:
- 未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
- 真实服务器当前的活动连接数量小于其权重值
- 其权重值不为零
LVS 周边
ipvsadm
- Unit File: ipvsadm.service
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config
- ipvs调度规则文件:/etc/sysconfig/ipvsadm
防火墙标记
LVS 持久连接
这篇关于Linux LVS 介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法