什么是lvs?
是Linux Virtual Server的简写,也就是Linux 虚拟服务器,它的首要目的是请求的负载均衡。能够以很高的性能把请求转发到服务器。
98年时由章文嵩在国防科技大学读博士期间创建。由于该软件非常优秀,被内置进linux内核。
lvs原理:
首先明确LVS的基本概念:
- Director Server:调度服务器,将负载分发到Real Server服务器。从图中我们可以看出lvs调度器有两个ip,分别为虚拟ip和调度器ip。
- VIP:表示调度器的虚拟ip,一般表示客户端用来访问的公网ip。
- DIP:调度器ip,调度器在内网中的固有ip。
- Real Server:后端服务集群节点。
- RIP:后端服务节点在内网的ip。
LVS简而言之有三个功能:路由、NAT以及负载均衡。
NAT:当用户访问VIP时,请求到达调度服务器,此时调度器需要把用户的请求转发给后端服务器。一个请求一定包含原地址和目的地址,此时用户访问的目的地址是VIP,而真正提供服务的是后端的服务集群,所以此时NAT将用户请求的目的地址修改为后端集群某台服务器的地址。同理,当服务器发送响应时,源地址是调度器ip,此时又需要将源地址修改为VIP。这就是LVS的NAT功能。
路由:LVS需要将请求转发到后端服务器集群的某台服务器上。
负载均衡:在路由的过程中,LVS会根据具体的负载均衡策略,比如轮训等,把请求转发到具体的服务器上。
LVS的三种工作模式:
NAT模式:用户请求从调度器来,经过NAT处理到底后端服务,当后端服务器响应后,到达调度器后经过NAT处理发送给用户。也就是请求怎么来的再怎么回去。可以发现它的弊端在于调度器存在单点问题,当请求量非常大时,服务器的响应全部经过调度器,会占用调度器大量的带宽。
DR模式:直连路由模式,和NAT的不同之处在于服务器响应的处理。响应不再经过调度器,而是从服务器直接发送给用户。适用于大型网络。
TUN模式:隧道模式,调度器和服务器集群跨网络,这时候只能通过隧道联通。这种模式用的比较少。
LVS和Nginx的区别:
- 原理完全不同:lvs是转发请求,Nginx是代理,我去代理后端服务让你访问。
- 性能不同:第一,lvs是转发,所以对于请求的加工处理很少。而代理需要收到请求后再创建请求给后端,而当服务器回复时,需要解析响应内容,再创建响应给用户。第二,lvs已经被集成到linux内核,而Nginx是用户层面的应用程序。
- 功能上的不同:第一,lvs功能简单,最重要的是没有健康检查功能,如果后端有服务器挂掉,请求依然会转发,这点和Nginx不同。第二,lvs支持的负载均衡算法目前有10种,多于Nginx。
- 网络分层不同:lvs工作在三层网络层之上,它只做TCP/UDP的转发,而nginx工作在七层,比如对http请求的解析。
LVS和Nginx负载均衡算法对比:
- lvs主要使用的算法有轮训、加权轮训、最少连接、加权最少连接、原地址hash(类似Nginx的ip hash)、目标地址hash等
- Nginx原生支持加权轮训、ip hash、以及url hash,最少连接等需要第三方组件支持。
NAT模式简单集群搭建:
集群规划:
机器 | 描述 |
192.168.20.200 | 调度器,注意该机器有两个ip,vip:192.168.20.200,dip:192.168.20.21,需要vmware设置两块网卡 |
192.168.20.23 | 后端服务,安装nginx |
192.168.20.24 | 后端服务,安装nginx |
- 安装ipvsadm,lvs由于集成到了linux内核,需要借助ipvsadm工具操作相关参数。
yum -y install ipvsadm
- 添加虚拟服务器
#添加虚拟服务器,-t表示tcp,-u表示udp,加权轮询算法,此时集群名称就是192.168.10.10:80
ipvsadm -A -t 192.168.20.200:80 -s wrr
- 添加两台真实服务器
#-r表示真实服务器,-w权重, -m表示nat模式
ipvsadm -a -t 192.168.20.23:80 -r 192.168.10.12 -w 1 -m
ipvsadm -a -t 192.168.20.24:80 -r 192.168.10.13 -w 1 -m
- 查看虚拟集群信息
#n表示以ip形式查看
ipvsadm -Ln
- 此时访问调度器192.168.20.200,会返回后端Nginx上的不同页面
ipvsadm命令总结:
ipvsadm -A #新建虚拟服务器
ipvsadm -E #修改虚拟服务器
ipvsadm -D #删除虚拟服务器
ipvsadm -C #清空虚拟服务器
ipvsadm -a #新建真实服务器
ipvsadm -e #修改真实服务器
ipvsadm -d #删除真实服务器
ipvsadm -L #查看LVS规则表