Too young, too simple. Sometimes, naive & stupid

Keepalived调度

使用Keepalived为在真实服务器之间分配流量提供了灵活性,原因在于支持的各种调度算法。负载平衡优于不太灵活的方法,例如Round-Round DNS,其中DNS的分层特性和客户端机器高速缓存可能导致负载不平衡。另外LVS路由器采用的地基过滤具有优于应用级请求转发的优点,因为在网络分组级平衡负载导致最小的计算开销并且允许更大的可拓展性。

使用分配的权重为各个机器提供任意优先级。使用这种形式的调度,可以使用各种硬件和软件组合创建一组真实服务器,并且活动路由器可以均匀地分配的每个真实服务器。

Keepalived的调度机制由IPVS内核模块和一些补丁集合提供,这些模块支持L4传输层交换,旨在与单一IP地址上的多个服务器配合使用。

为了有效的跟踪和路由数据包到真实服务器,IPVS在内核汇总构建了一个IPVS表。主LVS路由使用此表将请求从虚拟服务器地址重定向到真实服务器并返回。

Keepalived调度算法

IPVS表采用的结构取决于管理员为任何给定虚拟服务器选择的调度算法。为了使您集群的扶额类型以及如何调度这些服务具有最大的灵活性,Keepalived支持下面列出的调度算法。

循环调度

按顺序在真实服务器池周围分配每个请求。使用此算法,所有的真实服务器都被视为平等,而不考虑负载。此调度算法类似循环dns,但由于是基于网络连接而不是基于主机,因此更加精细。负载均衡循环调度也不会遭受缓存的DNS查询导致的不平衡。

加权循环调度

按顺序在真实服务器周围分配每个请求,但为容量更大的服务器提供更多作业。容量由用户指定的权重银子指示,然后通过动态负载信息向上或向下调整。

如果池中真实服务器的容量存在显著差异,则加权循环调度是首选的。但是,如果请求负载变换很大,则加权较多的服务器可能会回答超过请求的份额。

最小连接

将更多请求分发给具有较少活动连接的真实服务器。因为它通过IPVS表跟踪到真实服务器的实时连接,所以最少连接时一种动态调度算法,如果请求负载存在高度变化,则它使最好的选择。它最适合于每个成员节点具有大致相同容量的真实服务器池。如果一组服务器具有不同的功能,则加权最小连接调度是更好的选择。

加权最小连接

将更多请求分发给相对其容量具有较少活动连接的服务器。容量由用户指定的权重指示,然后通过动态负载信息向上或向下调整。当真是服务器池包含不同容量服务器的硬件时,加权使得该算法成为理想选择。

基于位置的最小连接调度

将更多请求分发给相对于其目标IP具有较少活动连接的服务器。此算法旨在用于代理缓存服务器集群。它将IP地址的数据包路由到该地址的服务器吗,除非该服务器高于其容量且服务器处于半负载状态,在这种情况下,它将IP地址分配给负载最小的真实服务器。

基于位置的最小连接调度与复制调度

将更多请求分发给相对于其目标IP具有叫较少活动连接的服务器。此算法还设计用于代理缓存服务器集群。它通过将目标IP地址映射到真实服务器节点的子集而与基于位置的最小连接调度不同。然后将请求路由到此子集中具有最少连接数的服务器。如果目标IP的所有节点都高于容量,则通过将来自整个真实服务器池的连接最少的真实服务器添加到该目标IP的真实服务器子集,来复制该目标IP地址的新服务器。然后从真实服务器子集中删除负载最多的节点以防止过度复制。

目标哈希调度

通过在静态哈希表中查找目标IP,将请求分发到真实服务器池。次算法旨在用于代理缓存服务器集群。

源哈希调度

通过在静态哈希表中查找源IP,将请求分发到真实服务器池。该算法适用于具有多个防火墙的LVS路由器。

最短预期延迟

根据给定服务器上的连接数除以其分配的权重,将连接请求分配给服务器,该服务器具有预期的最短延迟。

从不排队

双管齐下的调度程序,首选查找并向空闲或无连接的服务器发送连接请求。如果没有空闲度武器,则调度程序默认使用与最短预期延迟相同的延迟最少的服务器。

服务器权重和调度

LoadBalancer的管理员可以为实际服务器池中的每个节点分配权重。权重是一个整数值,它被考虑到任何权重感知调度算法(例如加权最小连接)中,并帮助LVS路由器更均匀地加载具有不同功能的硬件。

权重相对于彼此的比率作用。例如,如果一个真实服务器的权重为1而另一个服务器的权重为5,那么权重为5的服务器将获得另一份服务器连接的五倍。

实际服务器权重的默认值为1。

虽然增加实际服务器池中的不同硬件配置的权重可以更有效地对集群进行负载平衡,但是当真实服务器引入真实服务器池并且使用加权最小连接调度虚拟服务器时,它可能导致临时不平衡。