精华内容
下载资源
问答
  • Tomcat集群搭建超详细

    千次阅读 2019-09-02 08:32:15
    Tomcat集群搭建超详细 2017年10月26日 22:48:47点化人生阅读数 13888更多 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TOMCAT 2 1.6...

    Tomcat集群搭建超详细

    2017年10月26日 22:48:47 点化人生 阅读数 13888更多


    目录 
    TOMCAT集群 1 
    1 集群 1 
    1.1 什么是集群 1 
    1.2 集群的特性 1 
    1.3 集群的分类 1 
    1.4 TOMCAT集群配置的优缺点 2 
    1.5 APACHE+TOMCAT 2 
    1.6 环境说明 2 
    2 软件安装 3 
    2.1 安装说明 3 
    2.2 JDK安装 3 
    2.3 APACHE安装 4 
    2.4 TOMCAT安装 4 
    3 集群配置 6 
    3.1 APACHE+MOD_JK+TOMCAT配置 6 
    3.2 测试 7 
    4 SESSION复制 8 
    4.1 SESSION复制配置 8 
    4.2 测试 10 




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

    1.2 集群的特性 
    与单一服务实体相比较,集群提供了以下两个关键特性: 
    1,可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。 
    2, 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。 
    为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力: 
    (1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 
    (2) 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服 务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 
    负载均衡 和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。 

    1.3 集群的分类 
    集群主要分成三大类:高可用集群(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):高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。这类集群致力于提供单个计算机所不能提供的强大的计算能力 

    1.4 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参数来分配请求任务。 

    1.5 Apache+Tomcat 
    Apache+ Tomcat整合的目标: 
    (1) 可以提高整体web服务器性能,将动态页面交给tomcat处理,将静态文件交给apache处理,可以大大提高服务器的静态文件处理性能。 
    (2) 可以实现web服务器的负载均衡,服务器可采用集群的方式来响应客户端请求。Apache的作用是做代理,将请求分发给各个tomcat处理,tomcat作为集群服务器处理请求。这样可以提高整体web服务器性能和访问量。 
    (3) 可以实现无缝升级应用程序和容错处理,在tomcat集群中如果有一个tomcat挂掉了,用户还可以通过其他tomcat来进行访问,同时如果我们想升级应用程序,我们可以通过升级每个tomcat的应用程序来实现升级,在升级的过程中不会影响web服务器的访问。 

    下面就是以1个apache+2个tomcat通过mod_jk配置集群。 

    1.6 环境说明 
    所需软件包: 
    JDK:jdk-6u7-linux-i586.bin 
    Apache:httpd-2.2.19.tar.gz 
    Tomcat:apache-tomcat-7.0.16.tar.gz 
    Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so 

    服务器: 
    服务器系统版本信息:CentOS release 5.3 
    服务器IP:172.30.4.6 

    2 软件安装 
    2.1 安装说明 
    将下载好的软件保存到服务器上:目录为/usr/tomcattest,也可以建立其他文件夹保存。 
    JDK:jdk-6u7-linux-i586.bin 
    Apache:httpd-2.2.19.tar.gz 
    Tomcat:apache-tomcat-7.0.16.tar.gz 
    Mod_jk:mod_jk-1.2.31-httpd-2.2.x.so 

    2.2 JDK安装 

    Java代码  

    1. 1)  拷贝软件包  
    2. [root@172-30-4-6 ~]# mkdir /usr/java     #创建jdk安装目录  
    3. [root@172-30-4-6 ~]# cd /usr/tomcattest   #进入jdk软件包目录  
    4. [root@172-30-4-6 tomcattest]# cp jdk-6u7-linux-i586.bin /usr/java  #将jdk安装文件拷贝到安装目录  
    5.   
    6. 2)  安装JDK  
    7. [root@172-30-4-6 tomcattest]# cd /usr/java  #进入jdk安装目录  
    8. [root@172-30-4-6 java]# ./ jdk-6u7-linux-i586.bin   #执行安装jdk文件  
    9.   
    10. 3)  配置环境变量  
    11.  [root@172-30-4-6 java] vim /etc/profile   #修改系统环境变量文件  
    12. #添加内容如下:  
    13. export JAVA_HOME=/usr/java/jdk1.6.0_02  
    14.          export JAVA_BIN=/usr/java/jdk1.6.0_02/bin  
    15.         export PATH=$PATH:$JAVA_HOME/bin  
    16.         export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
    17.             export JAVA_HOME JAVA_BIN PATH CLASSPATH  
    18. [root@172-30-4-6 profile]# cd /usr/bin     
    19.     [root@172-30-4-6 profile]# ln -s -f /usr/java/jdk1.6.0_02/jre/bin/java   
    20.      [root@172-30-4-6 profile]# ln -s -f /usr/java/jdk1.6.0_02/bin/javac    
    21.   
    22. 4)  测试  
    23. [root@172-30-4-6 profile]# java -version         #查看java安装版本  
    24. 显示结果:java version "jdk1.6.0_02"  



    2.3 Apache安装 

    Java代码  

    1. 1)  解压  
    2. [root@172-30-4-6 ~]# cd /usr/tomcattest   #进入apache软件包目录  
    3. [root@172-30-4-6 tomcattest]# tar -zxvf httpd-2.2.19.tar.gz  #解压apache安装文件  
    4.   
    5. 2)  安装  
    6. [root@172-30-4-6 tomcattest]# cd httpd-2.2.19      #进入apache安装目录  
    7. [root@172-30-4-6 httpd-2.2.19]# ./configure --prefix=/usr/apache   # configure参数可以自己根据需要修改,可以使用—help获得相关命令参数信息。  
    8. [root@172-30-4-6 httpd-2.2.19]# make    #编译  
    9. [root@172-30-4-6 httpd-2.2.19]# make install   #安装  
    10.   
    11. 3)  启动  
    12. [root@172-30-4-6 httpd-2.2.19]# cd /usr/apache/  #进入apache安装目录  
    13. [root@172-30-4-6 apache]# ./bin/apachectl start   #启动apache服务器  
    14.       
    15. 4)  测试  
    16. 访问apache服务器:http://172.30.4.6  
    17. 响应结果:It works!  #apache服务器安装成功  



    2.4 Tomcat安装 

    Java代码  

    1. 1.  解压  
    2. [root@172-30-4-6 ~]# cd /usr/tomcattest   #进入tomcat软件包目录  
    3. [root@172-30-4-6 tomcattest]# tar –zxvf apache-tomcat-7.0.16.tar.gz  #解压tomcat安装包  
    4.   
    5. 2.  安装  
    6. [root@172-30-4-6 tomcattest]# cp -P apache-tomcat-7.0.16 /usr/tomcat1  #拷贝tomcat1  
    7. [root@172-30-4-6 tomcattest]# cp -P apache-tomcat-7.0.16 /usr/tomcat2  #拷贝tomcat2  
    8.       
    9. 3.  配置  
    10. 因为该例子是在同一台服务器上安装两个tomcat服务器,避免服务器端口使用冲突,tomcat1端口采用默认配置,tomcat2端口需要重新配置。  
    11. [root@172-30-4-6 tomcattest]# cd /usr/tomcat2/conf   #进入tomcat2配置目录,可修改server.xml配置文件  
    12. [root@172-30-4-6 tomcattest]# cd /usr/tomcat1/conf   #进入tomcat1配置目录,可修改server.xml配置文件  
    13. [root@172-30-4-6 conf]# vim server.xml        #修改tomcat2配置文件  
    14. (1) 修改server端口号  
    15. #tomcat1 默认配置  
    16. <Server port="8005" shutdown="SHUTDOWN">  
    17. #tomcat2 修改端口号为9005  
    18. <Server port="9005" shutdown="SHUTDOWN">  
    19.   
    20. (2) 修改HTTP connector端口号  
    21. #tomcat1默认配置  
    22. <Connector port="8080" protocol="HTTP/1.1"   
    23.                connectionTimeout="20000"   
    24.                redirectPort="8443" />  
    25.     #tomcat2 修改端口号为9080  
    26.     <Connector port="9080" protocol="HTTP/1.1"   
    27.                connectionTimeout="20000"   
    28.                redirectPort="8443" />  
    29.   
    30. (3) 修改 AJP connector 端口号  
    31. #tomcat1 默认配置  
    32. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
    33. #tomcat2 修改端口号9009  
    34. <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />  
    35.   
    36. (4) 修改 engine 名称  
    37. #tocmat1 修改jvmRoute=”tomcat1”  
    38. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">  
    39. #tocmat2 修改jvmRoute=”tomcat2”  
    40. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">  
    41.   
    42. 4.  启动  
    43. [root@172-30-4-6 tomcattest]# /usr/tomcat1/bin/startup.sh    #启动tomcat1  
    44. [root@172-30-4-6 tomcattest]# /usr/tomcat1/bin/startup.sh    #启动tomcat2  
    45.   
    46. 5.  测试  
    47. #tomcat1测试  
    48. http://172.30.4.6:8080  
    49. #tomcat2 测试  
    50. http://172.30.4.6:9080  
    51.   
    52. 结果:显示tomcat首页  



    3 集群配置 
    3.1 apache+mod_jk+tomcat配置 

    Java代码  

    1. 1,  httpd.conf的配置   
    2. [root@172-30-4-6 ~]# cd /usr/apache/conf         #进入apache配置目录  
    3. [root@172-30-4-6 conf]# vim httpd.conf         #修改httpd.conf配置文件  
    4.         Include conf/mod_jk.conf            #增加include配置  
    5.   
    6. 2,  mod_jk.conf的配置  
    7. [root@172-30-4-6 conf]# touch mod_jk.conf      #创建mod_jk.conf文件  
    8. [root@172-30-4-6 conf]# vim mod_jk.conf       #修改mod_jk配置  
    9. #mod_jk 配置mod_jk包  
    10. LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so  
    11. #workers 配置工作负责文件  
    12. JkWorkersFile conf/workers.properties  
    13. #jk log 配置jk日志文件  
    14. JkLogFile logs/mod_jk.log  
    15. #jk log leve 配置日志级别  
    16. JkLogLevel info  
    17. # 配置jk日志内存共享  
    18. JkShmFile logs/mod_jk.shm  
    19. #balancer 配置负载均衡模式  
    20. JkMount /*.jsp balancer  
    21.   
    22. [root@172-30-4-6 conf]# cp /usr/tomcattest/mod_jk-1.2.31-httpd-2.2.x.so /usr/apache/modules    #将mod_jkb包拷贝到apache的modules目录下  
    23.   
    24. 3,  workers.properties的配置  
    25. [root@172-30-4-6 conf]# touch workers.properties      #创建worker.properties文件  
    26. [root@172-30-4-6 conf]# vim workers.properties  
    27. #tomcat1的配置  
    28. worker.tomcat1.port=8009  
    29. worker.tomcat1.host=172.30.4.6  
    30. worker.tomcat1.reference=worker.template  
    31. worker.tomcat1.activation=A  
    32. #worker.tomcat1.lbfactor=1  
    33. #tomcat2 的配置  
    34. worker.tomcat2.port=9009  
    35. worker.tomcat2.host=172.30.4.6  
    36. worker.tomcat2.reference=worker.template  
    37. worker.tomcat2.activation=A  
    38. #worker.tomcat2.lbfactor=1  
    39. worker.list=balancer  
    40. #balancer 负载配置  
    41. worker.balancer.type=lb  
    42. worker.balancer.balance_workers=tomcat1,tomcat2  
    43. worker.balancer.sticky_session=1  
    44. #tempalte 负载模板配置  
    45. worker.template.type=ajp13  



    3.2 测试 
    1, 创建测试项目 
    新建一个项目:项目名称都为TestTomcat 
    新建一个jsp页面:名称为testjsp.jsp 

    Java代码  

    1. <%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
    2.   
    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. <%  
    11. System.out.println(new Date()+"=============tomcat1=================");  
    12. %>  
    13. tomcat1=======<%=new Date()%>  
    14. </body>  
    15. </html>  



    2, 发布项目 
    (1)将测试项目打包,包名为TestTomcat.war,将测试项目发布到tomcat1服务器上 。 
    (2)修改项目testjsp.jsp文件 

    Java代码  

    1. <%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
    2.   
    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. <%  
    11. System.out.println(new Date()+"=============tomcat2=================");  
    12. %>  
    13. tomcat2=======<%=new Date()%>  
    14. </body>  
    15. </html>  



    (3)将修改后的项目TestTomcat.war发布到tomcat2服务器上 

    3, 测试集群 
    分别在不同的客户端上访问apache代理服务器。 
    http://172.30.4.6/TestTomcat/testjsp.jsp 

    访问结果: 
    tomcat2=======Wed Jun 29 13:25:03 CST 2011 
      或者 
    tomcat1======Wed Jun 29 13:26:03 CST 2011 

    4 Session复制 
    在Tomcat集群中实现session同步,可以通过session共享和复制来实现,下面以session复制来实现session同步。 
    4.1 Session复制配置 
    1, Tomcat中server.xml的配置 
    [root@172-30-4-6 ~]# cd /usr/tomcat1/conf       #进入tomcat配置目录 
    [root@172-30-4-6 conf]# vim server.xml          #修改server.xml配置 
    # 在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">后面加上以下配置: 

    Java代码  

    1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"    
    2.                  channelSendOptions="8">    
    3.           
    4.           <Manager className="org.apache.catalina.ha.session.DeltaManager"    
    5.                    expireSessionsOnShutdown="false"    
    6.                    notifyListenersOnReplication="true"/>    
    7.     
    8.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
    9.             <Membership className="org.apache.catalina.tribes.membership.McastService"    
    10.                         address="228.0.0.4"    
    11.                         port="45564"    
    12.                         frequency="500"    
    13.                         dropTime="3000"/>    
    14.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"    
    15.                       address="auto"   #默认为auto,改为自己的IP  
    16.                       port="4000"    #同一台服务器上的tomcat必须修改为不同的端口,tomcat1修改为4001,tomcat2修改为4002。  
    17.                       autoBind="100"    
    18.                       selectorTimeout="5000"    
    19.                       maxThreads="6"/>    
    20.     
    21.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">    
    22.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>    
    23.             </Sender>    
    24.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>    
    25.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>    
    26.           </Channel>    
    27.     
    28.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"    
    29.                  filter=""/>    
    30.           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>    
    31.     
    32.           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"    
    33.                     tempDir="/tmp/war-temp/"    
    34.                     deployDir="/tmp/war-deploy/"    
    35.                     watchDir="/tmp/war-listen/"    
    36.                     watchEnabled="false"/>    
    37.     
    38.           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>    
    39.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>    
    40.         </Cluster>  



    #分别给集群中每个tomcat在Engine后添加cluster配置,需要修改红色部分的配置: 
    address=”172.30.4.6”   #本机IP地址 
    port=”4001”  #同一机器需要修改端口号,tomcat1为4001,tomcat2为4002 

    2, Tomcat应用项目中web.xml的配置 
    [root@172-30-4-6 ~]# cd /usr/tomcat1/webapps   #进入到web应用项目中 
    [root@172-30-4-6 webapps]# vim /TestTomcat/WEB-INF/web.xml     #修改web.xml 
    #在web.xml文件中加入 

    Java代码  

    1. <!--此应用将与群集服务器复制Session-->  
    2. <distributable/>  




    4.2 测试 
    1, 修改项目文件 
    [root@172-30-4-6 ~]# cd /usr/tomcat1/webapps   #进入到web应用项目中 
    [root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp     #修改testjsp.jsp 

    Java代码  

    1. <%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
    2.   
    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. <%  
    11. System.out.println(new Date()+"=============tomcat1=================");  
    12. session.setAttribute("name", "tomcat1");  
    13. %>  
    14. tomcat1=======<%=new Date()%>===<%=session.getId() %>===<%=session.getAttribute("name") %>  
    15. </body>  
    16. </html>  



    [root@172-30-4-6 ~]# cd /usr/tomcat2/webapps   #进入到web应用项目中 
    [root@172-30-4-6 webapps]# vim /TestTomcat/ testjsp.jsp     #修改testjsp.jsp 

    Java代码  

    1. <%@ page language="java" import="java.util.Date"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
    2.   
    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. <%  
    11. System.out.println(new Date()+"=============tomcat2=================");  
    12. %>  
    13. tomcat2=======<%=new Date()%>===<%=session.getId() %>===<%=session.getAttribute("name") %>  
    14. </body>  
    15. </html>  



    2, 测试 
    (1) 访问http://172.30.4.6/TestTomcat/testjsp.jsp 
    页面显示结果为: 
    tomcat1===Thu Jun 30 11:24:10 CST 2011==27E35C1389F5595A17F8B5FD00561EDA.tomcat1===tomcat1 
    (2) 关闭tomcat1 
    [root@172-30-4-6 ~]# /usr/tomcat1/bin/shutdown.sh 

    (3) 访问http://172.30.4.6/TestTomcat/testjsp.jsp 
    页面显示结果为: 
    tomcat2==Thu Jun 30 11:37:42 CST 2011===605087B0015E978752640DB389B874A2.tomcat2===tomcat1 
    #证明session复制成功 

    展开全文
  • Linux平台Apache高可用双机集群Tomcat负载均衡集群配置手册[定义].pdf
  • NULL 博文链接:https://jlwangjinshuang-163-com.iteye.com/blog/1098665
  • Tomcat集群(二)

    2017-10-28 17:09:52
    搭建完成,接下来我们用Tomcat集群(一)的成果继续操作 IP : 192.168.1.241 OS: CentOS 6.8 3、安装 Redis 如有疑惑请查看我 Redis专栏 3.1 下载 Download , 这里我使用的版本是 redis-...

    1、介绍

    本文将通过Redis完成2个Tomcat之间共享Session。

    2、准备工作

    这里默认您已经将 Tomcat集群(一) 搭建完成,接下来我们用Tomcat集群(一)的成果继续操作

    IP : 192.168.1.241
    OS: CentOS 6.8

    3、安装 Redis

    如有疑惑请查看我 Redis专栏

    3.1 下载

    Download, 这里我使用的版本是 redis-3.2.9.tar.gz

    3.2 参考官网

    安装 Redis 官网操作成功后继续往下看

    这里写图片描述

    3.2 Redis 配置

    3.2.1 编辑redis.conf

    进入 Redis 解压后目录修改 redis.conf 文件的2处配置

    这里写图片描述

    3.2.2 设置 Redis 密码

    Redis默认没有密码,如果不设置密码 Tomcat将抛出认证异常的错误

    这里写图片描述

    3.2.3 设置外网访问

    请将 bind 后面的IP地址换成您真实 Redis服务的地址

    这里写图片描述

    4、配置 tomcat-8071

    您如果不明白 tomcat-8071 指的什么,请回Tomcat集群(一)

    4.1 修改 context.xml

    在 tomcat-8071/conf 目录. context.xml 修改后的完整配置如下,
    注; host、port、password改为真实Redis的信息

    <?xml version='1.0' encoding='utf-8'?>
    <Context>
       <WatchedResource>WEB-INF/web.xml</WatchedResource>
       <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
       <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
                host="192.168.1.241"  
                port="6379"  
                password="123456"
                database="0"  
                maxInactiveInterval="60" /> 
    </Context>

    这里写图片描述

    5、配置 tomcat-8072

    您如果不明白 tomcat-8072 指的什么,请回Tomcat集群(一)

    5.1 修改 context.xml

    在 tomcat-8072/conf 目录. context.xml 修改后的完整配置如下,
    注; host、port、password改为真实Redis的信息

    <?xml version='1.0' encoding='utf-8'?>
    <Context>
       <WatchedResource>WEB-INF/web.xml</WatchedResource>
       <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
       <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
                host="192.168.1.241"  
                port="6379"  
                password="123456"
                database="0"  
                maxInactiveInterval="60" /> 
    </Context>

    这里写图片描述

    6、上传 jar

    链接:http://pan.baidu.com/s/1nvcHOE1 密码:it1e

    将网盘中的3个jar放到 tomcat-8071 和 tomcat-8072 的 lib 目录下,至此共享Session全部结束

    7、Nginx

    如果不明白启动哪个 Nginx 请回到 Tomcat集群(一)

    7.1 启动

    启动 Nginx 验证Session是否在两个Tomcat之间共享

    Hero鹏,一个伟大的名字

    如有疑问或是吐槽者,都可以联系我,

    HomePage: www.crazyboy2016.com
    Email: wangjianpeng228@163.com
    GitHub: wangjianpeng2016
    Blog: Hero鹏

    展开全文
  • nginx双机高可用及Tomcat集群负载均衡 ********试验环境及常用命令******************** ---》试验机器 192.188.32.83 tomcat1 192.188.32.55 tomcat2 ---》nginx linux下安装 参考 ...
    nginx双机高可用及Tomcat集群负载均衡
    

    ********试验环境及常用命令********************
    ---》试验机器
    192.188.32.83 tomcat1
    192.188.32.55 tomcat2

    ---》nginx linux下安装
    参考 http://limaoyuan.iteye.com/blog/904352

    注意:其实把pcre-devel-7.8-3.1.el6.i686.rpm(在cd安装盘上找)安装过去就能正确编译。
    ---》tomcat 安装(略)

    ---》启动关闭tomcat服务器
    /usr/local/apache-tomcat-6.0.32/bin/startup.sh
    /usr/local/apache-tomcat-6.0.32/bin/shutdown.sh
    ---》配置nginx文件
    vi /usr/local/nginx/conf/nginx.conf
    ---》启动nginx
    /usr/local/nginx/sbin/nginx
    ---》关闭nginx
    关闭nginx
    # ps -ef |grep nginx
    root 3462 1 0 13:07 ? 00:00:00 nginx: master process ./nginx
    nobody 3463 3462 0 13:07 ? 00:00:00 nginx: worker process
    root 3467 31523 0 13:08 pts/1 00:00:00 grep nginx
    # kill 3462

    ******单nginx 配置tomcat集群(单机)负载均衡************
    参考:http://ari.iteye.com/blog/833153

    ******单nginx 配置tomcat集群(多机器)负载均衡**********
    ---》分别在两台试验机器上Tomcat web服务器
    分别修改两套tomcat的ROOT/index.html ,在<body>中加入
    <h2>from tomcat1: 192.188.32.83</h2>
    <h2>from tomcat2: 192.188.32.85</h2>
    便于观察。

    ---》在192.188.32.83上部署nginx ,配置参考

    #user nobody;
    user root root;
    worker_processes 4;

    #error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;

    #pid logs/nginx.pid;


    events {
    #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue
    use epoll;
    worker_connections 1024;
    }


    http {
    include mime.types;
    default_type application/octet-stream;

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log logs/access.log main;

    sendfile on;
    #tcp_nopush on;

    #keepalive_timeout 0;
    keepalive_timeout 65;

    #gzip on;

    upstream tomcat {
    server 192.188.32.83:8080;
    server 192.188.32.55:8080;
    }

    server {
    listen 80;
    server_name 192.188.32.83;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
    root html;
    index index.html index.htm;
    proxy_pass http://tomcat;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    }
    }

    ---》测试
    测试一:启动 nginx\tomcat1\tomcat2
    访问http://192.188.32.83/ 观察,会轮询83和85两台服务器。
    测试二:关闭 tomcat1
    访问http://192.188.32.83/ 观察,能正常访问85web服务器。
    测试三:启动tomcat1
    访问http://192.188.32.83/ 观察,会轮询83和85两台服务器。
    测试四:关闭tomcat2 结果参考上述步骤

    ******双机nginx 配置tomcat集群(多机器)负载均衡**********
    单nginx 配置tomcat集群(单机)负载均衡、单nginx 配置tomcat集群(多机器)负载均衡
    缺陷是高度依赖负载均衡服务器,负载均衡服务器故障会导致整个网络无法访问,所以考虑把负载均衡服务器也做成双机高可用。

    --》方案
    采用 linux虚拟ip(ip漂移技术)实现Nginx双机高可用。下述为虚拟ip阐述了ip虚拟技术:

    通常情况下,两台服务器都具有一块以上的网卡,每块网卡都应该有一个IP地址,同时,还应该有一个漂移IP地址,该地址为工作IP地址。因此,最简单的主从方式下,双机系统要占用3个网络地址。
    在分配IP地址时,要分清工作IP地址和主机自由地址。如在主从方式、单网卡的情况下,主机一地址为200.10.10.1,主机二的地址为200.10.10.2,工作地址为200.10.10.3,正常情况下,工作主机的自由地址是被工作地址取代的(若主机一在工作,主机一得地址由200.10.10.1变为200.10.10.3)。在发生主机切换的情况下,主机一的地址恢复为200.10.10.1,而主机二的地址会由200.10.10.2变为200.10.10.3,这就是地址漂移。

    网卡上增加一个IP:
    /sbin/ifconfig eth0:1 192.168.3.104 netmask 255.255.255.0
    /sbin/route add -host 192.168.3.104 dev eth0:1
    删除网卡的第二个IP地址:
    ip addr del 192.168.0.1 dev eth0

    ---》分别给两台服务器配置虚拟ip
    两台机器的虚拟ip定为 192.188.32.81

    ***32.83添加虚拟ip
    /sbin/ifconfig eth1:1 192.188.32.81 netmask 255.255.255.0
    /sbin/route add -host 192.188.32.81 dev eth1:1

    ***32.85添加虚拟ip
    /sbin/ifconfig eth0:1 192.188.32.81 netmask 255.255.255.0
    /sbin/route add -host 192.188.32.81 dev eth0:1

    --》分别安装nginx和tomcat

    ---》nginx配置参考

    #user nobody;
    user root root;
    worker_processes 4;

    #error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;

    #pid logs/nginx.pid;


    events {
    #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue
    use epoll;
    worker_connections 1024;
    }


    http {
    include mime.types;
    default_type application/octet-stream;

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log logs/access.log main;

    sendfile on;
    #tcp_nopush on;

    #keepalive_timeout 0;
    keepalive_timeout 65;

    #gzip on;

    upstream tomcat {
    server 192.188.32.83:8080;
    server 192.188.32.55:8080;
    }

    server {
    listen 80;
    #####需要修改的地方###
    server_name 192.188.32.81;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
    root html;
    index index.html index.htm;
    proxy_pass http://tomcat;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    }
    }

    ---》测试
    测试1:启动两台tomcat、nginx,访问 http://192.188.32.81/,结果能正常访问;
    测试2:关闭某一台nginx,访问 http://192.188.32.81/,结果能正常访问;
    (可以关闭nginx,或删除虚拟ip模拟服务器故障情况)

    **删除83上的虚拟ip
    ip addr del 192.188.32.81 dev eth1
    **删除55上的虚拟ip
    ip addr del 192.188.32.81 dev eth0

    参考:
    http://limaoyuan.iteye.com/blog/904352
    http://ari.iteye.com/blog/833153
    http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html
    http://www.php100.com/html/program/nginx/2013/0905/5525.html
    展开全文
  • 大家都知道nginx可以代理多台服务器(以tomcat为例),那么当被nginx代理的tomcat服务器宕机时,我们怎么保证客户端能继续访问系统?接下来就说一下nginx在实现负载均衡的同时,被代理的服务器宕机怎么无痛的让...

    ​​​​​​​阿里云服务器优惠链接:云小站_专享特惠_云产品推荐-阿里云

    大家都知道nginx可以代理多台服务器(以tomcat为例),那么当被nginx代理的tomcat服务器宕机时,我们怎么保证客户端能继续访问系统?接下来就说一下nginx在实现负载均衡的同时,被代理的服务器宕机怎么无痛的让客户端继续访问到我们的项目。

    1.首先在nginx的文件目录里找到nginx-conf文件,这是nginx的配置文件;在nginx-conf文件下的http节点下添加upstream节点,进行tomcat的配置,如下图所示

    server是配置tomcat的端口号和ip地址(绿框所示);nginx分配tomcat请求的比例有四种,分别是轮询(默认),权重(红框所示)权重分配的越高,访问的承载量越大,第三种分配方式是根据ip分配(上图中的ip-hash方法,被注掉了);最后一种是第三方分配。我的配置文件用的是权重的分配方式。

    2.tomcat的分配配置完成后该配置我们的静态资源的根目录了,如下图所示

    根据上图所示首先在server节点下添加location节点(可添加多个),配置拦截客户端以项目名为前缀的请求和以.do、.jsp为后缀的请求,以及拦截客户端请求的静态资源,去我们配置的根目录下去找静态资源展示给客户端(动静分离,请求静态资源不经过tomcat)

    3.配置完成之后,开始配置我们的tomcat文件夹/conf/server.xml文件,如下所示

    更改这三个端口号,防止出现运行多个tomcat会出现端口号被占用的问题。

    4.tomcat和nginx的配置完成后把要运行项目的war包放到tomcat的webapps的文件夹下(在两个tomcat的项目里做一个标识,显示当前的端口号为多少),在tomcat的bin文件夹下运行startup.bat文件,启动tomcat,tomcat启动成功之后,使用dos命令启动我们的nginx,然后打开浏览器进行测试

    (1)启动nginx

    (2)打开浏览器访问localhost

    第一次进来nginx分配的是8080端口,点击刷新

    端口号切换为8081,到这通过nginx整合tomcat实现负载均衡以及动静分离的配置就结束了。那么思考一个问题,当客户端正在访问的tomcat宕机了,怎么保证客户端无感知继续访问我们的项目?还是通过配置nginx下的nginx-conf配置文件来解决,如下图所示

    backup:当其他所有的没有backup属性的tomcat宕机的时候,由这个由backup属性的tomcat顶替处理客户端的请求,其他的tomcat正常运行的时候是不会访问到这个backup的tomcat的;下面我们测试一下,如图:

    当我们对8080端口的tomcat进行了backup属性的添加后,无论怎么刷新都不会访问到这个8080端口的tomcat,下面模拟8081和8082端口的tomcat宕机后的请求,如图


    down掉两个正常运行的tomcat,浏览器发送请求结果如下:

    页面无论怎么刷新,请求的都是带有backup属性的8080端口,这样就解决了tomcat宕机后怎么保证客户端继续访问我们项目的问题。 

                                                                                                                                                                -----------纯属原创,不喜勿喷

    展开全文
  • 关于weblogic 双机集群搭建方案

    千次阅读 2017-02-20 09:16:00
    tomcat:免费,个头小,java标准规范 weblogic: 商业化,庞大,周边支持 所以因为项目有钱呗 下面详解一下该文章搭建weblogic后会遇到的问题:   1. 主机名验证失败  javax.net.ssl....
  • (1)服务器有4台,一台安装apache,三台安装tomcat (2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2 (3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2...
  • Tomcat集群同步原理

    千次阅读 2017-06-17 09:09:30
    于是现在大多数服务器都做成了集群的形式。而服务器集群会有一个很大问题,就是同步问题。比如,现在我对一个有四台计算机的集群进行访问,这时假设根据负载均衡分配到了Node1,如果我在Node1上创建了一个session...
  • 双机主从热备作用: 可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高...
  • windows下通过tomcat搭建集群

    千次阅读 2017-08-29 10:29:53
    前提:JDK必须环境变量配置好,在D盘下新建一个文件夹httpd,tomcat解压到此文件夹,在httpd...这个是负载均衡服务器,用来转发请求到不同的tomcat上 下载地址:http://archive.apache.org/dist/httpd/binaries/win
  • tomcat集群

    2017-10-06 09:33:27
    tomcat集群  什么是集群  集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但 事实上集群由一组服务实体组成。  集群的特性 ...
  • 一、需求描述 应用环境中,主服务器的荡掉之后,在不重新登录的情况下,自动访问备服务器的...1、用nginx做代理,搭建主备服务器应用,实现双机热备,存在的问题:session无法共享 2、服务端将session保存到red...
  • 准备工作: 1.jdk8 对应tomcat8 或者jdk7对应tomcat7 2.Apache服务器: httpd-2.2.25-win32-x86-no_ssl.msi 下载地址: httpd-2.2.25-win32-x86-no_ssl.msi. ...3.tomcat集群的插件: mod_jk-1.2.31-httpd-2.2.3.so ...
  • 参考文档:nginx+tomcat7的集群 1.环境准备和配置 服务器 ip 操作系统 备注 tomcat-001 192.168.1.215 Centos7 tomcat-001 192.168.1.216 Centos7 nginx-001 192.168.1.217 Centos7
  • Tomcat集群

    2018-08-23 17:23:24
    一.常用的负载均衡技术 基于DNS的负载均衡 通过DNS服务中的随机名字解析来实现负载均衡,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询... 反向代理负载均衡 (如Apache+JK2+Tomcat这种组合) ...
  • 1.4 Tomcat集群配置的优缺点 1.5 Apache+Tomcat 1.6 环境说明 2 软件安装 2.1 安装说明 2.2 JDK安装 2.3 Apache安装 2.3.1 apr的安装 2.3.2 apr-util的安装 2.3.3 pcre的安装 2.3.4 apache的安装 ...
  • 移动解压后的tomcat到/usr/local 并重命名目录名为tomcat7   启动tomcat服务 查看tomcat的运行端口8080   测试默认页面   建立测试页 Tomcat1服务器WebSrv1上建立 ...
  • TOMCAT集群

    2017-12-14 17:11:29
    TOMCAT集群 1  1 集群 1  1.1 什么是集群 1  1.2 集群的特性 1  1.3 集群的分类 1  1.4 TOMCAT集群配置的优缺点 2  1.5 APACHE+TOMCAT 2  1.6 环境说明 2  2 软件安装 3  2.1 安装说明 3  2.2 ...
  • 【转】keepalived多个虚IP的双机集群

    千次阅读 2018-09-18 10:15:03
    这两天接了一个项目,项目要求多专线接入一个服务器集群,同时,还需要每个专线无法互访,还需要在专线上不能出现多余的路由跳数,也就是说,NAT是不允许的,项目在小范围环境下测试通过了,放上来,有需要的能帮...
  • 双机热备并不是真正意义上的集群模式,但是相比于单机模式优势是可以实现高可用,在主机出现故障的状态下,可以快速的切换到备机,备机替代主机的工作,保证服务可用。这里主要介绍基于KeepAlive实现的双机热备(本质...
  • 原文链接:http://blog.csdn.net/sxdtzhaoxinguo/article/details/49182063摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较...一:首先是环境:1.jdk 1.6.0_452.tomcat 6.0.443.nginx 1...
  • Tomcat集群组建一、简介1、集群的特性 一、简介 1、集群的特性 可扩展性: 性能不再受限于一个单一的服务实体,可以根据业务的需要和性能的要求自由扩展。 高可用性: ...
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    千次阅读 多人点赞 2019-12-12 15:04:43
    Tomcat面试题 1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种...
  • OS开发商,服务器开发商都提供了系统级的集群产品,最典型的是各类双机系统,还有各类科研院校提供的集群系统。以及各类软件开发商提供的应用级别的集群系统,如数据库集群,Application Server 集群,Web Server...
  • 测试Nginx自动重启配置nginx-tomcat服务集群 在通过 Nginx 构建 服务集群后, 为保证Nginx服务的高可用性, 配备第二台Nginx 作为后备, 通过keepalived虚拟路由实现双机主备,最终实现内网环境下高可用服务集群。 ...
  • 实现了负载分担和双机热备的功能。 4.相关操作命令 nginx启动、重启、关闭 一、启动    cd usr/local/nginx/sbin ./nginx 二、重启 更改配置重启nginx  # /usr/local/ nginx /sbin/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,707
精华内容 1,082
关键字:

tomcat双机集群