tomcat集群

来源:互联网 发布:sql注入测试工具有哪些 编辑:程序博客网 时间:2024/06/02 05:10

tomcat集群

 什么是集群 

集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但 事实上集群由一组服务实体组成。 


集群的特性 

与单一服务实体相比较,集群提供了以下两个关键特性: 
1,可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。 

2, 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。 


为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力: 
(1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 
(2) 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服 务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 
负载均衡 和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。 


 集群的分类 


集群主要分成三大类:


高可用集群(High Availability Cluster/HA)

负载均衡集群(Load Balance Cluster)

高性能计算集群(High Performance Computing Cluster/HPC) 


(1) 高可用集群(High Availability Cluster/HA):一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。常见的就是2个节点做 成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机",高可用集群解决的是保障用户的应用程序持续对外提供服 务的能力。 
(2) 负载均衡集群(Load Balance Cluster):负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到将工作负载分发。这样的计算机集群有时也被称为服务器群(Server Farm)。一般web服务器集群、数据库集群 和应用服务器集群都属于这种类型。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器 上。从检查其他服务器状态这一点上 看,负载均衡和容错集群很接近,不同之处是数量上更多。 
(3) 高性能计算集群(High Performance Computing Cluster/HPC):高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。这类集群致力于提供单个计算机所不能提供的强大的计算能力 


Tomcat集群配置的优缺点 
通常配置tomcat集群有三种方式:使用DNS轮询,使用apache r-proxy代理方式,使用apache mod_jk方式。 
(1)DNS轮询的缺点:当集群中某台服务器停止之后,用户由于dns缓存的缘故,便无法访问服务,必 须等到dns解析更新,或者这台服务器重新启动。还有就是必须把集群中的所有服务端口暴露给外界,没有用apache做前置代理的方式安全,并 且占用大量公网IP地址,而且tomcat还要负责处理静态网页资源,影响效率。优点是集群配置最简单,dns设置也非常简单。 
(2)R- proxy的缺点:当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存 在这个问题。 
(3)mod_jk方式的优点是,Apache 会自动检测到停止掉的tomcat,然后不再发请求过去。缺点就是,当停 止掉的tomcat服务器再次启动的时候,Apache检测不到,仍然不会转发请求过去。 
R-proxy和mod_jk的共同优点是.可 以只将Apache置于公网,节省公网IP地址资源。可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和 servlet等动态请求。共同缺点是:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。R-proxy和 mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。这三种方式对实现最佳负载均衡都有一定不足,mod_jk相对好些,可以通过设置lbfactor参数来分配请求任务。 


Apache+Tomcat 
Apache+ Tomcat整合的目标: 
(1) 可以提高整体web服务器性能,将动态页面交给tomcat处理,将静态文件交给apache处理,可以大大提高服务器的静态文件处理性能。 
(2) 可以实现web服务器的负载均衡,服务器可采用集群的方式来响应客户端请求。Apache的作用是做代理,将请求分发给各个tomcat处理,tomcat作为集群服务器处理请求。这样可以提高整体web服务器性能和访问量。 

(3) 可以实现无缝升级应用程序和容错处理,在tomcat集群中如果有一个tomcat挂掉了,用户还可以通过其他tomcat来进行访问,同时如果我们想升级应用程序,我们可以通过升级每个tomcat的应用程序来实现升级,在升级的过程中不会影响web服务器的访问。


在Windows实现Tomcat+Nginx 负载均衡配置

 

一、首先需要下载tomcat及nginx,然后解压。


nginx  点击下载:http://download.csdn.net/download/qq_23994787/10008795


apache-tomcat  点击下载:http://download.csdn.net/download/qq_23994787/10008803


 

然后解压到某个文件夹里面。

tomcat 需要有2个或者2个以上,不然体现不了集群,所有把解压的Tomcat复制一份,重新命名。

我是这样的:

tom-7.0.70-1
tom-7.0.70-2

nginx-1.11.2

 

二、配置Tomcat

 

1、修改Tomcat端口

因为Tomcat使用了端口,如果相同的端口,后启动的tomcat会启动不了,提示端口占用。所以先修改端口。

由于开发也需要一个Tomcat,所以我把集群的2个Tomcat的端口都改了。

一个是:8081,对应tom-7.0.70-1

另一个是8082,对应tom-7.0.70-2

 

配置如下:

D:\tom-7.0.70-1\conf\server.xml

修改关闭端口

Xml代码  收藏代码
  1. <Server port="8015" shutdown="SHUTDOWN">  

 

修改请求端口

Xml代码  收藏代码
  1. <Connector port="8081" protocol="HTTP/1.1"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />  

 

D:\tom-7.0.70-2\conf\server.xml

Xml代码  收藏代码
  1. <Server port="8025" shutdown="SHUTDOWN">  

 

Xml代码  收藏代码
  1. <Connector port="8082" protocol="HTTP/1.1"  
  2.                connectionTimeout="20000"  
  3.                redirectPort="8443" />  

 

2、修改 jvmRoute

同样是在文件

D:\tom-7.0.70-1\conf\server.xml

D:\tom-7.0.70-2\conf\server.xml

找到Engine 

Xml代码  收藏代码
  1. <Engine name="Catalina" defaultHost="localhost" >  

 在后面加上 jvmRoute,如:

D:\tom-7.0.70-1\conf\server.xml配置下如

Xml代码  收藏代码
  1. <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">  

 

D:\tom-7.0.70-2\conf\server.xml配置如下

 

Xml代码  收藏代码
  1. <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">  

 

 

三、修改nginx配置文件nginx.conf

 

1、找到nginx.conf文件,我的在D:\nginx-1.11.2\conf\nginx.conf

 

2、在http{……}里加上upstream,如下 

 

Xml代码  收藏代码
  1. upstream tomcatCluster{# tomcatCluster和proxy_pass保持一样  
  2.     #解决session的问题  
  3.     ip_hash;#加上这个,解决Session每次访问页面都不一样,加上就一样了。  
  4.           
  5.        #这里是tomcat的地址,weight越大,访问机率越大。  
  6.     server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;  
  7.     server 127.0.0.1:8082 weight=2 fail_timeout=5s max_fails=1;  
  8.     }  

 

server:配置tomcat服务器请求的地址,2台Tomcat服务就配置2个server

 

3、修改location / {……}

默认是这个的:

Xml代码  收藏代码
  1. location / {  
  2.             root   html;  
  3.             index  index.html index.htm;  
  4.         }  

 

修改成这样:

Xml代码  收藏代码
  1. location / {  
  2.             #root   html;  
  3.         proxy_pass http://tomcatCluster;  
  4.             #index  index.html index.htm;  
  5.         proxy_set_header Host $host;  
  6.             proxy_set_header X-Real-IP $remote_addr;  
  7.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  8.             proxy_connect_timeout       1;  
  9.             proxy_read_timeout          1;  
  10.             proxy_send_timeout          1;   
  11.         }  

 

最简单的配置就是:

Xml代码  收藏代码
  1. location / {  
  2.      proxy_pass http://tomcatCluster;  
  3. }  

 tomcatCluster 对应upstream后的命名。

 

下面的配置可以解决2个Tomcat服务器集群,当一台服务器挂掉(宕机)后,请求变得很慢的问题。

(Tomcat集群一台服务器挂掉后请求变慢解决方案)

Xml代码  收藏代码
  1. proxy_connect_timeout       1;  
  2. proxy_read_timeout          1;  
  3. proxy_send_timeout          1;   

 

 

四、测试

 

1、在Tomcat部署一个JavaWeb项目,配置一个index.jsp页面,方便查看集群后请求进入的是哪个Tomcat服务器。其实这步可以省略,但有更加好。

 

index.jsp代码如下:

Html代码  收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>学习项目</title>  
  8. </head>  
  9. <body>  
  10.     <div style="color: red;font-weight: bold;">study项目。</div>  
  11.     <%   
  12.   //HttpSession session = request.getSession(true);   
  13.   System.out.println(session.getId());   
  14.   out.println("<br> SESSION ID:" + session.getId()+"<br>");   
  15. %>   
  16.       
  17. </body>  
  18. </html>  

 

2、分别启动2个Tomcat

 

分别进行D:\tom-7.0.70-1\bin、D:\tom-7.0.70-2\bin目录,点击startup.bat启动Tomcat

 

3、启动Nginx服务器

使用Windows命令行启动

(1)进入D盘:d:

(2)进入D:\nginx-1.11.2目录:cd nginx-1.11.2

(3)启动服务:start nginx (启动一闪而过,但打开进程管理器能看到是已经启动的)

 

关闭服务的命令:nginx -s stop

重新加载的命令:nginx -s reload,修改配置文件后,可以使用该命令直接加载,不需要重启。

 

4、在浏览器输入地址测试

 

Nginx监听的是80端口,浏览器直接输入:http://localhost/

如果出现Tomcat的页面,就证明成功。



 

由于我在Tomcat部署了项目,直接请求项目:http://localhost/study/

出现:



 



 显示的信息是前面提过的index.jsp页面

其中后缀 jmv1,jvm2对应Tomcat配置的jvmRoute,这样可以清晰看出请求的是哪个Tomcat服务器。

 

另外说明的是:

 

Xml代码  收藏代码
  1. server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;  

 里面的weight表示权重,权重越大,请求机率越大

 

127.0.0.1:8081设置为1,127.0.0.1:8082设置也为1,请求的机率几乎是请求完jvm1,再请求就是jvm2

127.0.0.1:8081设置为1,127.0.0.1:8082设置为2,请求的机率是请求2次8082才会请求一次8081

127.0.0.1:8081设置为1,127.0.0.1:8082设置为5,请求的机率是几乎所有请求都是8082

更多请自己测试吧。




原创粉丝点击