基于LVS的Linux负载均衡技术兑现(第一篇:基本原理)
基于LVS的Linux负载均衡技术实现(第一篇:基本原理)原文 http://linux.chinaunix.net/bbs/viewthread.php?t
基于LVS的Linux负载均衡技术实现(第一篇:基本原理)
原文 http://linux.chinaunix.net/bbs/viewthread.php?tid=1020767
?
?
最近在
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
上述八种负载均衡调度算法在实施中,节点的权重越高,在集群中使用的频率就越高。比如说权重为2的节点在每接收两个访问请求之后,权重为1的节点才接收一个访问请求。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的
三层结构图示如下:
从下面的图可以看出,三层结构相对于基本结构需要更多的设备,配置方面也比较复杂。仅仅是后台的集群系统已经需要足够的时间去折腾。但这种结构对于大数据访问量的FTP服务器、Samba等应用来说是比较理想的。在这个结构中的后面是HA集群,通常HA集群会以服务的形式提供Samba,NFS以及FTP等服务,而真实服务器会通过挂载的方式获得HA上提供出来的数据。
另外在红帽的LVS中还有一个比较关键的东西是LVS的组件:
LVS的组件中服务包括pulse,lvs,ipvsadm以及nany;另外还包括配置文件/etc/sysconfig/ha/lvs.cf,配置工具piranha configuration tooly以及服务IP进行浮动之前arp欺骗手段中的send_arp。
pulse是LVS的控制进程,该进程用于启动和控制所有的其他LVS相关的守护进程。该进程的配置文件是/etc/sysconfig/ha/lvs.cf。在主router上pulse用于启动LVS守护进程,在备份router上pulse通过定期收发心跳信号监控主router的状态。如果一旦主router失效,在备份router上的pulse进程将关闭所有主router上的LVS服务,并且开启send_arp程序来重新指派浮动IP到备份router的MAC上。
lvs进程运行在主router上,主要读取/etc/sysconfig/ha/lvs.cf文件,调用lvsadm工具来建立与维护ipvs路由表并对每一个LVS服务指派nanny进程。如果nanny报告一个真实服务器失效,lvs进程将调用ipvsadm工具将失效真实服务器从IPVS路由表中删除。
ipvsadm用于升级kernel中的IPVS路由表,该进程主要用于更改、添加、删除IPVS路由表的条目。
nanny监控的进程运行在主LVS Router上,主LVS Router会通过他来监控每一个真实服务器的状况。
另外piranha configuration tool提供了一个图形接口用于修改/etc/sysconfig/ha/lvs.cf文件,而send_arp会在浮动IP向不同的LVS router进行切换时发送arp广播。
在后面的几篇文档中,我们会分别介绍基于这两种模式的LVS集群构建方法。