LVS 详解

Linux Cluster 相关概念

Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统。

1、Linux Cluster 类型

LB:Load Balancing          # 负载均衡
HA:High Availiablity       # 高可用
	A=MTBF/(MTBF+MTTR)     # 计算公式  
HP:High Performance        # 高性能

2、分布式系统及扩展方式

  • 分布式系统包括:分布式存储和分布式计算
  • 系统扩展方式包括:向上扩展( Scale UP,比如:提升主机性能)和向外扩展(Scale Out,比如:Cluster )

LB Cluster 相关概念

1、LB Cluster 的实现方式

  • 硬件

    F5 Big-IP
    Citrix Netscaler
    A10
    
  • 软件

    lvs         # Linux Virtual Server
    nginx
    haproxy
    ats         # apache traffic server 
    perlbal
    pound
    

2、LB Cluster 的划分(基于工作的协议层次)

  • 传输层(通用):(DPORT)

    lvs
    nginx:(stream)
    haproxy:(mode tcp)
    
  • 应用层(专用):(自定义的请求模型分类)

    proxy server:
    	http:nginx(http), httpd, haproxy(mode http), ...
    	fastcgi:nginx, httpd, ...
    	mysql:ProxySQL,  ...
    	...
    

LVS 介绍

1、LVS 概念

LVS 是一个四层路由器或四层交换机(针对于OSI 7层模型),VS(Virtual Server)根据请求报文的目标IP和目标协议及端口将其调度转发至某RS(Real Server),根据调度算法来挑选RS。

2、LVS 工作原理

2.1 iptables/netfilter 简短回顾

iptables     # 用户空间的管理工具
netfilter    # 内核空间上的框架
				
三种数据流向:
	流入   # PREROUTING --> INPUT 
	流出   # OUTPUT --> POSTROUTING
	转发   # PREROUTING --> FORWARD --> POSTROUTING

nat table:				
	DNAT   # 目标地址转换---PREROUTING
	SNAT   # 源地址转换---POSTROUTING

2.2 LVS 实现方式

LVS 使用 ipvsadm/ipvs 来实现。

  • ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及相关的 RealServer
  • ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架

在这里插入图片描述
上图所示,ipvs工作于内核空间的INPUT链上,当收到用户请求某集群服务时,经过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。

3、LVS 相关术语

VS:Virtual Server, Director, Dispatcher, Balancer
RS:Real Server, upstream server, backend server
			
CIP:Client IP
VIP: Virtual server IP
RIP: Real server IP
DIP: Director IP
			
CIP <--> VIP == DIP <--> RIP 

4、LVS 集群的类型

lvs-nat      # 修改请求报文的目标IP;多目标IPDNAT
lvs-dr       # 操纵封装新的MAC地址
lvs-tun      # 在原请求IP报文之外新加一个IP首部
lvs-fullnat  # 修改请求报文的源和目标IP

4.1 lvs-nat

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

注意事项:

  1. RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP
  2. 请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈
  3. 支持端口映射,可修改请求报文的目标PORT
  4. vs必须是Linux系统,rs可以是任意系统

在这里插入图片描述

4.2 lvs-dr

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

注意事项:

  1. Director和各RS都得配置使用VIP

  2. 确保前端路由器将目标IP为VIP的请求报文发往Director:

    (a) 在前端网关做静态绑定;
    (b)RS上使用arptables;
    (c)RS上修改内核参数以限制arp通告及应答级别	
    		arp_announce
    		arp_ignore
    
  3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

  4. RS跟Director要在同一个物理网络

  5. 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client

  6. 不支持端口映射

在这里插入图片描述

针对此类型的一些问题和解决方法:

  1. Director和各RS都得配置使用VIP,如何保证ARP请求报文和响应都只有Director的MAC地址能够响应?(解决办法:修改Liunx内核中关于ARP的内核参数:arp_announce/arp_ignore)
  2. 由于RS只有一个网络接口,而Linux内核默认情况下包封装时是从哪个网口出去那个网口就是源地址,如何确保RS转发出来的报文源IP是VIP,而不是RIP?(解决办法:在数据报封装后指定路由经lo别名上的接口发送出去然后再通过物理网卡转发出去)
  3. Director和各RS都得配置使用VIP,如何避免个主机的IP广播,造成无法通信?(解决办法:在RS上进行配置时,设定VIP的广播地址为它自己即可)

4.3 lvs-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得支持隧道功能

在这里插入图片描述
此场景优缺点:

  • 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
  • 缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。封装两个IP报文首部会有问题: MTU大小为1500的大小,而再加一个IP报文首部会超出MTU的大小,导致路由器拒收(因为传输之前已经被切片传输的大小为1500字节)。

4.4 lvs-fullnat

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

注意事项:

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
  2. RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但Director还要将其发往Client
  3. 请求和响应报文都经由Director
  4. 支持端口映射
  5. 此类型默认不支持(需要编译内核进行支持)

4.5 LVS 场景总结

  • lvs-nat, lvs-fullnat:请求和响应报文都经由Director

     lvs-nat      # RIP的网关要指向DIP
     lvs-fullnat  # RIPDIP未必在同一IP网络,但要能通信
    
  • lvs-dr, lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

     lvs-dr       # 通过封装新的MAC首部实现,通过MAC网络转发
     lvs-tun      # 通过在原IP报文之外封装新的IP首部实现转发,支持远距离通信
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值