Tomcat集群及负载均衡配置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Tomcat集群及负载均衡配置
在单一的服务器上执行Web应用程序有一些重大问题,当网站的请求量越来越大,单一服务器终究无法满足需要处理的负荷量,所以就显得有点力不从心;而且还存在的问题是会产生单点故障,如果该服务器宕掉,那么网站就无法运作。
不论是因为要有较佳的扩充性还是容错能力,我们都会想在一台以上的服务器上执行Web应用程序。
所以,这时候我们就需要用到集群这一门技术。
1术语介绍
1.1 集群
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。
在客户端看来,一个集群就像是一个服务实体,但事实上集群由一组服务实体组成。
与单一服务实体相比较,集群提供了以下两个关键特性: 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。
高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service 的警告。
在集群中,同样的服务可以由多个服务实体提供。
如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。
集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
1.2 负载均衡
负载的基础是集群,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同的硬件构成的计算机。
如一个提供Web 服务的集群,对外界看来是一个大Web服务器。
负载均即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
2常用负载均衡技术
常用手负载均衡技术有以下几种
HTTP重定向
DNS负载均衡
反向代理负载均衡
IP负载均衡(NAT)
直接路由
IP隧道
本文介绍的是第三种使用apahce+tomcat的反向代理的负载均衡,使用代理服务器可以将请求转发全内部的Web服务器,让代理服务器均匀地转发给多台内部web服务器之一上,从而达到负载均衡目的。
这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。
在负载均衡中Session共享有两种模式:session复制和粘性session。
下面对这两种模式进行介绍。
1)Session复制:在所有的Tomcat实例中都保有一份会话状态数据。
当一个
Tomcat实例宕掉时,由于至少还有另一个Tomcat实例保有一份会话状态数据,因为数据不会丧失。
但性能会有所降低。
2)粘性Session:粘性session表示来自同session的所有请求都由相同的
Tomcat实例来处理,这种情况下,如果Tomcat实例或所执行的服务器机器失效,也会丧失session数据(即等同于被迫于注销)。
即使在集群系统中还有其他Tomcat实例存活,也不会复制会话数据。
这样可以提高集群性能的一种方案,但不具备容错能力。
本文采用粘性session方式。
3集群架构图
图3-1集群架构图
4配置环境
Apache Http server 2.2.16
Tomcat 5.5.26(Tomcat6也一样)
JDK 1.6.21
各tomcat实例需在同一网段下
各tomcat实例的服务器时间一致
所有的session attributes必须实例java.io.Serializable接口
5配置过程
5.1 Apache配置
1.在代理服务器上安装Apache Http Server
2.2版本。
2.修改Apache配置文件\Apache2.2\conf\httpd.confTomcat配置,注释掉以
下内容:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
3.找到<IfModule dir_module></IfModule>加上index.jsp
4. 在文件的最下面加入
5.
设置apache2.2
的虚拟主机,先在conf/httpd.conf 中引入配置虚拟主机的
控制文件,将配置文件中默认的配置信息放开即可。
6. 修改conf/extra/httpd-vhosts.conf 文件,在最下面加入虚拟主机的配置
信息
其中的的virtualHost*:80为HttpServer 监听端口。
ServerAdmin :管理员邮箱
ServerName :服务器名称
ServerAlias :配置服务器域名或IP ,如果有多个域名或者域名和IP 同时使用,则使用空格隔开。
如果只配置了域名,则使用IP 也不能访问。
这里面的127.0.0.1为Tomcat 实例的IP
8009为AJP 端品,注意不是Tomcat 的监听端口。
具体查看tomcat/conf/server.xml 里面的:
对应的为这里面的port 端口。
Route :为Tomcat
实例标识名,必须唯一。
5.2
Tomcat 配置
修改每个Tomcat 实例的配置文件。
Tomcat/conf/server.xml
1. 配置Engine 。
Tomcat 默认的engine 配置为
修改为:
里面的jvmRoute 对应于前面的配置route 。
2. 配置AJP Connector ,这里是apache 和Tomcat 链接的关键,前台的apache
就是通过AJP 协议与Tomcat 进行通信的,以完成负载均衡作用。
将Server.xml 中缺省配置的端口改在和在前面apache 里面配置的一样。
3. 配置Cluster,打开Tomcat 的server.xml ,默认的cluster 配置如下,
默认被注释掉了,去掉注释,即<cluster>标签里面的全部内容。
注意:如果要在同一台电脑上部署需要修改Tomcat的启动端口、关闭端口、AJP Connector端口、Cluster里面的tcpLlistenPort端口。
4.在web工程的web.xml里面加入<distributable/>。