从网络到LVS
一、LVS介绍
linux virtual server简称LVS,是章文嵩博士1998年发起的一个开源项目。官网:http://www.linuxvirtualserver.org。Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。lvs已经集成到linux 2.6版本以上的内核中。
二、OSI的七层参考模型
1.应用层:http协议,SSH协议 http协议:一组规范的字符串,请求头响应头等等 socket:就是IP和PORT 2.表示层 3.会话层 4.传输控制层 协议包括TCP协议和UDP协议,TCP是面向连接的可靠的传输方式 UDP是相反,不用连接的不可靠的 注: ①三次握手,站在彼此角度考虑,对于客户端,发送想握手syn,服务端回syn+ack确认 客户端:发syn,收syn+ack,证明客户端的outPut和inPut输入输出都是OK的 服务端:syn握手收到了,也回了确认,只能证明输入没问题,回确认这个事不知道有没有收到,也就是输出有没有问题,所以客户端给服务端必须要有一个确认 三趟数据包走完后,双方才会在自己的内存中建立相应的资源,三次握手只是建立连接,三次的包是没有任何应用层的数据的 ②四次挥手:客户端发送断开,服务端基于TCP礼貌性响应知道了,服务端资源传输完毕后给客户端发送断开链接,客户端响应断开给服务端 5.网络层 始发和终点 6.链路层 mac节点逐层跳跃 7.物理层三、LVS的优势
为什么Tomcat慢,因为Tomcat是Java开发的,跑在jvm上的,CPU从内核态到应用程序的JVM里切换,很慢。 LVS为什么快,只做数据包的转发,停留时间很短,不握手。 nginx是七层(要接TCP握手),LVS是四层(不接TCP握手)。四、D-NAT模式和DR直接路由模式
1.D-NAT模式
请求时,客户端给LVS发送数据包,LVS将数据包的目标IP地址改为后端服务的IP地址发给后端服务 响应时,后端服务响应客户端的数据包,LVS将数据包的源IP地址改为LVS的IP地址发给客户端 缺点是请求响应都会经过LVS,LVS压力较大2.DR直接路由模式
后端服务新增lo接口挂载LVS的IP地址,并修改内核的配置文件将其隐藏 请求时,LVS会修改数据包链路层的mac地址再发送给后端服务 响应时,后端服务直接响应给客户端数据包,因为挂载了LVS的IP地址,客户端接收数据包不会丢包 注意此时,LVS和后端服务必须在同一个网络中或者通过隧道技术实现同一网络,否则会丢包五、LVS的调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
1.rr:轮询(round robin)
这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲请求依次发下去。如果A服务器上的请求很快请求完了,而B服务器的请求一直持续着,将会导致B服务器一直很忙,而A很闲,这样便没起到均衡的左右。
2.wrr:加权轮询(weight round robin)
这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
3.dh:目标地址散列调度算法(destination hash)
简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。
4.源地址散列调度算法(source hash)
即将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。
5.lc:最少连接数(least-connection)
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1。这里问题是无法做到会话保持,即session共享。
6.wlc:加权最少连接数(weight least-connection)
这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。
7.lblc:基于局部性的最少连接调度算法(locality-based least-connection)
将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
注意:
LVS会记录客户端和被负载到的服务器三次握手和四次分手情况以及客户端IP和服务端IP,以记录后端服务的连接数量。
ipvsadm -lnc 查看连接记录