LVS

负载均衡之LVS深度讲解

负载均衡之LVS深度讲解

一、ARP协议介绍

1. ARP简介
  ARP协议,全称"Address Resonlution Protocol中文名师地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。
  ARP协议和DNS有点相像之处,不同点是:DNS是在域名和IP之间的解析。另外,ARP协议不需要配置服务。而DNS需要配置服务。

ARP协议工作原理:

  1. 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。
  2.当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目标主机的IP地址。
  3.网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址; 
  4.源主机收到这个ARP响应数据包后,将得到的目标主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

ARP工作协议原理总结:

  1)源主机查看确认缓存(cache)
  2)发送全网广播到所有机器
  3)确认收到请求进行单播回复
  4)各自通讯
  5)各自缓存

一些名词介绍:

 1.ARP全称"Address Resolution Protocol"
 2.实现局域网通过IP地址获取主机的MAC地址
 3.MAC地址:48位主机的物理地址,局域网内唯一。
 4.ARP协议类型类似DNS服务,但是不需要配置ARP服务
 5.ARP协议是OSI7层第三层网络层协议。(三层协议,工作在二层。)
 6.ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境)

ARP缓存表是把双刃剑:

 1)主机有了arp缓存表,可以加快ARP的解析速度,减少局域网广播的风暴。
 2)ARP缓存表,有arp欺骗攻击的风险。(建议绑定mac)
 3)案例:切换到路由器,负载均衡等设备时,可能会导致网络中断。

ARP欺骗的原理:

  ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗的,如果一台主机中了ARP病毒,那么它很快能够在网络中产生大量的ARP通信量(它会很快的频率进行广播)以至于使用网络阻塞,只要攻击者持续不断的发出伪造ARP响应就能更改局域网中目标ARP缓存中的IP-MAC条目,造成网络中断或者中间人攻击。

运维工作中,ARP的企业应用场景:
1.服务器切换ARP问题
  当网络中一台提供服务的机器宕机后,当在其他运行正常的机器添加宕机的机器的IP时,会因为客户端的ARP table cache 的地址解析还是宕机的机器的MAC地址,从而导致,即使在其他运行正常的机器添加宕机机器IP,也会发生客户端依然无法访问的情况。

解决办法:
  当机器宕机,IP地址迁移到其他机器上时,需要通过 arping 命令来通知所有网络内机器清除其本地的ARP table cache 从而使得客户机访问时重新广播获取MAC地址。
ARP 广播而进行新的地址解析:
使的客户端ARP广播失效,linxu下的具体命令:

/sbin/arping -I eth0 -c 3 -s 10.0.0.162 10.0.0.253
/sbin/arping -U -I eth0 10.0.0.162
NAME arping - send ARP REQUEST to a neighbour host
SYNOPSIS arping [ -c count] [ -w deed-line] [ -s source] -I interface destination

参数说明:

语法: arping(选项)(参数)
-c count:表示发送指定数量arp数据包请求后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止
-s source:设定源IP地址
-I interface: 设置ping使用的网络接口
-U :主动的ARP模式,更新邻居
-w :设置超时时间
-V version:显示版本信息

好了,关于ARP的铺垫完毕。下面我们来看下 LVS负载均衡集群

二、负载均衡集群之LVS

1.搭建负载均衡服务的需求:
  负载均衡(Load Balance)集群提供了一种廉价,有效、透明的方法。来拓展网络设备和服务器的负载、带宽、增加吞吐量,加强网络数据处理能力,提供网络的灵活性和可用性。

2.网站搭建负载均衡服务的场景:

  1)单台计算无法承受大规模的并发访问或者数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应有提升了用户体验。
  2)单个负载的运算服务分担多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回。系统处理能力和效率得到大幅度提高。
  3) 7*24 小时的服务器保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。

  在负载均衡集群中,常规情况下所有计算机节点都应该提供相同的服务,不过也有例外,例如做C做cache缓存集群时。集群中的负载均衡负责接受所有对该服务的入站请求,然后将这些请求按照事先指定好的调度方法分配到不同的集群几点上。

3、LVS介绍
  LVS时linux Virtual Server 的简写,即linux虚拟服务器,是一个虚拟的服务器集群系统,可在UNIX、Linux平台实现负载均衡集群的功能。该项目1998年5月 章文嵩博士组织成立,是中国最早出现自由软件项目之一。

4、IPVS(LVS)发展史
  早在2.2内核时,IPVS就已经以内核补丁的形式出现。
  从2.4.23版本开始,IPVS软件就是合并到Liunx内核的常用版本的内核补丁的集合。
  从2.4.24 以后 IPVS已经成为Linux官方标准内核的一部分。

5.IPVS软件工作层此图
负载均衡之LVS深度讲解

 1. ip_vs 工作在内核层
 2. ipvsadm 管理LVS工具
 3.keepalived 和ipvsadm并行的

  Linux虚拟服务器,我们使用软件配置LVS时候,不能直接配置内核中的ipvs 而需要使用IPVS的管理工具ipvsadm 进行管理。一般使用keepalived来管理lvs
ipvs的管理工具ipvsadm管理ipvs

LVS技术点小结:

  1.真正实现调度的工具IPVS,工作在Linux内核层面。
  2.LVS自带的IPVS管理工具是ipvsadm
  3.keepalived实现管理IPVS即负载均衡器的高可用

6.LVS的体系结构与工作原理简单描述

一些术语介绍:

  CIP:Client IP 客户端的IP地址
  LB: load balance 负载均衡
  RS: Real Server 节点服务器
  DIP:Director IP 负载均衡对应的IP(客户端用于请求集群服务器的IP地址)
  VIP: 域名解析的地址 VIP(为Director用于向客户端计算机提供服务的IP地址)
  RIP: 节点服务器的IP地址(真实服务器物理网卡IP)

7. LVS的四种工作模式

 NAT: Netword address transation
 TUN: tunneling
 DR: Direct Routing(用的最多)
 FULLNAT: full network address transation(章文嵩依照阿里情况新加)

1)NAT 模式--网络地址转换《==收费站模式
负载均衡之LVS深度讲解

LVS的NAT模式特点总结:

 1.NAT技术将请求的报文(通过DNAT方式改写)和响应的报文(通过SNAT方式改写)通过调度器地址重写,然后在转发内部的服务器,报文返回时改写原来的用户请求的地址。
 2.只需要在调度器LB上配置WAN 公网IP即可,调度器也要有私有 LAN IP和内部 RS节点通讯
 3.每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN物理网卡地址(LDIP)这样才能确保数据集报文返回时仍然经过调度器LB
 4.由于请求与响应数据报文都都经过调度器LB,因此网站在访问量大的时候调度器LB有较大的瓶颈,一般要求最多10-20台节点。
 5.NAT模式支持对IP及端口的转换,用户请求10.0.0.1:80 可以经过调度器LB转换到RS节点的10.0.0.2:8080(DR和TUN模式不具备的)
 6.所有NAT内部RS节点只需要配置私有LAN IP即可。
 7.由于数据包来回都需要经过调度器,因此,要开启内核转发 net.ipv4_forward = 1当然也包括iptables防火墙的forward功能。(DR和TUN都不需要)

负载均衡之LVS深度讲解
2)DR模式--直接路由模式(Director Route)

  VS/DR 模式是通过改写请求报文的目标mac地址,将请求发给真实服务器的。而真实服务器将相响应的处理结果直接返回给客户端用户、同 VS/TUN一样,极大的提高了集群系统的伸缩性。DR模式没有IP隧道的开销,对集群中真实的服务器也没有必须支持IP隧道协议的要求,但是要求 调度器LB 与真实服务器RS 都有一块网卡链在同一个物理网段上,即必须在同一个局域网环境。

LVS 支持发并发,多大数万(需要调整参数)。
注意:RS服务器的LO网卡需要绑定VIP,同时做抑制ARP

负载均衡之LVS深度讲解

3)TUN模式-TUNNEL模式

 1.负载均衡器通过把请求的报文通过IP隧道(IPIP隧道)的方式(请求的报文不经过原目的地址的改写(包括MAC)而是直接封装成另外的IP报文转发真实的服务器,而真实的服务器将响应处理后直接返回给客户端用户。
 2.由于真实服务器将响应的处理后的报文直接返回给客户端用户,因此,最好RS有公网IP地址,这样效率才会更高,理论上:只要出网即可,无需外网IP地址。
 3.调度器LB只处理入站请求的报文,因此此集群系统的吞吐量可以提高10倍以上,但隧道也会带来一定的系统开销,TUN模式适合LAN/WAN
 4.TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统IP隧道的支持问题。
 5.所有的RS服务器都要绑定VIP,抑制ARP配置复杂。
 6.LAN环境一般采用 HAroxy、nginx、DNS调度等代理取代。因此,TUN模式在国内实际应用的已经很少,跨机房应用要么拉光纤成局域网,要么DNS调度,还要做数据同步。
 7.直接对外的访问业务。例如: web服务器做RS节点,最好用公网IP地址,不直接对外的业务,例如:Mysql,存储系统RS节点,最好使用内部地址。

关于负载均衡的调度算法见之前文章:
https://www.liuliya.com/archive/696.html

4)LVS的FULLNAT模式

  无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。
这引发的两个问题是:
  1.同一个 VLAN 的限制导致运维不方便,跨 VLAN 的 RS 无法接入。
  2.LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。
Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 不再存在 VLAN 上的从属关系,可以做到多个 LVS 对应多个 RS,解决水平扩容的问题。
Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换

负载均衡之LVS深度讲解

 1)在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
 2)内网 IP 之间可以通过多个交换机跨 VLAN 通信。
 3)当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
 4)LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
 5)Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。

LVS的9大特点:

 1)在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP
 2)请求的报文要经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大的时使用效率很高(NAT模式相比)
 3)DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)
 4)需要注意的是 RS的节点的VIP的绑定(lo:vip/32,lol:vip/32)和ARP抑制问题。
 5)RS的节点的默认网关不需要是调度器LB的DIP,而是IDC机房分配的上级路由器的IP(RS节点的默认网关有外网IP的情况)理论讲:只要RS可以出网即可,不是必须要配置外网IP。
 6)由于DR模式的调度器仅是做了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口(和NAT区别)
 7)调度器LB 几乎支持所有的UNIX,Linux系统,但是目前不支持windows系统,真实服务器RS节点可以是WINDOWS系统。
 8)总的来说DR模式效率很高,但是配置也叫麻烦,因此,访问量不是特别大的公司可以使用haproxy/nginx取代之,这也符合运维原则:简单、易用、高效。日1000-2000W PV或者并发请求1万以下都可以考虑用haproxy/nginx(LVS NAT模式)
 9)直接对外的访问业务,例如:web服务器做 RS节点,RS 做好用公网IP地址,如果不是直接对外的业务,例如:Mysql存储系统TS节点,最好只用内部地址。
posted @ 2017-06-19 13:57  Alex_Footprint  阅读(238)  评论(0编辑  收藏  举报