地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
DNS是域名和ip之间的解析,需要配服务。
ARP是ip来解析MAC地址的协议,不需要配服务。要求通讯双方必须在同一个物理网段。ARP工作在网络层。
工作原理:
1)发送方首先检查自己的ARP缓存(IP地址和MAC地址的解析记录),没有接收方,就发送广播询问接收方的MAC地址。
2)局域网中所有的主机都接收到了广播,只有指定的接收方会回复,告诉发送方自己的MAC地址(单播),这时接收方也会缓存发送方的MAC地址。。
3)发送方得到了MAC地址,在本地进行ARP缓存,将数据封装成哪来的MAC地址,发送到局域网。
ARP缓存表长用命令:
[root@nginx2 sbin]# arp -a 查看所有记录
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at 52:54:00:8f:d5:c6 [ether] on ens3
[root@nginx2 sbin]# arp -d 172.25.5.1 清除
[root@nginx2 sbin]# arp -a
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at <incomplete> on ens3
[root@nginx2 sbin]# arp -s 172.25.5.1 52:54:00:8f:d5:c6 # 绑定IP和MAC
[root@nginx2 sbin]# arp -a
gateway (172.25.5.250) at 54:e1:ad:54:3b:86 [ether] on ens3
? (172.25.5.1) at 52:54:00:8f:d5:c6 [ether] PERM on ens3
ARP缓存表,可以加快ARP解析速度,减少局域网的广播风暴。
ARP缓存表,给服务器带来了攻击服务器的风险,这个就是arp欺骗攻击。
切换路由器,负载均衡等设备时,可能会导致短时网络中断。(给老的网关发送数据包根据arp表,但是更换了路由器,所以无法通讯)
ARP攻击就是伪造IP和MAC对实现ARP欺骗的。(欺骗网关)
负载均衡集群提供了一种廉价,有效透明的方法,来扩展网络设备和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
1)单台计算机无法承受大规模的并发访问或数据流量了,需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,减少了用户的响应时间又提升了用户体验。
2)将单个负载的运算服务分单到多台节点设备上处理结束后,将结果汇总、反回、系统处理能力和效率得到大幅度提高。
3)7*24小时服务的保证,任意一个或多个有限后端节点设备宕机,寻能影响整个业务的运行。
1)LVS:抗负载能力强,工作在四层,仅仅是做请求分发,没有流量,效率很高。基本上可以对所有的服务做负载均衡。
2)各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。
3)无流量,lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
nginx与lvs进行对比:
在2.4.24内核版本后,IPVS已经成为Linux官方标准内核的一部分。
LVS负载均衡调度技术是在linux内核中实现的。我们在使用该软件配置LVS时候,不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipvsadm来进行管理。
所以ipvsadm是ipvs的管理工具。
CIP | clientIP客户端IP |
---|---|
LB(Director) | 负载均衡器 |
DIP | 负载均衡器的ip |
VIP | 提供给外界访问的 |
RS | Real Server |
RIP | 后端节点的地址 |
LB修改数据包的目的地址(开始时时VIP,后面是RIP),达到转发的功能。
数据包被后端服务器处理后,发送数据包(rip:cip),在局域网中没有cip所以发送给网关,这里指向的网关就是负载均衡调度器。负载均衡调度器在进行封装,将源地址修改为VIP,发送回给数据端。
也就是说LVS的NAT模式是,来修改DNAT方式,走修改SNAT方式。
由于请求和访问都要通过LB,所以访问量大的时候就不行了。
NAT模式可以该端口,也可以改IP。
并且需要开启内核转发。
可以达到百台的访问量。
LB通过IP隧道将请求报文不改写,只添加封装IP头的方式来修改请求IP。
数据包到达某个节点的时候,节点也需要绑定VIP,并且抑制ARP。
数据包处理完成以源VIP和目的CIP回应给客户端,不需要IP地址找网关,单是网关将成为瓶颈;单是如果节点自己就可以连接外网,就可以直接发送效率更高。
TUN比DR的效率低,因为还要考虑ip隧道的支持问题。
Director Route:直接路由模式,支持高并发,多达数万。
数据包经过LB做DNAT和SNAT,数据包请求回去的时候做DNAT和SNAT,全都改。
可以实现多台机器入栈处理多台机器出站处理。
round robin)轮询算法,顾名思义,也就是将客户端的请求逐个分发给后端的每台Real Server;假定后端有3台服务器,编号分别为1、2、3;则分发次序为1…2…3…1…2…3…1…2…3…
weight round robin,加权轮询;根据不同的服务器权重进行请求分发调度,权重大的多分发请求,权重小的少分发请求;比如3台Real Server编号为1、2、3,权重分别为4、2、1,则分发请求次序为1…1…1…1…2…2…3…1…1…1…1…2…2…3…
3、SH(源地址hash调度)
Source Hash,源地址哈希;此算法根据请求服务的客户端的域名或IP地址,进行哈希计算,计算后的值对Real Server个数取模求余,从而保证可以将同一域名或IP的请求始终分发到后端的同一个Real Server上,常用于Session保持等场景;
4、DH(目的地址hash调度)
Destination Hash,目标地址哈希;不同于SH是根据客户端的信息进行哈希计算,DH算法是根据请求的目标资源进行哈希计算,比如请求的URL,此方式的目的在于:能够保证对相同资源的请求始终分发到后端同样的Real Server上;
典型的应用场景在缓存服务器上,比如我们的LVS和Real Server之间增加了一层缓存服务器,缓存服务器缓存了一部分静态资源,那么LVS使用DH算法,可以将客户端请求的已存在缓存服务器的资源,始终分发给缓存服务器,而不必分发给Real Server,从而可以大大降低后端的压力,同时也提高了响应速度,两全其美的事情
以上的算法可以归类为静态算法,其都只是根据客户端请求数据包中的某些信息来进行计算,从而决定分发到那台服务器上,并没有将后端服务器的负载情况考虑在内;
下面介绍的算法可以归类为动态算法,其会考虑后端服务器的实际负载情况,并选择负载小的进行请求分发
5、LC(最小连接数)
Least Connection,最少连接数;此算法会根据后端每台Real Server的连接数多少来分发请求,对于连接数少的服务器,会多分发客户端请求,以尽可能利用资源占用较少的服务器
连接数计算方法:active * 256 + inactive
注解:active表示正处于HTTP正发送请求或处理请求过程中;inactive表示该连接非请求和处理过程中,只是长连接释放结算,或四次挥手阶段;
Weight Least Connection,加权最少连接数;后端Real Server可能性能差异较大,WLC算法可以动态的获取不同服务器的真实负载情况,并调整对应的加权值,从而始终保证将请求分发到性能优异且较空闲的机器,从而提高处理效率
连接数计算方法:( active * 256 + inactive ) / weight
7、SED
Shortest Expect Delay,最短期望延迟;此算法是对WLC的一种改进,和WLC的不同在于其连接数计算方法的不同
SED连接数计算方法:( active + 1 ) * 256 / weight
和WLC不同在于两点:
(1)、不将非活动连接数计算在内
(2)、将active做+1处理
关于SED调度方法有两个事情需要注意:
在判断每个集群节点的总开销值时不使用非活动连接数值。
在入站连接被分配后,它在活动连接数值基础上加1来预料总开销值
8、NQ
Never Queue,永不排队算法;此种算法,当客户端请求到达时,会首先根据SED算法进行选择一个RS,然后把请求分配给这个服务器,同时从算法列表中将此台服务器排除,下次请求到达时,只会在剩下的服务器列表中根据SED进行选择,等到每一台主机都分配到连接后,调度器此后每次都会根据SED算法在所有的服务器中进行计算选择;
该算法始终保证没有0连接的服务器
9、LBLC(基于地址的最小链接数)
Locality-Based Least Connections,基于局部性的最少链接
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
总结:LVS的负载均衡算法,不同的应用场景,应选择合适的负载均衡算法,只有在充分了解了每一种算法的思想之后,才能根据自己的业务需求结合应用场景来做选择;
如果你实在不知道该如何选择,那么推荐选择WLC算法是一个不错的选择;WLC算法在实际的生产环境中,应用还是挺多的。