`
城的灯
  • 浏览: 150138 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

负载均衡

    博客分类:
  • 2011
 
阅读更多
本文属于转载(http://weijie.blog.51cto.com/340746/74936),感谢作者的辛勤付出!   
在单一的服务器上执行WEB应 用程序有一些重大的问题,当网站成功建成并开始接受大量请求时,单一服务器终究无法满足需要处理的负荷量,所以就有点显得有点力不从心了。另外一个常见的 问题是会产生单点故障,如果该服务器坏掉,那么网站就立刻无法运作了。不论是因为要有较佳的扩充性还是容错能力,我们都会想在一台以上的服务器计算机上执 行WEB应用程序。所以,这时候我们就需要用到集群这一门技术了。
         
在进入集群系统架构探讨之前,先定义一些专门术语:
1. 
集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。 
2. 
负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。如一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务。
3. 
特点:在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。集群系统(Cluster)主要解决下面几个问题: 
高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。 
负载平衡:即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
目前比较常用的负载均衡技术主要有: 
  1. 基于DNS的负载均衡 
  通过DNS服务中的随机名字解析来实现负载均衡,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,他们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。 
  2. 反向代理负载均衡 (如Apache+JK2+Tomcat这种组合)
  使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。
  3. 基于NATNetwork Address Translation)的负载均衡技术 (如Linux Virtual Server,简称LVS
   网络地址转换为在内部地址和外部地址之间进行转换,以便具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问地址转换网关拥有的某一外部地 址时,地址转换网关能将其转发到一个映射的内部地址上。因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后外部网络中的计算机就各自 与自己转换得到的地址上服务器进行通信,从而达到负载分担的目的。

介绍完上面的集群技术之后,下面就基于Tomcat的集群架构方案进行说明:

上面是采用了Apache httpd作为web服务器的,即作为Tomcat的前端处理器,根据具体情况而定,有些情况下是不需要Apache httpd作为 web 服务器的,如系统展现没有静态页面那就不需要Apache httpd,那时可以直接使用Tomcat作为web 服务器来使用。使用Apache httpd主要是它在处理静态页面方面的能力比Tomcat强多了。
1
 用户的网页浏览器做完本地 DNS和企业授权的DNS之的请求/响应后,这时候企业授权的DNS(即21cn BOSS DNS)会给用户本地的DNS服务器提供一个NAT请求分配器(即网关)IP
2
 NAT分配器,它会根据特定的分配算法,来决定要将连接交给哪一台内部 Apache httpd来处理请求。大多数的NAT请求分配器提供了容错能力:根据侦测各种WEB服务器的失效状况,停止将请求分配给已经宕掉的服务器。并且有些分配器还可以监测到WEB服务器机器的负载情况,并将请求分配给负载最轻的服务器等等。Linux Virtual Server是一个基于Linux操作系统上执行的VS-NAT开源软件套件,而且它有丰富的功能和良好的说明文件。商业硬件解决方案 Foundry NetworksServerIron是目前业界公认最佳的请求分配器之一。
3
 Apache httpd + Mod_JK2在这里是作为负载均衡器,那为什么要做集群呢?如果集群系统要具备容错能力,以便在任何单一的硬件或软件组件失效时还能100%可用,那么集群系统必须没有单点故障之忧。所以,不能只架设一台有mod_jk2Apache httpd,因为如果 httpdmod_jk2失效了,将不会再有请求被会送交到任何一个Tomcat 实例。这种情况下,Apache httpd就是瓶劲,特别在访问量大的网站。
4
 Mod_JK2负载均衡与故障复原,决定把Apache httpd当成web服务器,而且使用mod_jk2将请求传送给Tomcat,则可以使用mod_jk2的负载均衡与容错功能。在集群系统中,带有mod_jk2Apache httpd可以做的事情包括:
A
 将请求分配至一或多个Tomcat实例上
你可以在mod_jk2workers.properties文件中,设定许多Tomcat实例,并赋于每个实例一个lb_factor值,以作为请求分配的加权因子。
B
 侦测Tomcat实例是否失败
Tomcat实例的连接器服务不再响应时,mod_jk2会及时侦测到,并停止将请求送给它。其他的Tomcat实例则会接受失效实例的负载。
C
 侦测Tomcat实例在失效后的何时恢复
因连接器服务失效,而停止将请求分配给Tomcat实例之后,mod_jk2会周期性地检查是否已恢复使用性,并自动将其加入现行的Tomcat实例池中。
5
 Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制。这里提示一下就是,对每个请求的处理,Tomcat都会进行会话复制,复制后的会话将会慢慢变得庞大。
6
 Mod_jk2同时支持会话亲和和会话复制。在tomcat 5中如何实现会话亲和和会话复制?把server.xml中的<cluster/>标签去掉就实现会话亲和,把<cluster/>标签加上就实现会话复制。
7
 会话亲和:就是表示来自同会话的所有请求都由相同的Tomcat 实例来处理,这种情况下,如果Tomcat实例或所执行的服务器机器失效,也会丧失Servlet的会话数据。即使在集群系统中执行更多的Tomcat实例,也永远不会复制会话数据。这样是提高集群性能的一种方案,但不具备有容错能力了。
8
 使用会话复制,则当一个Tomcat实例宕掉时,由于至少还有另一个Tomcat实例保有一份会话状态数据,因而数据不会丧失。但性能会有所降低。
 
 
集群
  传统独立服务器(非集群的)不提供任何失效无缝转移以及负载平衡能力。当服务器失败的时候,就无法获取整个网站的内容,除非服务器被重新唤起(启动)。由于服务器失效,任何存储在服务器内存中的SESSION都会丢失,用户必须重新登陆并且输入所有由于服务器失效丢失的数据。
   不同的是,作为集群一部分的服务器则提供了可测性以及失效无缝转移能力。一个集群就是一组同步运行并且协同工作,能提供高可靠性,高稳定性以及高可测性 的多服务器例程。服务端集群对客户端表现出来似乎就是一个单独的服务器例程。从客户端的视角来看,集群的客户端和单独的服务器没多大不同,但是他们通过提 供实效无缝转移和SESSION复制做到了不间断服务以及SESSION数据持久性。
 
SESSION复制
  服务器集群通常操纵两种SESSION sticky sessions replicated sessions sticky sessions就是存在单机服务器中的接受网络请求的SESSION,其他集群成员对该服务器的SESSION状态完全不清楚,如果存有SESSION的服务器失败的话,用户必须再次登陆网站,重新输入所有存储在SESSION中的数据。
  另一种SESSION类型是,在一台服务器中SESSION状态被复制到集群中的其他所有服务器,无论何时,只要SESSION 被改变,SESSION数据都要重新被复制。这就是 replicated session sticky replicated sessions都有他们的优缺点, Sticky sessions简单而又容易操作,因为我们不必复制任何SESSION数据到其他服务器上。这样就会减少系统消耗,提高性能。但是如果服务器失败,所有存储在该服务器内存中的SESSION数据也同样会消失。如果SESSION数据没有被复制到其他服务器,这些SESSION就完全丢失了。当我们在进行一个查询事务当中的时候,丢失所有已经输入的数据,就会导致很多问题。
  为了支持 JSP HTTP session 状态的自动失效无缝转移,TOMCAT服务器复制了在内存中的SESSION状态。这是通过复制存储在一台服务器上的SESSION数据到集群中其他成员上防止数据丢失以及允许失效无缝转移。
 
对象的状态管理
  通过在服务器上的保存状态可以区分出4种对象:
  无状态:一个无状态对象在调用的时候不会在内存中保存任何状态,因为客户端和服务器端没必要保存任何有关对方的信息。在这种情况下,客户端会在每次请求服务器时都会发送数据给服务器。SESSION状态被在客户端和服务器端来回发送。这种方法不总是可行和理想的,特别是当传输的数据比较大或者一些安全信息我们不想保存在客户端的时候;
  会话:一个会话对象在一个SESSION中只被用于特定的某个客户端。在SESSION中,他可以为所有来自该客户端的请求服务,并且仅仅是这个客户端的请求。贯穿一个SESSION,两个请求间的状态信息必须保存。会话服务通常在内存中保存短暂的状态,当在服务器失败的时候可能会丢失。SESSION状态通常被保存在请求间的服务器的内存中。为了清空内存,SESSION状态也可以被从内存中释放(就像在一个对象CACHE)。在该对象中,性能和可量测性都有待提高,因为更新并不是被单独的写到磁盘上,并且服务器失败的时候数据也没办法抢救。
  缓存:缓存对象在内存中保存状态,并且使用这个去处理从多客户端来的请求。缓存服务的实现可以扩展到他们把缓存的是数据备份保存在后端存储器中(通常是一个关系数据库)。
  独立的: 一个独立的对象在一个时间内只活跃在集群中的一台服务器上,处理来自多客户端的请求。他通常由那些私有的,持久的,在内存中缓寸的数据支持。他同样也在内 存中保持短暂状态,在服务器失败的时候要重建或者丢失。当失败的时候,独立对象必须在同一个服务器上重起或者移植到另一台服务器上。
分享到:
评论

相关推荐

    负载均衡器技术Nginx和F5的优缺点对比

     目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。  我们使用的是软负载均衡器Nginx,而农行用的是F5硬负载均衡器,这里...

    流媒体服务器集群的负载均衡

    流媒体服务器(Streaming Media Server 简写MS)集群系统能够用相对较为廉价的方式提供较强的可扩展性和良好的吞吐性能,然而要使系统资源得到充分利用却面临着许多技术上的挑战,负载均衡技术就是其中之一。...

    弘积负载均衡简易运维手册

    3.2、弘积负载均衡 3.2.1、配置节点(类似F5 poolmembers) 3.2.2、配置定义健康检查 延伸:不同poolmember采用不同健康检查(与F5类似) 目录 3.2.3、配置虚拟服务(类似F5 poolmembers) 3 3.2.4、...

    天融信负载均衡配置手册

    天融信负载均衡配置手册

    公司基于VRRP的负载均衡出口链路配置.rar

    3、应用场景:公司基于VRRP的负载均衡出口链路配置 4、特点:Word文档提供了实验的详细过程,包括每一步骤的操作命令和截图,并给出了实验的topo文件(包括配置信息) 5、适用人群:网络系统的建设与运维 6、使用...

    Windows Server 2019 负载均衡(NLB)安装部署-图文

    网络负载均衡,英文名称为Network Load Balance,简称NLB。 当日常工作业务量较大、网络负荷过重时,我们就需要将业务进行负载,来保障服务器的高可用性,高稳定性。负载均衡可以对服务器的运行状况进行监控,及时...

    基于动态反馈的负载均衡算法

    基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法

    负载均衡A10考试题库

    负载均衡A10考试题库

    SAP 应用服务负载均衡的实现

    SAP 应用服务负载均衡的实现SAP 应用服务负载均衡的实现

    LVS+Keepalived高可用负载均衡集群

    需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!...

    实现多服务器负载均衡

    探讨分布式网络服务器使用的负载均衡技术及负载分配的策略,并基于网络地址转换在FreeBSD上实现了负载均衡网关,应用于我们的Internet网络服务器上,将负载分给多个服务器分担,以解决Internet服务器面临的大量并发...

    负载均衡开源解决方案

    负载均衡(Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强 ...

    H3C负载均衡配置指导

    负载均衡配置指导帮助设置防火墙负载均衡的操作,有一定的帮助。

    MySQL Proxy 实现负载均衡测试

    MySQL Proxy 实现负载均衡测试 MySQL Proxy 实现负载均衡测试

    apache2.2.4 负载均衡.txt

    apache2.2.4 负载均衡.txtapache2.2.4 负载均衡.txtapache2.2.4 负载均衡.txt随着访问量的不断提高,以及对响应速度的要求,进行负载均衡设置就显得非常必要了。公司的系统在最初设计的时候就已经考虑到了负载均衡的...

    导致内部负载均衡器间歇性丢包或负载不均衡的常见因素-Bing1

    后端个别服务器网卡配置了NSG拒绝策略(例如443端口),但是负载均衡器的运行状况探测配置了其他端口(例如80端口)作为负载均衡器检查后端服务器的健康状态的判断

    Elasticsearch的分布式架构、负载均衡、高可用以及容错性看这一篇就够了

    开箱即用,简单粗暴Elasticsearch天然支持分布式和集群,开箱即用,零配置,零改动。自动分片一个index默认5个primaryshard,那么我们创建一个document,他给我们分配到哪个shard...shard负载均衡假设我们有1个index,

    负载均衡最佳实践

    本书详述了mysql负载均衡最佳实践方法

    rabbitmq 负载均衡代码实现

    自动进行rabbitmq的多机调用,实现负载均衡,基于python3.6进行实现。

Global site tag (gtag.js) - Google Analytics