Jusene's Blog

负载均衡集群之LVS

字数统计: 1.4k阅读时长: 5 min
2017/04/20 Share

LVS是什么

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一,现已被收录linux内核代码,所以我们现在可以很容易的配置lvs,无论怎么说这都是国内开源软件的先驱。

LVS为了干什么

随着大业务的爆发,我们从IT时代过渡到了DT时代,随着业务量迸发,C10K问题一直都是计算机专家思考的问题,当基础设备资源已经无法满足业务的快速增长的时候,我们会面对的是两种扩容,垂直扩容和纵向扩容,而垂直扩容往往面对的高昂的硬件设备,而效果往往还是达不到预期效果,所以我们这里首选的应该是纵向扩容,那么接下来的负载均衡集群是我们首先需要面对的,如何让纵向扩展的每台机器高效运转。

在这个power by open source的时代,负载均衡的集群有许多解决方案,然而lvs我认为这是最能代表这个集群工具的解决方案,具有人测试,如果将lvs优化到极限,lvs的并发量可以到达400w,但是lvs的缺点也很明显,它工作在第四层(传输层),无法处理一些七层的高级应用,而后我还是会介绍些七层负载均衡的产品。

LVS的工作模型

lvs

从图中我们可以知道,lvs工作在netfilter的input链上,配置的规则都是作用在input链上,属于内核空间工作的工具。

lvs也跟iptables一样:

ipvsadm/ipvs

  • ipvsadm: 用户空间的命令工具,用户管理集群服务及集群服务上的RS
  • ipvs: 工具与内核上的netfilter的INPUT钩子之上的程序,可根据用户定义的集群实现请求转发

LVS的专业术语

  1. CIP:client ip
  2. VIP:virtual server ip
  3. DIP:director ip
  4. RIP:real server ip

LVS的集群模型

LVS-NAT

LVS-NAT

多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为挑选出的RS的RIP和PORT来实现转发

  • (1)RIP和DIP必须在同一个IP网络,且应该使用私有地址;RS的网络要指向DIP(保证响应报文必须经由VS)
  • (2)请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈
  • (3)支持端口转发
  • (4)vs必须是linux,RS可以是任意os
  • (5)基于连接状态追踪机制,本身转发能力受到制约

LVS-DR

LVS-DR

RIP为公网地址,VIP与为公网地址,DIP为公网地址

LVS-DR

RIP为私网地址,VIP为公网地址,DIP为私网地址

通过请求报文的重新封装一个mac地址进行转发;源mac是dip所在的接口的mac,目标mac是挑选出某rs的rip所在接口的mac地址,ip首部不会放生变化(cip<==>vip)

  • (1)确保前端路由器将目标ip为vip的请求报文发向director:
    解决发案:
    • 在路由器上静态绑定vip和director的mac地址
      禁止rs响应vip的arp请求,禁止rs的vip进行通告
    • (1)arptables
    • (2)修改rs的内核参数,并把vip绑定lo的别名上
      arp_ignore,arp_announce
  • (2)rs的rip可以使用私有地址,也可以使用公网地址
  • (3)rs跟director必须在同一个物理网络
  • (4)请求报文必须由director调度,但响应报文必须不能经由director
  • (5)不支持端口衍射
  • (6)rs可以使用大多数的os
  • (7)是真正能够实现大并发的模型

LVS-TUN

LVS-TUN

转发方式:不修改请求报文的ip首部(源ip为cip,目标为vip),而是原ip首部之外再封装一个ip首部(源ip为dip,目标ip为挑选的rip);

  • (1)rip,dip,vip全是公网地址
  • (2)rs网关不能指向也可能指向dip
  • (3)请求报文经由director转发,但是响应报文将直接发往cip
  • (4)不支持端口衍射
  • (5)rs的os必须支持隧道功能

LVS-FUALLNAT

LVS-FULLNAT

通过同时修改报文的源ip地址(cip->dip)和目标ip地址(vip->rip)进行转发

  • (1)vip是公网地址,rip和dip是私网地址,且通常不在同一网络中,但是需要经由路由器互通
  • (2)rs收到的请求报文源ip为dip,因此响应报文将直接响应给dip
  • (3)请求和响应报文都经由director
  • (4)支持端口衍射

LVS SCHEDULER

根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法两种:

  • 静态方法:仅根据算法本身进行调度
  1. RR:Round Robin,轮询
  2. WRR:Weighted RR,加权轮询
  3. SH:Source Hashing,源地址hash
    目的保持会话
  4. DH:Destination Hashing,目标地址hash
    正向web代理,负载均衡内网用户对外部服务器的请求,hash的事目标地址
  • 动态方法:根据算法及各RS当前的负载状态进行调度
    根据Overhead来进行RS的选择,Overhead越小越优先被选中
  1. LC:least connection,最少连接
    Overhead=Active*256+inactive
  2. WLC:Wegihted LC 加权最少连接 默认的算法
    Overhead=(Active*256+Inactive)/Weight
  3. SED:Shortest Expections Delay
    Overhead=(Active+1)*256/weight
  4. NQ:Nerver Queue
    SED的优化,SED会导致起初有的RS没有得到请求空闲,NQ就是不管SED每台机器都先发一遍请求,在进行SED
  5. LBLC:Locality-Based LC
    动态DH算法,破坏了缓存命中率,提高了负载均衡性
  6. LBLCR:LBLC with Replication
    带复制功能的LBLC,复制缓存服务器
CATALOG
  1. 1. LVS是什么
  2. 2. LVS为了干什么
  3. 3. LVS的工作模型
  4. 4. LVS的专业术语
  5. 5. LVS的集群模型
    1. 5.1. LVS-NAT
    2. 5.2. LVS-DR
    3. 5.3. LVS-TUN
    4. 5.4. LVS-FUALLNAT
  6. 6. LVS SCHEDULER