您的位置:首页 > 其它

LVS实现原理及NAT模式实现

2017-11-12 18:51 253 查看
  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的权重不同,故访问调度也不同,可以从图中明显看出来:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息