下面是看马哥linux视频学习时做的笔记,偏理论,重点是介绍LVS负载均衡的各种实现方法,再次为马哥深厚的理论知识功底叹服。


Linux Cluster

集群:将多台主机组织起来满足同一个需求

集群的类型

  • LB: Load Balancing,负载均衡集群;
    • 负载均衡器,调试器,分发器
    • 后端主机,‘真’服务器
  • HA:Hiah Avallibilty,高可用集群;
    • Active:活动服务器;
    • Passlve:备用服务器;

LB集群的实现

硬件:如F5的BIG—IP,Citrix的Netscaler等,缺点是贵 软件:如lvs,haproxy,nginx,ats等

其中LVS是真正在内核中实现的,基于TCP传输层,突破套接字的限制,所以支持更大的并发量。

HA集群的实现

keepalived: vrrp协议 als: heartbeat,cman+rgmanager(RHCS)

LVS :Linux Virtual Server

四层路由,四层交换:根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机;

LVS的组成

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

支持基于TCP,UDP,SCTP,AH,EST,AH_EST等协议进行调度;

LVS集群的专用术语

简写 含义
VS Virtual server
RS Real server
CIP Client IP
VIP virtual server IP
DIP Director IP
RIP Real Server IP

lvs-nat

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

  1. RIP和DIP必须在同一IP网络,且应该使用私有地址;RS的网络要指向DIP(保证响应报文必须经由VS)
  2. 请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈
  3. 支持端口映射
  4. VS必须是Linux,RS可以是任意OS

lvs-dr:Direct Routing

通过为请求报文重新封装一个MAC首部进行转发;源MAC是DIP所在接口的MAC,目标MAC是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIP<–>VIP);

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

    • 在路由器上静态绑定VIP和Director的MAC地址;
    • 禁止RS响应VIP的ARP请求,禁止RS的VIP进行通告。方法为修改RS的内核参数,并把VIP绑定lo的别名上(arp_igonre,arp_announce)
  2. RS的RIP可以使用私有地址,也可以使用公网地址

  3. RS跟Director必须在同一物理网络,RS的网关必须不能指向DIP

  4. 请求报文必须由Director调度,但响应报文必须不能经由Director

  5. 不支持端口映射

  6. RS可以使用大多数的OS

lvs-tun:tunnel

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是源IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP)

  1. RIP,DIP,VIP全得是公网地址
  2. RS网关不能指向,也不可能指向DIP
  3. 请求报文经由Dirctor转发,但响应报文将直接发往CIP
  4. 不支持端口映射
  5. RS的OS必须支持隧道功能

lvs-fullnat:

通过同时修改请求报文的源IP地址(CIP–>DIP)和目标IP地址(VIP–>RIP)进行转发;

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通
  2. RS收到的请求报文源IP为DIP,因此响应报文将直接响应为DIP
  3. 请求和响应报文都经由Director
  4. 支持端口映射