Apache Tomcat负载平衡 mod_jk配置workers.properties
集群(Cluster)
所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。负载均衡(Load Balance)
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。
特点
(1)高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。(2)高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。
(3)负载平衡(LB)。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)
高可用集群( High Availability Cluster)
常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机".高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)
负载均衡集群(Load Balance Cluster)
科学计算集群(High Performance Computing Cluster)
1. 负载平衡:
2. 状态复制(集群):先进行负载平衡,再在各服务器间复制应用状态。
一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据;
另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据。
对于tomcat的集群有两种方式,这个主要是针对session而言的。
一种就是sticky模式,即黏性会话模式。所谓sticky模式就是说同一个用户的访问请求都被派送到同一个tomcat实例上,这样我们就无须在多台服务器之间实现session共享了,这是其好处,不好的地方就是不能实现failureover了,一但用户访问的机器挂掉,那么其session就会丢失。
表示从同一窗口发来的请求都将有集群中的同一个tomcat进行处理。配置方式是在上面workers.properties文件中
Xml代码
worker.lbcontroller.sticky_session=True
worker.lbcontroller.sticky_session=True
粘性session的好处在不会在不同的tomcat上来回跳动处理请求,但是坏处是如果处理该session的tomcat崩溃,那么之后的请求将由其 他tomcat处理,原有session失效而重新新建一个新的session,这样如果继续从session取值,会抛出nullpointer的访问 异常。
mod_jk配置workers.properties
1 :true;0:false
worker.controller.sticky_session=1
worker.controller.sticky_session_force=0
一次请求中 session 只会在一个tomcat上,当该tomcat奔溃后,请求会跳转到其他tomcat上,但是其session不会复制到跳转后的tomcat上
worker.controller.sticky_session=0
worker.controller.sticky_session_force=0
每次请求都会跳转到其他tomcat上,(如果有AB两个tomcat负载均衡值都为1,第一次请求A session为A1,第二次请求跳转到B session B2,第三次又回到A session为 A1 和 A3,第四次跳转到B session 为 B2 和 B4
worker.controller.sticky_session=1
worker.controller.sticky_session_force=1
一次请求中 session 只会在一个tomcat上,当该tomcat奔溃后,服务端会返回Service Temporarily Unavailable:The server is
temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
worker.controller.sticky_session=0
worker.controller.sticky_session_force=1
每次请求都会跳转到其他tomcat上,(如果有AB两个tomcat负载均衡值都为1,第一次请求A session为A1,第二次请求跳转到B session B2,第三次又回到A session为A3,第四次跳转到B session B4,即每次跳转都不会带上session,也不会保留原有的session.
另外一种就是session复制模式了。session复制模式就可以很好的解决failureover的问题,即使某一台web服务器挂掉了,用户的请求还会被负载到其他的web服务器上,而且session也被复制了,这样对用户而言就像是在同一台机器上操作一样,不好的地方就是session复制需要系统资源和网络的开销,尤其是当web服务器多的时候或session里存储的数据量大的时候,这点将会比较的明显(不过自己还没有做这方面的测试)。
针对这两种方式的弊端和好处,我们可以采用将两种方式结合的方式来达到更好的效果,那就是sticky+session复制模式了。用户的请求按照 sticky方式被分发到同一个web服务器上,同时tomcat在后台做异步复制(非同步)session到其他web服务器,这样我们使用 sticky的简便性,同时又有了一定的容错能力。