Lvs简介 基础概念
LVS(Linux Virtual Server)即Linux虚拟服务器,是由张文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中(2.6及以上版本内核),LVS本质上是为了解决单台服务器性能处理瓶颈的问题,LVS在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法觉得将请求发送给后端的某台真实的Web服务器,同时如果真实服务器连接的是共享存储,那么提供的服务也是相同的,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,因此整个集群对用户而言都是透明的。根据LVS工作模式的不同,LVS工作模式分为NAT模式、TUN模式、以及DR模式,以及阿里自己研发的FULL-NAT模式,不过Full--NAT模式没有被编译进内核,工作中常用的模式是DR模式,也算默认的工作模式。
/* 查看内核是否有lvs模块 [root@43 ~]# grep -i -C 10 ipvs /boot/config-3.10.0-514.el7.x86_64 */ 基础术语 /* VS:Virtual Server,Director Server(DS),Dispatcher(调度器),Load Balancer RS:Real Server(lvs),upstream server(nginx),backend server(haproxy) CIP:Client IP VIP:Virtual Server IP VS外网的IP DIP:Director IP VS内网IP RIP:Real Server IP,真实服务的IP 访问流程:CIP<-->VIP<-->DIP<-->RIP */ 四种工作模式 NAT模式LVS - NAT本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。
特点
/* 1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈 3)支持端口映射,可修改请求报文的目标PORT(RealServer的Port端口) 4)VS必须是Linux系统,RS可以是任意OS系统 */在实际的场景中,Clients和LVS之间会跨越互联网以及企业入口防火墙、核心交换机等设备,这里为了简要说明,就模拟Client与LVS直连的情况,如下图所示,当客户端的请求到达LVS调度器之后,LVS会结合系统的netfilter模块对数据包进行判断处理,同时根据LVS自身的调度策略,修改报文目的IP地址和端口号,并重新进行封装,然后将报文发送到指定的RealServer,RealServer收到请求报文,然后对其进行处理,将返回报文发送给LVS,然后LVS再修改源IP和源端口,然后发送出去,到达Client,完成整个业务过程。
LVS-NAT的问题:所有的请求报文由LVS调度到后端的RealServer,同时响应报文也需要经过LVS发送出去,因此这里有一个问题是,LVS承载的压力过大,会成为整个集群的性能瓶颈。
DR模式在DR模型中,LVS服务器只负责请求报文的调度,并且在调度过程中只是修改链路层MAC地址,不修改IP层和传输层头部字段,经过RealServer处理后的返回报文,也是通过VIP和CIP对报文进行封装,因此返回数据包会直接路由到网关,从而经过互联网到达客户端,不会像NAT模式中的返回报文还回到LVS服务器,因此在DR模式中,大大降低了LVS的服务器处理压力,其处理瓶颈基本上只是在LVS硬件本身的性能,下图展示了DR模型下,数据包的大致处理流程,此处忽略了客户端报文到达企业核心的细节过程,因此中间还包括运营商网络、企业入口防火墙等设备。
Director和RealServer同时配置VIP会有什么问题
因为LVS和后端真实服务器RealServer都配置了VIP,在常规网络环境下,这肯定会造成IP地址冲突,同时当报文第一次到达图中核心交换机时,在发送ARP请求VIP的MAC地址时,可能会返回LVS和RealServer的MAC地址,因此造成,为解决这个问题,DR模型提供了两种配置方法:
配置DR的两种方式
1)在图中核心交换机上将Director调度器MAC地址与VIP做静态绑定,这样请求报文就会直接被发送到调度器Director