`
blaiu
  • 浏览: 131059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache+JK+Tomcat 集群

阅读更多
apache+jk+tomcat来做web负载均衡和集群

环境:
      操作系统:CentOS-5.3-i386
      jdk1.6.0.17
      apache2.2.14
      tomcat6.0
      jk1.2.26
     
     
     
一、 jdk的安装
    安装的jdk为:jdk-6u17-linux-x64-rpm.bin(linux下64位的)
      1. 将文件上传至linux
      2. 在当前目录输入
          sh jdk-6u17-linux-x64-rpm.bin
      3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议. 出现一行字:Do you aggree to the above license terms? [yes or no]
    安装程序在问您是否愿意遵守刚才看过的许可协议。输入"y" 或 "yes" 回车。
      4.在命令行输入:
          vi /etc/profile
          在里面添加如下内容
          export JAVA_HOME=/usr/java/jdk1.6.0_17
          export JAVA_BIN=/usr/java/jdk1.6.0_17/bin
          export PATH=$PATH:$JAVA_HOME/bin
          export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
          export JAVA_HOME JAVA_BIN PATH CLASSPATH       
      5. 在命令行输入
          java -version
          屏幕输出:
              java version "jdk1.6.0_17"
              Java(TM) 2 Runtime Environment, Standard Edition (build j dk1.6.0_17)
              Java HotSpot(TM) Client VM (build jdk1.6.0_17, mixed mode)
   安装JDK1.6完毕.
  
  
  
二、 Tomcat的安装
   安装的tomcat为:apache-tomcat-6.0.18.tar.gz
      1. #tar zxvf apach-tomcat-6.0.18.tar.gz
         #mv apach-tomcat-6.0.18/usr/local(移动tomcat的目录)
      2. 进行tomcat环境的配置(前提需要安装jdk)
         #vi /etc/profile

         export JAVA_HOME=/usr/local/jdk1.6.0_17(jdk如果已经配置过的话,这里就不用写了)
         export TOMCAT_HOME=/usr/local/apach-tomcat-6.0.18
   
         保存退出
      
          # source /etc/profile  //让当前配置立即生效
      3.启动tomcat服务器
          $ /usr/local/apach-tomcat-6.0.18/bin/startup.sh
          电脑上会出现如下内容:
          Using CATALINA_BASE:   /usr/local/apache-tomcat-6.0.18
          Using CATALINA_HOME:   /usr/local/apache-tomcat-6.0.18
          Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.18/temp
          Using JRE_HOME:       /usr/local/jdk1.6.0_17
          在浏览器中输入http://localhost:8080/就可以看到tomcat的log了
   tomcat的安装到此结束
  
  
  
三、 apache的安装
    安装的apache为:httpd-2.2.14.tar.gz
    1. # tar -zxvf httpd-2.2.14.tar.gz
       # cd httpd-2.2.14
       # ./configure --prefix=/usr/local/apache\   //安装路径
    2. # make  //编辑(在编译过程中出现无法编译,可能是没有安装gc编译器  在线安装gc编译器的命令是:#yum install gc )
       # make install   //安装
       # cd /usr/local/apache/bin/
       # ././apachectl      //开启httpd服务      
    安装成功后,在IE中输入apache服务器的IP地址,可以看到It works! 说明安装成功
    apache安装到此结束
   
   
   
四、 安装jk   
    安装的jk为:jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
    1. # tar -zxvf jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
       # cd /usr/local/jakarta-tomcat-connectors-jk-1.2.6-src/jk/native
       # ./configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=/usr/java/jdk1.6.0_17/
       # ./make   //编译 (在编译过程中出现无法编译,可能是缺少gcc-*  在线安装gcc的命令是:yum install gcc-*)
       # ./make install   //安装
       安装完成后 会在 /usr/local/apache/modules/ 产生mod_jk.so
    安装jk到此结束
   
   
五、 开始集群配置

    1. 修改apache配置文件
      # vim /usr/local/apache/conf/httpd.conf
          添加: Include conf/mod_jk.conf
    2. 新建mod_jk.conf
      # touch mod_jk.conf
      # vim /usr/local/apache/conf/mod_jk.conf
     
      加载 mod_jk Module: LoadModule jk_module modules/mod_jk.so
      指定 workers.properties文件路径 :JkWorkersFile conf/workers.properties
    3. 指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
      JkMount /*.jsp controller
      JkMount /*.js controller
      JkMount /jkstatus/ stat1
      JkMount /test/* controller
    4. 新建 workers.properties 文件
      # touch workers.properties
      # vim /usr/local/apache/conf/workers.properties
        添加如下内容:
          #server列表
          worker.list = controller, stat1
         
          #=======tomcat1=======
          #ajp13端口号,在tomcat下server.xml配置, 默认为8009
          worker.tomcat1.port=8009
         
          #tomcat的主机地址,如不是主机,请填写ip地址
          worker.tomcat1.host=192.168.0.1
          worker.tomcat1.type=ajp13
         
          #server的加权比重,值越高,分得的请求越多
          worker.tomcat1.lbfacotr=1
         
         
          #=======tomcat2=======
          #ajp13端口号,在tomcat下server.xml配置, 默认为8009
          worker.tomcat2.port=9009
         
          #tomcat的主机地址,如不是主机,请填写ip地址
          worker.tomcat2.host=192.168.0.2
          worker.tomcat2.type=ajp13
         
          #server的加权比重,值越高,分得的请求越多
          worker.tomcat2.lbfacotr=1
         
         
          #=======controller,负载均衡控制器=======
          worker.controller.type=lb
         
          #指定分担请求的tomcat
          worker.controller.balanced_workers=tomcat1, tomcat2
         
          #sticky_session属性设为1,这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互。
          worker.stat1.type=status
    5. tomcat 配置
       1>. 修改/usr/local/tomcat1/conf/server.xml
      
          A. 将<Engine name="Catalina" defaultHost="localhost">
              修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
         
          B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
              修改为:
              <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">   
                  <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                      expireSessionsOnShutdown="false" 
                      notifyListenersOnReplication="true"/>  

                  <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
                    <Membership className="org.apache.catalina.tribes.membership.McastService" 
                         address="228.0.0.4" 
                         port="45564" 
                         frequency="500" 
                         dropTime="3000"/>  

                    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
                        address="auto" 
                        port="4001" 
                        autoBind="100" 
                        selectorTimeout="5000" 
                        maxThreads="6"/>    

                    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
                        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />  
                    </Sender>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
                  </Channel>  

                  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>  

                  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  

                  <!--
                  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
                            tempDir="/tmp/war-temp/" 
                            deployDir="/tmp/war-deploy/" 
                            watchDir="/tmp/war-listen/" 
                            watchEnabled="false"/>  
                   -->

                  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  

                  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
              </Cluster>
             
      2>. 修改/usr/local/tomcat2/conf/server.xml
      
          A. 将<Engine name="Catalina" defaultHost="localhost">
              修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
         
          B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
              修改为:
              <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">   
                  <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                      expireSessionsOnShutdown="false" 
                      notifyListenersOnReplication="true"/>  

                  <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
                    <Membership className="org.apache.catalina.tribes.membership.McastService" 
                         address="228.0.0.4" 
                         port="45564" 
                         frequency="500" 
                         dropTime="3000"/>  

                    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
                        address="auto" 
                        port="4001" 
                        autoBind="100" 
                        selectorTimeout="5000" 
                        maxThreads="6"/>    

                    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
                        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />  
                    </Sender>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  

                    <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
                  </Channel>  

                  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>  

                  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  

                  <!--
                  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
                            tempDir="/tmp/war-temp/" 
                            deployDir="/tmp/war-deploy/" 
                            watchDir="/tmp/war-listen/" 
                            watchEnabled="false"/>  
                   -->

                  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  

                  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
              </Cluster>



tomcat集群各节点通过建立tcp链接来完成Session的拷贝,拷贝有同步和异步两种模式。在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;异步模式无需等待Session拷贝完成就可响应。异步模式更高效,但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。

Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。

Channel负责对tomcat集群的IO层进行配置。Membership用于发现集群中的其他节点,这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见http://zyycaesar.iteye.com/admin/blogs/296501),使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定义配置时,如果多个tomcat点在一台物理服务器上注意要使用不同的端口。Sender用于向其他节点发送数据,具体实现通过Transport配置,PooledParallelSender是从tcp连接池中获取连接,可以实现并行发送,即集群中的多个节点可以同时向其他所有节点发送数据而互不影响。Interceptor有点类似下面将要解释的Valve,起到一个阀门的作用,在数据到达目的节点前进行检测或其他操作,如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。关于Channel的编程模型,请参见http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/tribes/Channel.html。

Valve用于在节点向客户端响应前进行检测或进行某些操作,ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,因此不需检测,默认状态下不进行过滤,监测所有的响应。JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点,tomcat官方文档并未解释如何实现这一点,而且笔者认为这一设置似乎并无多大实用性。

Deployer用于集群的farm功能,监控应用中文件的更新,以保证集群中所有节点应用的一致性,如某个用户上传文件到集群中某个节点的应用程序目录下,Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能,不过很遗憾,tomcat集群目前并不能做到这一点,开发人员正在努力实现它,这里的配置只是预留了一个接口。

Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能。

启动顺序 tomcat1 ---->tomcat2---->apache



./configure //配置源代码树
--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。
--enable-module=so //打开 so 模块,so 模块是用来提 DSO 支持的 apache 核心模块
--enable-mods-shared=all //编译全部的模板,对于不需要我们可以在httpd.conf去掉。
--enable-cache //支持缓存
--enable-file-cache //支持文件缓存
--enable-mem-cache //支持记忆缓存
--enable-disk-cache //支持磁盘缓存
--enable-static-support //支持静态连接(默认为动态连接)
--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件
--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件
--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序
--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名
--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库
--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具
--enable-static-checkgid //使用静态连接编译 checkgid
--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本
--disable-cgi //禁止编译 CGI 版本的 PHP我们不再使用worker模式编译apache,worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。
分享到:
评论

相关推荐

    apache+tomcat+jk 均衡负载和集群

    Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...

    Apache动态域名+JK+Tomcat添加Tomcat系统服务 集群

    配置Apache+JK+Tomcat集群可以让多台服务器上的Tomcat实例共同提供服务,提高系统的稳定性和负载能力。 ##### 1. 准备工具 - **Tomcat6.0.35**:使用Tomcat6的原因在于其兼容性较好,适用于Java 1.5环境。 - **...

    Tomcat+Apache+JK集群

    【标题】"Tomcat+Apache+JK集群"指的是在Web服务器架构中,通过Apache HTTP Server与Tomcat应用服务器结合,并利用JK模块实现负载均衡和高可用性的集群部署方式。这种方式可以提升系统的性能和稳定性,应对高并发...

    tomcat+apache+jk集群和负载均衡

    完成配置后,应通过访问Apache服务器,测试请求能否正确地被转发到Tomcat集群中的某个实例,并得到响应。这一步骤对于确保集群和负载均衡策略的正确性至关重要。 通过上述详细步骤和配置要点,我们可以构建出一个...

    Apache+JK+Tomcat_集群

    Apache+JK+Tomcat_集群

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    Apache2.2.22+jk+tomcat7集群全套资料

    这个压缩包“tomcat集群”可能包含了配置文件示例、安装指南、日志文件和其他辅助资源,帮助你完成整个集群的搭建过程。通过仔细研究这些资料,你可以深入理解Apache、JK和Tomcat如何协同工作,以提供高可用性和可...

    Linux_Apache+Tomcat+jk

    为了搭建Tomcat集群,首先需要安装JDK。 1. **下载JDK**:选择JDK 1.6或更高版本。 2. **安装JDK**:安装过程省略。 3. **配置环境变量**:设置JDK_HOME、CLASSPATH和PATH环境变量。 ```bash export JAVA_HOME=/...

    apache+tomcat+jk集群

    在“apache+tomcat+jk集群”这一主题中,我们将深入探讨如何通过Apache、Tomcat以及JK模块的结合,实现负载均衡和集群配置,从而提升系统的性能和稳定性。 ### Apache的角色 Apache是一款广泛使用的开源Web服务器...

    Apache+Tomcat服务器集群配置详细步骤

    本文将详细介绍如何在一机双Tomcat环境下搭建Apache+Tomcat集群,并深入解析其中的关键配置和技术细节。 #### 二、Apache+Tomcat集群的优势 1. **高可靠性(HA)**:通过集群管理软件实现在主服务器发生故障时,备份...

    apache + tomcat + mod_jk集群

    4. **配置mod_jk**:在Apache的配置文件httpd.conf中,添加mod_jk的LoadModule语句,然后创建一个名为workers.properties的文件,定义Tomcat集群的服务器实例。每个实例包括IP地址、端口、工作目录等信息。 5. **...

    apache+tomcat集群配置

    本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器、配置 mod_jk 模块、配置 Apache 和 Tomcat 服务器、配置负载均衡控制器等。 一、安装 Apache 服务器 首先,需要安装 Apache ...

    Apache2.4+tomcat8.0+Jk

    Apache2.4、Tomcat8.0以及JK模块的结合使用是实现Web服务器与应用服务器之间负载均衡的一种常见方案。Apache作为前端服务器处理静态资源请求,而动态内容(如Java Web应用)则由Tomcat这样的Java应用服务器处理。JK...

    tomcat服务集群+apache负载均衡+jk链接tomcat-apache

    标题中的"tomcat服务集群+apache负载均衡+jk链接tomcat-apache"涉及的是一个常见的Web服务器架构,其中Apache HTTP Server作为前端负载均衡器,通过JK模块与后端的Tomcat集群进行通信,以实现高可用性和性能优化。...

    Apache+Tomcat集群

    Apache+Tomcat集群是一种常见的Web服务器和应用服务器集群架构,用于提高网站的可用性和可扩展性。Apache作为前端服务器,负责接收客户端的HTTP请求,并根据配置的负载均衡策略将这些请求转发给后端的多个Tomcat实例...

    apache+tomcat负载

    Apache+jk+Tomcat集群的工作流程大致如下: 1. 用户向Apache服务器发送请求。 2. Apache服务器通过mod_jk模块检查请求类型。 3. 如果请求是静态资源,Apache直接返回响应。 4. 如果请求是动态内容(如以".do"结尾的...

    Apache+多个Tomcat 服务器集群配置

    将以下Module的注释去掉,这里并没有使用mod_jk.so进行apache和tomcat的链接,从2.X以后apache自身已集成了mod_jk.so的功能。只需简单的把下面几行去掉注释,就相当于以前用mod_jk.so比较繁琐的配置了。这里主要采用...

    jk+apache+tomcat整合 负载均衡 集群

    jk+apce+tomcat 整合 实现tomcat负载均衡 tomcat集群。让tomcat处理.jsp动态页面,apache处理静态页面。平且实现在一个IP下提供多个站点服务。 里面包括怎样配置apache虚拟机文件 怎样配置tomcat的虚拟机文件 花了我...

Global site tag (gtag.js) - Google Analytics