lvs类型

lvs-nat: 上下文为masquerade

多目标的DNAT(iptables): 它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;

特性:

(1)RS 应该和DIP使用私网地址,且RS的网关要指向DIP
(2)请求和响应报文都要经由director转发:极高负载的场景中,director可能会成为系统性能瓶颈 
(3)支持端口映射
(4)RS可以使用任意OS
(5)RS的RIP和Director的DIP必须在同一IP网络

lvs-dr: direct routing,上下文为gateway

它通过修改请求报文的目标MAC地址进行转发

   Director: VIP,DIP       RSs: RIP,VIP

特性:

 (1)保证前端路由器将目标IP为VIP的请求报文发送给director;      
    解决办法:        
      静态绑定        
      arptables        
      修改RS主机内核的参数
        arp_announce:是否接收别人的通告并记录别人的通告,以及我们是否通告给别人  
          0:默认值,向每一个接口通告自己所有的地址
          1:尽量不向非本网络通告地址
          2:只能向网络通告最佳本地地址
        arp_ignore: 是否响应别人的请求
          0:默认值,只要有请求的地址就响应
          1:请求从哪个接口进来就哪个接口响应
(2) RS的RIP可以使用私有地址;但也可以使用公网地址 (3)RS根Director必须在同一物理网络中 (4)请求报文经由Director调度,但响应报文一定不能经由Director; (5)不支持端口映射 (6)RS可以大多数OS (7) RS的网关不能指向DIP

lvs-tun(tunneling): 上下文为ipip

不修改请求 报文的ip首部,而是通过在原有的ip首部(cip <--> vip)之外,再封装一个ip首部(dip <--> rip);

 特性:

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

  (2) RS的网关不能指向DIP

  (3) 请求报文必须经由director调度,但响应报文必须不能经由director

  (4) 不支持端口映射

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

lvs-fullnat:(keepalived)

  director通过同时修改请求报文的目标地址和源地址进行转发

 特性:

  (1) VIP是公网地址;RIP和DIP是私网地址,二者无须在同一网络中

  (2) RS接收到的请求报文的源地址为DIP,因此要响应给DIP

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

  (4) 支持端口映射机制

  (5) RS可以使用任意OS

lvs调度方法

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

RR: round robin, 轮调
WRR: weight rr,带权重的RR
SH: source hash, 实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS,内部维护一个hash表,反向代理时为缓存做负载均衡
DH: destination hash,将对同一个目标的请求始终发往同一个RS,正向代理时为缓存做负载均衡

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

LC: Least Connection
  

  Overhead=Active*256+Inactive

WLC: Weight LC
  

  Overhead=(Active*256+Inactive)/weight

SED: Shortest Expection Delay
  

  Overhead=(Active+1)*256/weight

NQ: Never Queue
  

  SED算法的改进

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

  正向代理情形下的cache server调度

LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法  

lvs-nat和lvs-dr模型演示:

以192.168.1.101 - 105为例,下面以101,102 ... 105做编号

lvs-nat

我们要架构的lvs-nat如下:

准备环境:

我们给101加一块网卡,添加另一块网卡的ip地址192.168.20.1
接着把102和103的ip分别设为20.7和20.8,并且他们各自的默认网关是20.1
20.7启动一个web服务,添加index.html
20.8启动一个web服务,添加index.html
每台主机上都关掉iptables防火墙
打开转发功能: net.ipv4.ip_forward=1

ipvsadm管理命令:

# ipvsadm -A -t 192.168.1.101:80 -s rr
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.20.7 -m
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.20.8 -m
测试: 浏览器可以测试访问:http://192.168.1.101

lvs-dr

我们要架构的lvs-dr如下:

工作特性:

客户端发起请求,到达前端路由器,请求的目标地址是VIP地址,所以路由器要把请求转发给director,也必须是director,
而由于调度器和server都有VIP地址,所以我们要让server不能在ARP解析请求的时候作出相应,
解决方法有三个:
  1.配置路由器ARP地址表,明确表示MAC地址是调度器的MAC地址,但是如果director挂了,即使有备用的director,由于MAC地址不一样,所以就不能解决问题了
  2.在real server上配置ARP tables规则,明确表示当收到目标地址为VIP的请求时,server不做响应,让请求报文进不来或者响应报文出不去,这种解决方案要确保server支持ARP tables
  3.server上,把VIP定义在lo接口的别名上,而不是物理网卡的别名上,还可以配置linux内核参数,使得即便目标地址是VIP,server也不做响应

dr模型director将报文转发至real server时是根据修改MAC地址实现的,也就是说请求报文从路由器到director,源MAC是路由器接口的MAC,目标MAC是dierctor上VIP所在物理网卡的MAC, 然后director广播解析请求,获得每一个RIP的MAC地址,director转发至real server时,(通常情况下,director上有一块网卡,DIP配置在网络接口上,VIP配置在别名上 ),源MAC是DIP所在物理网卡的MAC地址,目标MAC是挑选出的real server上的RIP所在网卡的MAC地址,director修改完MAC地址后转发,如上图红色箭头所示,dirctor将报文扔给交换机,交换机将报文扔给real server,
报文在real server上流向如下图所示,报文经由RIP网卡到VIP所在网卡lo上,lo接口再到用户空间的应用程序上,应用程序构建响应报文后,让报文强行经由lo接口再通过RIP所在物理网卡转发出去。
如上图蓝色箭头所示,响应报文给客户端,源ip是VIP,目标ip是CIP,如果RIP,VIP,DIP在同一个网段,RIP的网关直接指向前端路由器,如果不是在同一个网段,那么RIP指向另一个路由器,然后到达客户端

下面我们来搭建dr模型的架构:

1. RIP, VIP,DIP三者在同一个网段中,架构如下:

相关配置:

director:
  配置网卡:
    # ifconfig eth0:0 192.168.1.111/32 broadcast 192.168.1.111 up
    # route add -host 192.168.1.111 dev eth0:0 RS:
  添加两个内核参数:arp_ignore,arp_announce
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    # echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    # echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
  
  配置lo接口
    # ifconfig lo:0 192.168.1.111/32 broadcast 192.168.1.111 up  
    # route add -host 192.168.1.111 dev lo:0  director写ipvsadm管理命令:
    # ipvsadm -A -t 192.168.1.111:80 -s rr
    # ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.102 -g
    # ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.103 -g
测试: 浏览器访问:http://192.168.1.111





最新文章

  1. win2003、win7下操作注册表
  2. 常用的Linux操作
  3. Winform开发框架之权限管理系统
  4. 【TLD】标签库描述符
  5. java时间格式转换
  6. canvas图形处理和进阶用法
  7. tophat安装
  8. 并发容器之CopyOnWriteArraySet
  9. SpringMVC+Apache Shiro+JPA(hibernate)整合配置
  10. sscanf、sprintf、stringstream常见用法
  11. 解决浏览器跨域限制方案之CORS
  12. php 获取数组深度的值
  13. system的消息队列实例
  14. three.js学习:三维空间下的直线
  15. android中碰撞屏幕边界反弹问题
  16. redis lpop key 当key不存在时,返回nil , 监测redis执行语句是否正常执行
  17. 项目代码部署百度云(使用git部署,node环境)
  18. Alpha冲刺(四)
  19. mysql 主从配置笔记
  20. openerp 6.0.2库存业务

热门文章

  1. java jdk1.8 32/64位 官方绿色版下载附安装教程
  2. Net Core 中WebAPI有关 Session的设置,及获取
  3. C和C++中字符串与数的转换
  4. 渡一教育公开课重点笔记之css
  5. [Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第十---十一条
  6. Keepalived 配置文件
  7. golang-练习ATM --面向对象实现
  8. 使用ASDM 管理 ciscoASA设备
  9. Webpack实战(八):教你搞懂webpack如果实现代码分片(code splitting)
  10. vue中阻止事件穿透的方法