1.简介

1.1. 作者:张文嵩,就职于阿里

1.2. LVS是基础四层路由、四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机;

1.3. IPTABLES的请求转发路线:iptables(用户空间工具)/netfilter(内核空间组件)

PREROUTING ==> INPUT

PREROUTING ==> FORWARD ==> POSTROUTING

OUTPUT ==> POSTROUTING

1.4. LVS的组成:ipvsadm(用户空间工具)/ipvs(内核空间组件)

ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS;

ipvs:工作于内核上的netfilter的INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;

1.5. LVS支持的协议:TCP、UDP、SCTP、AH、EST、AH_EST等协议进行调度;

2. 名词解释

vs Virtual Server, Director, Dispatcher, Balancer
rs Real Server
CIP Client IP
VIP Virtual Server IP
DIP Director IP
RIP Real Server IP

3. lvs集群的类型

3.1. lvs-nat:多目标的DNAT,通过将报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发;

3.1.1. 特性:

(1)RIP和DIP必须在同一IP网络,且使用私有地址;RS的网络要指向DIP(保证相应报文必须经由VS);

(2)请求报文和相应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈;

(3)支持端口映射

(4)VS必须是Linux,RS可以是任意OS

3.2. lvs-dr:Direct Routing,通过为请求报文的重新封装一个MAC首部进行转发,源mac是DIP所在接口的mac,目标mac是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIP《==》VIP)

3.2.1. 特性:

(1)确保前端路由器将目标IP为VIP的请求报文发往Director

解决方案:

  在路由器上静态绑定VIP和Director的MAC地址;

  禁止RS响应VIP的ARP请求,禁止RS的VIP进行通告

    (a)arptables

    (b)修改RS的内核参数,并把VIP绑定在lo的别名上;

      arp_Ignore, apr_announce

(2)RS的RIP可以使用私有地址,也可以使用公网地址

(3)RS跟Director必须在同一物理网络

(4)请求报文必须由Directory调度,但响应报文必须不能经由Director;

(5)不支持端口映射

(6)RS可以使用大多的OS

3.3. lvs-tun:tunnel,不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是原IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP);

3.3.1. 特性

(1)RIP、DIP、VIP全得是公网地址;

(2)RS网关不能指向也可能指向DIP

(3)请求报文经由Director转发,但响应报文将直接发往CIP;

(4)不支持端口映射

(5)RS的OS必须支持隧道功能;

3.4. lvs-fullnat:通过同时修改请求报文的源IP地址(CIP==》DIP)和目标IP地址(VIP==》RIP)进行转发;

3.4.1. 特性

(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通;

(2)RS收到的请求报文源IP为DIP,因此响应报文将直接响应给DIP;

(3)请求和响应报文都经由Director

(4)支持端口映射

4. lvs集群的调度算法(scheduler):根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法两类;

4.1. 静态方法:仅根据算法本身进行调度;

RR:Round Robin,轮询/论调/轮叫;

WRR:Weighted RR,加权轮询;

SH:Source Hashing,源地址哈希;

DH:Destination Hashing,目标地址哈希;正向web代理(缓存),负载均衡内网用户对外部服务器的请求;哈希的是目标地址

4.2. 动态方法:根据算法及各RS当前的负载状态进行调度;

LC:least connections,最少连接;

  Overhead=Active*256+Inactive

WCL:Weighted LC,加权最少连接;

  Overhead=(Active*256+Inactive)/weight

SED:Shorted Expections Delay

  Overhead=(Active+1)*256/weight

NQ:Never Queue

LBLC:Locality-Based LC,动态的DH算法

LBLCR:LBLC with Replication,带复制功能的LBLC;

最新文章

  1. Azure ARM (5) ARM Template初探 - 本地JSON Template文件(1)
  2. sqlserver字段类型详解
  3. Conditional - 编译屏蔽特性
  4. Sql Server 事务隔离级别的查看及更改
  5. c# await 关键字错误
  6. 在ios7系统下,scrollView下移20像素
  7. lua 中pairs 和 ipairs区别
  8. Django之Cookie与Session
  9. pipe的实现
  10. 在Selenium Webdriver中使用XPath Contains、Sibling函数定位
  11. PHP 调用 Go 服务的正确方式 - Unix Domain Sockets
  12. Python编程从入门到实践笔记——变量和简单数据类型
  13. CEF 支持的命令行参数
  14. MAC MYSQ忘记密码重置方法
  15. 关于那个.get .post .ajax ztree 还有后台servlet传递数据
  16. mycat系列-Mycat 分片规则
  17. Python入门之面向对象编程(一)面向对象概念及优点
  18. BZOJ 1044: [HAOI2008]木棍分割 DP 前缀和优化
  19. vim和xshell配色
  20. 线程安全的atomic wrapper classes例子

热门文章

  1. Python基础入门(2)- python中的数据类型
  2. c#.net 实现短网址的简单方法
  3. python实现图片色素的数值运算(加减乘除)和逻辑运算(与或非异或)
  4. NOIP2021游记(退役记)
  5. [bzoj1178]会议中心
  6. 基于IDEA Plugin插件开发,撸一个DDD脚手架
  7. Swift-技巧(九)CGImage To CVPixelBuffer
  8. 面向对象编程之Python学习一
  9. 使用微软RPA工具 Power Automate自动完成重复性工作
  10. ceph简单了解