结合图形描述LVS的工作原理
LVS简介
LVS(Linux Virtual Server,虚拟服务器),是一个虚拟的四层路由交换服务器集群系统,根据调度算法将请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器。项目是由章文嵩博士于1998年5月成立,是中国国内最早的自由软件项目之一。
在2B、2C的业务中,面对快速增长的访问,服务器需要具备处理这种大量并发访问服务的能力,对于单台服务器来讲,CPU、I/O处理能力很会成为瓶颈,即使对硬件进行升级,单台服务器的性能总是有上限的,处理能力不会一直随着硬件配置的升级而一直线性提升。因此,必须采用集群技术来解决大量并发的应用场景。Linux虚拟服务器(Linux Virtual Servers,LVS)使用负载均衡技术将多台服务器组成一个虚拟服务器。
LVS相关术语
VS |
Virtual Server |
虚拟服务器,Balancer负载均衡器 |
RS |
Real Server |
后端真实服务器 |
CIP |
Client IP |
客户端请求IP |
VIP |
Director Virtual IP |
负载均衡器(前端)虚拟IP |
DIP |
Directior IP |
|
RIP |
Real Server IP |
后端真实服务器IP |
NAS |
Network Attached Storage |
网络附加存储(文件共享服务器) |
SAN |
Storage Area Network |
存储区域网络(块级别) |
DS |
Distributed Storage |
分布式存储 |
LB |
Load Balancing |
负载均衡(增加处理能力) |
HA |
High Availability |
高可用(始终在线,增加服务可用性) |
HP |
High Performance |
高性能 |
NAT |
Network Address Translator |
网络地址转换 |
DR |
Direct Routing |
直接路由 |
TUN |
IP Tunneling |
IP隧道模型 |
RR |
Round Robin |
轮询调度 |
WRR |
Weight RR |
加权轮询 |
NTP |
Network Time Protocol |
用时间服务器同步时间 |
LVS工作原理与结构
LVS属于集群中的层次
1,Hardware负载均衡设备
F5、BIG IP、Citrix、Netscaler、A10
2,Software软件负载均衡
四层
LVS
七层
nginx
haproxy
LVS的设计要点
1,session保持
2,数据共享
1>,共享存储
NAS
SAN
DS
2>,数据同步
LVS的结构
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。
LVS内核模型
1>,当客户端的请求到达负载均衡的内核空间时,首先会到达PREROUTING链。
2>,当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
3>,LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
4>,如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
5>,最后经由POSTROUTING链发往后端服务器。
注:LVS是工作在内核中的。
LVS工作在INPUT链上。
LVS和iptables不能同时使用。
ipvs工作在内核中。
ipvsadm工作在用户模式中,管理集群服务的命令行工具
VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络,但需要通过路由相互通信;
RS收到的请求报文的源IP是DIP,因此其响应报文将发送给DIP;
LVS的包转发模型
1、NAT模型
多目标的DNAT,通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现。
1>,客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称CIP,目标地址为VIP(负载均衡前端地址,后面统称为VIP)。
2>,负载均衡收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
3>,报文送到Real Server后,由于报文的目标地址是自已,所以会响应该请求,并将响应报文返还给LVS。
4>,然后lvs将些报文的源地址修改为本机并发送给客户端。
注:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端。
注: 集群节点跟director必须在同一个IP网络中;
RIP通常是私有地址,仅用于各集群节点间的通信;
director位于client和real server之间,并负责处理进出的所有通信;
real server必须将网关指向DIP;
支持端口映射(转发);
real server可以使用任意OS;
请求和响应报文都要经过director转发,在较大规模应用场景中,director易成为系统瓶颈;
2、DR模型
通过修改请求报文的MAC地址进行转发,IP首部不会发生变化(源IP为CIP,目标IP始终为VIP)。
1>,客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
2>,负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自已的DIP的MAC地址,并将此包发送给RS。
3>,RS发现请求报文中的目的MAC是自已,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能响应本地网络内的arp请求。
问题:怎样确保前端路由器将目标IP为VIP的请求报文一定会发送给Director?
解决:
1),静态绑定;
2),禁止RS响应VIP的ARP请求;
a),arptables上定义;
b),修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;
kernel parameter:
arp_ignore:定义接收到ARP请求时的响应级别;
0: 只要本地配置的有相应地址,就给予响应;
1: 仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;
arp_announce:定义将自已地址向外通告时的级别;
0:将机机任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
Arp协议:ip地址在局域网内无法进行通信,最终局域网内两台主机通信还是通过MAC地址,所以就是涉及ip到MAC地址转换的问题。
注意:集群节点RS跟director必须在同一个物理网络中;
RS的RIP可以使用私有地址或公网地址,实现便捷的远程管理和监控;RIP使用私有地址可以通过在之前加一个路由器的方式和外网通信,直接响应客户机。
Director仅负责处理入站请求,响应报文则由real server直接发往客户端;即请求报文必须由Director调试,但响应报文必须不能经由Director。
real server不能将网关指向DIP;(直接使用前端网关)
不支持端口映射;
3、TUN模型
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部之外再次封装一个IP首部(源IP为DIP,目标IP为RIP)。
1>,客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
2>,负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将些包文发送给RS。
3>,RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自已lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能在公网上。
请求时,对报文再进行一次封装;返回时,直接返回。
集群节点可以跨越互联网Internet;
RIP必须是公网地址;
director仅负责处理入站请求,响应报文由real server直接发往客户端;
响应报文一定不能通过director即real server网关不能指向director;
只有支持隧道功能的OS才能用于real server;
不支持端口映射;
LVS的调度算法
LVS的调度算法分为静态与动态两类。
静态算法
静态算法(4种):只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
①.RR:轮询调度(Round Robin)
调度器通过”轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。轮询机制,依次分配请求,方式简单但是负载均衡的效果一般。
②.WRR:加权轮询(Weight RR)
调度器通过“加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。加权轮询,权重越大承担的负载就越大。
③.DH:目标地址哈希(Destination ip Hash ) 能实现连接追踪,但不考虑负载均衡效果。
将同一个请求发给同一个Server;Hash的是目标地址。
例:客户A访问了内容A,是server1处理的,这时客户B也访问了内容A,这时也会被指定到Server1处理。
④.SH:源地址 hash(Source ip Hash)
源地址哈希,将来自同一个ip请求通过记录在ip hash表中绑定在同一个服务器,实现session保持。
缺点:调度粒度大,对负载均衡效果差。
例:这个源地址访问是服务器A响应的,以后只要是这个源地址发的请求,都会是服务器A响应。
动态算法
动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求
①.LC:最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
小结:最小连接;OverHead=activity*256+inactive;结果最小的将会被挑中;
②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
小结:加权最少连接;(activity*256+inactive)/weight;谁的小挑谁;
③.SED:最短延迟调度(Shortest Expected Delay )
在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
小结:最短期望延迟;(active+1)*256/weight;
④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
小结:永不排队。
⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
小结:基于本地的最少连接。
⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
小结:基于本地的带复制的最少连接。
ipvs管理工具介绍
ipvsadm:工作在用户空间,定义转发规则的程序;
ipvs:工作在内核空间,根据规则完成调度请求的程序;
ipvsadm用法
管理服务器集群
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
例:# ipvsadm -A -t 172.16.100.1:80 -s rr
ipvsadm -D -t|u|f service-address
-A: 添加
-E:修改
-D:删除
-t:TCP协议的端口
-u:UDP协议的端口
server-address: IP:[PORT]
-f:FWM,防火墙标记,标记用数字来表示,将多个端口绑定在一起定义成一个集群服务使用
server-address: Mark Number
-s: 制定调度方法,默认为wlc
管理集群服务的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
-a:添加RS
-e:修改RS
-d:删除RS
-t|u|f service-address:引用此前定义过的集群服务
-r server-address :某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]:指定lvs类型
-g:DR
-i:TUN
-m:NAT
-w weight:定义服务器权重;
例:#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
保存RS及CS
-S save:
ipvsadm -S > /etc/sysconfig/ipvsadmin.v1
ipvsadm-save > /etc/sysconfig/ipvsadmin.v1
service ipvsadm save
载入此前的规则
-R: restore
ipvsadm -R < /etc/sysconfig/ipvsadmin.v1
ipvsadm-restore < /etc/sysconfig/ipvsadmin.v1
service ipvsadm start
清空规则(删除所有集群服务)
ipvsadm -C
显示规则
ipvsadm -L |l [options]
options:
–c:显示当前所有的connection(ipvs连接状况)
–stats:统计数据。列出CS及RS的连接统计数据
–rate:速率。列出CS及RS的连接、报文及字节速率
-n –numeric: 数字格式显示
–exact: 精确值
–timeout:显示tcp、tcpfin和udp的会话超时时长
注:各节点之间的时间偏差不应该超过1秒钟。
其它
NTP
NTP:Network Time Protocol 用时间服务器同步时间
原创文章,作者:365,如若转载,请注明出处:http://www.178linux.com/23247
评论列表(1条)
写的很好,排版还可以在漂亮一点,加油!图是自己画的吗?