集群系列一

来源:岁月联盟 编辑:exp 时间:2011-09-13

 以前听说过Windows方面的集群,能够实现负载均衡和高可用性,从此对集群有了无限的膜拜。今天马哥讲了关于Linux方面的集群,俺也稍微做了一下总结,为了使大家更详细了解Linux下的集群服务。-----小记

  什么是Linux集群
将多台同构或异构的计算机连接起来协同完成特定的任务就构成了集群系统。各个Linux厂商也推出了能够显著地提高基于TCP/IP协议的多种网络服务的服务质量的高可用性集群系统,通过将物理上分离的多个集群连接在一起使使多个同构或异构的计算机能够通过局域网或广域网共享计算资源,并能够为用户提供对资源的透明访问。(摘自赛迪网)
 我理解的Linux集群
linux下将多个服务器结合起来完成各项请求任务,就相当于多个CPU同时处理运算,那速度,那安全性,肯定是没法说。然后Linux再借助某种机制或是算法,将任务合理的分配给各个服务器,最终高效的完成任务。当然涉及到集群,个人认为,最牛的技术就是:能够提供高可用性,尤其针对那些实时在线的服务,肯定不能让服务器长时间的宕机,集群同时也解决了这样的问题。

(1)集群的分类:
    LB:load  balancing      负载均衡(针对大容量的请求)
    HA:high  Availability   高可用 (7X24小时在线)
    HP:high performance     高性能(科学计算集群)
 负载均衡集群(load  balancing):
  负载均衡群集为企业需求提供了更实用的系统。该系统使负载可以在计算机群集中尽可能平均地分摊处理。该负载可能是需要均衡的应用程序处理负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也如此。通常,网络服务器应用程序接受了太多入网流量,以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。
 高可用集群(high  Availability):
   高可用性群集的出现是为了使群集的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。能够实现服务器实时在线的功能。
 高性能集群(high performance):
   通常,多个计算机同时处理数据,以解决复杂的科学问题。这是并行计算的基础,尽管它不使用专门的并行超级计算机,这种超级计算机内部由十至上万个独立处理器组成。但它却使用商业系统,如通过高速连接来链接的一组单处理器或双处理器 PC,并且在公共消息传递层上进行通信以运行并行应用程序。使用最多的就是气象分析,科学勘探,核爆炸分析等。

  通常实际生产我们会结合使用这几种集群,由于负载均衡集群lvs主机会出现单点故障,此时我们就借助于高可用性,提供服务实时在线。
 (2)常见集群的解决方案:
 LB:
   lvs  (Linux Virtual Server)
   下面我们会详细介绍LVS。 
   haproxy
   HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
 HA:
   heartbeat
   Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。
  corosync+openais:RHCS(红帽的套件)
  ultramokey
  keepalive
 HP:
  bowerful
(2)LB:load  balancing :
负载均衡技术主要应用:
1、DNS负载均衡 最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法,因此,对于同一个名字,不同的客户端会得到不同的地址,他们也就连结不同地址上的Web服务器,从而达到负载平衡的目的。这种DNS负载均衡实现的机理就是简单的轮询。例如 : 当客户端连结 www.51cto.com这名称时,DNS 有能力依序将名称解析到 202.1.1.1 、 202.1.1.2 、202.1.1.3和 202.1.1.4等不同的网络地址,而这些是提供相同服务的主机,让客户端没有感觉有不同。
2、代理服务器负载均衡 使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。
3、地址转换网关负载均衡 支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。
4、协议内部支持负载均衡 除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,HTTP运行于TCP连接的最高层。
5、NAT负载均衡 NAT(Network Address Translation 网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。
6、反向代理负载均衡 普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
7、混合型负载均衡 在有些大型网络,由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,我们可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。我们将这种方式称之为混合型负载均衡。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。

针对不同的网路层次的LB:
第二层负载均衡(链路聚合技术)是将多条物理链路当作一条单一的聚合逻辑链路使用,网络数据流量由聚合逻辑链路中所有物理链路共同承担,由此在逻辑上增大了链路的容量,使其能满足带宽增加的需求.

第四层负载均衡将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目标地址是服务器群VIP(虚拟IP,Virtual IP address)连接请求的数据包流经交换机,交换机根据源端和目的IP地址、TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。

第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。

现在经常使用的是4至7层的负载均衡。

第七层负载均衡优点表现在如下几个方面:

1。通过对HTTP报头的检查,可以检测出HTTP400、500和600系列的错误信息,因而能透明地将连接请求重新定向到另一台服务器,避免应用层故障。

2。可根据流经的数据类型(如判断数据包是图像文件、压缩文件或多媒体文件格式等),把数据流量引向相应内容的服务器来处理,增加系统性能。

3。能根据连接请求的类型,如是普通文本、图象等静态文档请求,还是asp、cgi等的动态文档请求,把相应的请求引向相应的服务器来处理,提高系统的性能及安全性。

缺点: 第七层负载均衡受到其所支持的协议限制(一般只有HTTP),这样就限制了它应用的广泛性,并且检查HTTP报头会占用大量的系统资源,势必会影响到系统的性能,在大量连接请求的情况下,负载均衡设备自身容易成为网络整体性能的瓶颈。

实现负载均衡有两种方式:

1、硬件
硬件负载均衡在国外比较流行。硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

下面就来了解一下市场中,比较主流的几类产品。

◆F5 BIG-IP负载均衡器(LTM)

BIG-IP系列产品受到了用户的广泛认可,使用的人也很多。它的强大之处是基于简单的Web管理界面,包括其他F5设备也是如此。同时,这个负载均衡器还可以处理SSL证书。F5的主要特点之一是其广域网优化管理器,具备高可用的加密通道,同时具有广域网传输速度,优化与数据中心的传输道路。根据这一优势,几乎是自动地就产生了一个简单的基于广域网的灾难恢复解决方案。

F5 BIG-IP LTM的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙-包过滤、包消毒等功能。

◆思科

思科几乎每个IOS路由器都具有负载均衡功能。这是非常令人激动的,因为我们不必去添加额外的硬件产品,基于现有设备,只需要添加负载均衡规则就可以了。思科是路由器领域的老大,当然负载均衡功能只是其原因中的一个。

思科的IOS包括很多负载均衡功能,比如端口绑定,会话交换,TCP优化,NAT和服务器负载均衡器算法,等等。

思科的服务非常到位,在国外,不少技术人员都说,如果你购买了思科的产品就永远不会被公司解雇。

◆Radware的AppDirector系列

Radware的AppDirector (AD)在服务器负载均衡应用方面可以做到本地的服务器负载均衡(AD)和广域的全局服务器负载均衡(AD -Global)。它的单价比较便宜,并具有高扩展性和智能化服务。同时也拥有网络监控和检测功能,全局负载均衡和缓解一定的DDoS攻击等。

另外,Radware设备还有一些特点是比较容易更新和升级,能够感知应用服务,智能化是其宣传的理念之一,也是这个产品的一大特色。

◆梭子鱼负载均衡

梭子鱼的负载均衡器的最大特点是包含了网络安全功能。它具有入侵防御功能,而不是单单检测入侵。这能够更全面地保护你的网络,即使你错过了一个关键的更新和漏洞的修补,梭子鱼的更新服务也能让你的系统自动地更新起来。

此外,梭子鱼的负载均衡也是Web界面操作的,全局负载以及内容缓存也是它的显著特点。

2、软件:
软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。

目前比较流行的就三类软件负载均衡,LVS、Nginx和HAProxy。用的最多的还是LVS和Nginx这两种

◆LVS的详细介绍:
 接受用户发来的请求,并不响应用户的请求,而是转发给子节点,这些子节点是realservers,它们只需要安装在调度节点就行。基于四层转发,对于用户是透明的。
 提供的能力:
  for higher throughput 高吞吐量
  for  redundancy       冗余
  for adaptability      适应性,也就是具有扩展性

  涉及的相关ip地址的命名机制:
   vip   向用户提供服务的地址,并不提供服务,只会转发
   rip   真正提供服务的主机的ip
   dip   转发地址
   cip   客户端地址


  工作模式:
  lvs-nat (地址转换)  
    特点:
集群节点不能跨越ip网段,dip和rip必须在同一子网;
rip可以是私有地址,rip必须以dip地址为网关;
可以做端口转换,也即是端口映射;
任何系统均可做rip,有很好的兼容性;
dorector会成为瓶颈;
扩展能力有限;
基于三层转发;

 

  lvs-dr(直接路由)
  原理:
    只有进来的请求经过dip,出去的响应不经过dip,然而客户端不能无缘无故接受这一相应,这时就要在rip上设置两个网关,但此时又出现问题,cip请求时怎么知道是发给vip,此时解决方案是利用arptables,类似防火墙,通常是在rip上又配置一个vip地址
  特点:
集群节点必须和director在同一个物理网段,rip建议使用公网地址;
rip仅处理用户的请求,不处理响应;
集群realservers的网关不能指向dip;
不支持端口转换;
很多数操作系统均可做realservers(支持同一网卡配置多个地址的系统);
可以带动更多的realservers;
基于二层转发,director将发来的数据包的源mac地址修改为realservers的mac地址,继续进行转发。


  
  lvs-tun (dr的隧道版本)
   原理:隧道基于ip的再封装,把cip发来的数据再封装上源ip为dip,目标ip为vip的地址,再进行转发,gre(通用路由封装)
  特点:
集群节点,realservers和dip不必在同一网络;
rip必须是公网地址;
只处理进来的请求,响应的请求不经过dip;
不能进行端口映射;
只能使用支持ip隧道协议的操作系统做realservers


这里是笔者刚接触到负载均衡的部分理解,有不正确的地方欢迎您的指正。

 

 
作者 “痕久远”