Apache+tomcat实现负载均衡

Apache+tomcat实现负载均衡 集群背景介绍 术语定义 服务软体是b/s或c/s结构的s部分,是为b或c提供服务的服务性软件系统。 服务硬体指提供计算服务的硬件、比如pc机、pc服务器。 服务实体通指服务软体和服务硬体。 客户端指接受服务实体服务的软件或硬件。 两大关键特性 集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性: 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。 两大能力 为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力: 负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。 两大技术 实现集群务必要有以下两大技术: 集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。 内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。 具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。 集群配置 从上图可知,由服务实体1、服务实体2和负载均衡器组成了一个集群。服务实体1和服务实体2参与对客户端的服务支持工作,均衡负载器为客户端维护集群的单一影像。集群实体间通过内部的通信网交流信息,这种交流机制一般采用组播协议。负载均衡器通过内部通信网探测各服务实体的心跳信息,服务实体间通过内部通信网完成任务资源的传播。可以看出,配置集群主要由配置服务实体和配置负载均衡器两部分组成。本文使用tomcat 5.5.20、apache 2.2.11配置集群环境。 开始配置集群: 1,软件列表: Apache:httpd-2.2.15-win32-x86-no_ssl.msi Tomcat:jakarta-tomcat-5.0.28.zip Jk2:mod_jk-1.2.28-httpd-2.2.3.so jk2是连接tomcat和apache的。 Jk2下载地址:tomcat官网—》Tomcat Connectors—》Browse Download Area—》jk—》binaries/--》win32/ --》选择版本下载。 注意:软件jk2对apache版本有版本支持要求,而apache和tomcat暂时没发现版本支持要求。 2,安装apache和tomcat软件,加入插件jk2: *安装apache时请注意80端口是否被占用(IIS等)。测试:http://127.0.0.1 是否是显示it works。 注意:apache不能正常启动,提示the requested operation has failed。解决办法: 运行-》cmd 进入到apache的bin目录。输入httpd.exe -w -n "Apache" -k start 会提示配置文件的具体那行出错。找起来就方便多了。注:命令里的"Apache"是系统服务里apache服务的名称。及时换成你当前使用的版本。 *Tomcat解压缩即可。我解压2个:tomcat1和tomcat2。 *jk2设置: A,把下载的 mod_jk-1.2.28-httpd-2.2.3.so 改名为 mod_jk2.so 放到apache的modules目录下. B,修改apache的conf目录下的httpd.conf,在文件最后加入一行: #加入mod_jk2.so模块 include conf\mod_jk2.conf C,在apache的conf目录下创建mod_jk2.conf文件,内容如下: # Load mod_jk2 module 这是配置jk2 LoadModule jk_module modules/mod_jk2.so # Where to find workers.properties 配置tomcat JkWorkersFile conf/workers.properties # Where to put jk logs 日志存放 JkLogFile logs/mod_jk2.log # Set the jk log level [debug/error/info] #1JkLogLevel info # Select the log format 日志格式 JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # Send JSPs for context / to worker named loadBalancer 拦截内容 JkMount /* loadBalancer D, jk2设置tomcat jk2的配置全在一个配置文件中,文件名为workers.properties,和apache 的 httpd.conf放在同一个目录下。以下是这个文件的内容: # # workers.properties START # # list the workers by name worker.list=tomcat1, tomcat2, loadBalancer 指定服务器和拦截器 # ------------------------ # First tomcat server START # ------------------------ worker.tomcat1.port=8010 对应ajp13的端口 worker.tomcat1.host=127.0.0.1 对应ip worker.tomcat1.type=ajp13 调用ajp13端口进行访问 # Specify the size of the open connection cache. #worker.tomcat1.cachesize # Specifies the load balance factor when used with # a load balancing worker. # Note: # ----> lbfactor must be > 0 # ----> Low lbfactor means less work done by the worker. worker.tomcat1.lbfactor=1 权重值,表示分多少给tomcat1服务器 # ------------------------ # Second tomcat server START # ------------------------ worker.tomcat2.port=8011 worker.tomcat2.host=127.0.0.1 worker.tomcat2.type=ajp13 # Specify the size of the open connection cache. #worker.tomcat2.cachesize # Specifies the load balance factor when used with # a load balancing worker. # Note: # ----> lbfactor must be > 0 # ----> Low lbfactor means less work done by the worker. worker.tomcat2.lbfactor=1 # ------------------------ # Load Balancer worker # ------------------------ # The loadbalancer (type lb) worker performs weighted round-robin # load balancing with sticky sessions. # Note: # ----> If a worker dies, the load balancer will check its state # once in a while. Until then all work is redirected to peer # worker. worker.loadBalancer.type=lb worker.loadBalancer.balanced_workers=tomcat1, tomcat2 # # workers.properties END # 对于jk2模块的负载均衡配置可参见相关站点,值得提的是jk2的负载均衡还支持权重分配等优秀功能。 3,修改tomcat相关端口号,在conf文件下server.xml文件中: 第一个tomcat1: tomcat服务端口 连接端口 ajp的连接端口 第二个tomcat2: 4,测试负载运行是否正常: 在tomcat1和tomcat2下弄两个相同页面不同内容的页面进行测试。主要看是否内容交替出现。 配置session同步: 修改tomcat1和tomcat2下server.xml文件: Tomcat1: 然后去掉标签的注释,再修改 Tomcat1: 去掉标签的注释,再修改 注意:只要tcpListenPort不相同,不占用即可。 实在不想编辑了,感兴趣请下载附件,谢谢

你可能感兴趣的:(负载均衡和集群)