LVS实现原理及NAT模式实现

来源:互联网 发布:matlab mac 2015b 编辑:程序博客网 时间:2024/06/06 02:37

  LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。该项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
  LVS是实现系统扩展的较好的一种方法,它基于软件实现,在人力财力方面节省了很多。

LVS的特性:
   高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
   稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
   成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
   配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
   支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
   支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
   应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等
缺点:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

lvs集群一些术语:
   VS: Virtual Server,负责调度
   director,balancer 负载均衡器
   RS: Real Server,后端请求处理器,负责真正提供服务
   DIP:director ip ,负载均衡器IP
   VIP:virtual IP 负载均衡器虚拟IP
   L4:四层路由器或交换机
   CIP:client ip 用户端IP

这里写图片描述
工作原理:客户端将请求发送到LVS上,LVS根据请求报文的目标和目标协议以及端口将其调度转发到某目标RS上,其RS是根据调度算法来进行挑选的。这样可以均衡负载达到高效率工作。

【LVS负载均衡的工作模式】

1、NAT
这里写图片描述
  本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和port实现转发
  (1)RIP和DIP必须在同一个IP网络中,且应该使用私网地址;RS的网关要指向DIP。
  (2)请求报文和响应报文都必须经由director转发,director容易成为系统瓶颈
  (3)支持端口映射,可修改请求报文的目标port
  (4)VS必须是Linux系统,RS可以是任意OS系统

2、DR:direct routing
  直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标Mac是某挑选出的RS的RIP所在接口的Mac地址;源IP/port,以及目标IP/port均保持不变。
  首先要确保director和各RS都配置有VIP
  (1)确保前端路由器将目标IP为VIP的请求报文发往director
  (2)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由director
  (3)RS和director要在同一物理网络
  (4)请求报文要经由director,但响应报文不经由director,而由RS直接发往client
  (5) 不支持端口映射(端口不能修改)
  (6)RS可使用大多数OS系统。

3、tun
  隧道方式 。转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP为DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
  (1)DIP,VIP,RIP都应该是公网地址
  (2)RS的网关不能也不可能指向DIP
  (3)请求报文要经由director,但响应不能经由director
  (4)不支持端口映射
  (5)RS的OS须支持隧道功能

4、full-nat
通过同时修改请求报文的源IP地址和目标IP地址进行转发
   CIP –> DIP
   VIP –> RIP
(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
(2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但director还要将其发往client
(3)请求和响应报文都经由director
(4)支持端口映射。
此类型kernel默认不支持。

【LVS负载均衡的调度算法】

  ipvs scheduler,根据其调度时是否考虑各RS当前的负载状态分为静态和动态方法。
静态:仅根据算法自身进行调度
RR:roundrobin 轮询
  调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等的对待每一台服务器,而不管服务器上实际的连接数和系统负载。
WRR:加权轮询
  调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态的调整其权值。
  SH:原地址哈希;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。
  DH:目标地址哈希;将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型应用场景是正向代理缓存场景中的负载均衡,如:宽带运营商。

动态:主要根据每RS当前的负载状态及调度算法进行调度。overhead=value较小的RS将被调度。
  LC:least connections 适用于长连接应用
  Overhead=activeconns*256+inactiveconns
  WLC:Weighted LC,默认调度方法
  Overhead=(activeconns*256+inactiveconns)/weight
  SED:Shortest Expection Delay,初始连接高权重优先,最短延迟调度
  Overhead=(activeconns+1)*256/weight
  NQ: Never Queue(永不排队),第一轮均匀分配,后续SED
  LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
  LBLCR:LBLC with Replication,带复制功能的LBLC
解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

【实验】基于NAT模式的LVS实现

实验环境:
这里写图片描述

1、首先负载均衡器需要有两个地址,VIP和DIP。这里我们将172网段作为公网地址,192网段作为私网地址。
这里写图片描述

2、设置负载均衡器需要使用一个工具:ipvsadm
这里写图片描述

3、
简单看一下ipvsadm的一些选项

选项 注释 -a –add-server 在服务器表中添加一条新的真实主机记录 -r –real-server 真实服务器地址 -m –masquerading 指定LVS工作模式为NAT模式 -w –weight 真实服务器的权值 -g –gatewaying 指定LVS工作模式为直接路由器模式,(DR模式) -i –ip 指定LVS的工作模式为隧道模式 -p 会话保持时间,定义流量转到同一个realserver的会话存留时间 -s –scheduler 使用的调度算法 -E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 -D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。 -C –clear 清除内核虚拟服务器表中的所有记录。 -R –restore 恢复虚拟服务器规则 -S –save 保存虚拟服务器规则,输出为-R 选项可读的格式 -e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录 -d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录 -L-l –list 显示内核虚拟服务器表 –numeric, -n: 以数字形式输出地址和端口号 –exact: 扩展信息,精确值 –connection,-c: 当前IPVS连接输出 –stats: 统计信息 –rate : 输出速率信息 -Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)

在负载均衡器上设置规则,
设置本机为负载均衡器并且添加后台两个real server记录:
这里写图片描述

因为这里是实验环境,需要开启虚拟机的路由转发功能:
这里写图片描述
这里写图片描述

4、将两台real server 的网关地址指向DIP
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

5、客户端进行测试访问。由于我们之前设置的两台realserver的权重不同,故访问调度也不同,可以从图中明显看出来:
这里写图片描述