`
H小阿飞
  • 浏览: 274424 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

Linux下通过Apache搭建Tomcat集群

阅读更多

集群说明:

1. 负载均衡(Load Balance):当同一客户端发起一个请求时,apache始终将请求转发到同一个节点 (sticky session),当另一个客户端或同一客户端从一个新的浏览器窗口发起请求时,apache会把请求分发到另一节点 上,依次轮询,当然,可以在apache上设置后端tomcat的分发权重。从而达到负载均衡的效果。

        

2. 高可用(High availablity):当其中一台tomcat server 突然crash时,apache会将这在进行的请求分发到集群中其他tomcat server上,由于集群member 之间已经session replication,所以原来的session 会在另外一节点上继续进行,此时,请求已发生了无缝转移,在客户端完全感觉不到故障已发生。

 

Linux下通过Apache搭建Tomcat集群

一.准备工作:

系统:CentOS release 6.2Final

软件:httpd-2.2.24.tar.gz

      tomcat-connectors-1.2.37-src.tar.gz

      apache-tomcat-6.0.37.tar.gz

集群分配:192.168.1.103 安装apache  tomcat-connectors

          192.168.1.22 安装tomcat22

          192.168.1.23 安装tomcat23

二.安装

1.1安装Apache   192.168.1.103

[root@localhost soft]#wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.24.tar.gz [root@localhost soft]#tar -zxvf httpd-2.2.24.tar.gz    //解压apache的压缩包

[root@localhost soft]#cd httpd-2.2.24     //定位到httpd-2.2.24 文件夹下

[root@localhost httpd-2.2.24]#ls     //查看显示httpd-2.2.24 文件夹下内容

[root@localhost httpd-2.2.24]#./configure --help | more    //查看安装apache配置参数

[root@localhost httpd-2.2.24]#./configure  --prefix=/opt/apache  --enable-so --enable-mods-shared=all    //  配置apache路径

[root@localhost httpd-2.2.24]#make     //编译apache

[root@localhost httpd-2.2.24]#make install    //安装apache

[root@localhost httpd-2.2.24]#cd /opt/apache   //进入apache的目录   

[root@localhost apache]#  cd conf/

[root@localhost conf]#cp -a httpd.conf httpd.conf-     //备份apache配置文件

[root@localhost conf]#vi httpd.conf 

   修改#ServerName www.example.com:80ServerName localhost:80

[root@localhost conf]#/opt/apache/bin/apachectl -k start    //linux启动apache命令              

[root@localhost conf]#netstat -an | grep :80    //查看linux80端口是否开启

[root@localhost conf]#ps -aux | grep httpd     //linux下查看apache进程

[root@localhost conf]#cd ../..

[root@localhost opt]#cp /opt/apache/bin/apachectl /etc/rc.d/init.d/apache //拷贝apache启动脚本

[root@localhost opt]#vi /etc/rc.d/init.d/apache    // 这里是编辑apache启动脚本

  在开头的#/bin/sh  下面加上

    #chkconfig: 2345  85  15

[root@localhost opt]#chkconfig --add apache    //添加apache服务

[root@localhost opt]#chkconfig --list apache    //列出apache服务

[root@localhost opt]#service apache stop    //停止apache服务

[root@localhost opt]#netstat -an | grep :80     //查看linux80端口是否关闭

[root@localhost opt]#ps -aux | grep httpd     //查看是否存在httpd服务,若果之前自带httpd服务启动的话会导致新添加的apache服务启动失败

[root@localhost opt]#service apache start    //启动apache服务

[root@localhost opt]#curl 127.0.0.1

 

附:安装proxy   httpd-2.2.24版本)

httpd-2.4.9版本无需安装proxy,安装httpd-2.4.9版本后,会自动安装proxy相关文件,在modules目录下面就有mod_proxy_balancer.so mod_proxy_ftp.so等相关文件,无需再单独安装proxy了(2014.07.07 补充)

进入apache源代码的modules目录 

[root@localhost opt]# cd /opt/httpd-2.2.24/modules/proxy/

[root@www proxy]# ls

[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy.c proxy_util.c

[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy_balancer.c mod_proxy_connect.c mod_proxy_http.c

[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy_ftp.c

重启apache

选项说明: 
-c 
执行编译操作 
-i 
安装操作,安装一个或多个动态共享对象到服务器的modules目录 
-a 
自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之 
-A 
-a类似,但是它增加的LoadModule行前有井号前缀(#) 
-e 
需要执行编辑操作,可与-a-A选项配合使用,与-i操作类似,修改httpd.conf文件,但并不安装此模块 

 

2.安装tomcat-connectors   192.168.1.103

[root@zqkj103 soft]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz

[root@zqkj103 soft]# tar -zxvf tomcat-connectors-1.2.37-src.tar.gz

 [root@zqkj103 soft]# cd tomcat-connectors-1.2.37-src

[root@zqkj103 tomcat-connectors-1.2.37-src]# ls

[root@zqkj103 tomcat-connectors-1.2.37-src]# cd native/

[root@zqkj103 native]# ls

[root@zqkj103 native]# ./buildconf.sh

如果提示:

buildconf: checking installation...

buildconf: autoconf not found.

           You need autoconf version 2.59 or newer installed

           to build mod_jk from SVN.

[root@zqkj103 native]# ./buildconf.sh

[root@zqkj103 native]# yum install autoconf

[root@zqkj103 native]# ./buildconf.sh  再次提示

buildconf: checking installation...

buildconf: autoconf version 2.63 (ok)

buildconf: libtool not found.

           You need libtool version 1.4 or newer installed

           to build mod_jk from SVN.

[root@zqkj103 native]#yum install libtool

[root@zqkj103 native]# ./buildconf.sh

[root@zqkj103 native]# ./configure --with-apxs=/usr/local/apache/bin/apxs

[root@zqkj103 native]# make

[root@zqkj103 native]# make install

 

如果成功结束,你可以在/usr/local/apache/modules/下找到mod_jk.so文件。

 

3.安装tomcat  192.168.1.22

[root@zqkj22 soft]# cd /opt

[root@zqkj22 opt]# ls

[root@zqkj22 opt]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37.tar.gz [root@zqkj22 opt]#tar -zxvf apache-tomcat-6.0.37.tar.gz

 

4.安装tomcat  192.168.1.23

[root@zqkj23 soft]# cd /opt

[root@zqkj23 opt]# ls

[root@zqkj23 opt]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37.tar.gz [root@zqkj22 opt]#tar -zxvf apache-tomcat-6.0.37.tar.gz

 

5.修改192.168.1.22机器上tomcat的配置

修改server.xml

<Engine name="Catalina" defaultHost="localhost">修改为

<Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat22">

<!- -

<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="4000"

              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"/>

  </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>

配置web.xml,增加<distributable/>元素,表示此应用将与群集服务器复制Session

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

   <distributable/>

 

 

6.修改192.168.1.23机器上tomcat的配置

修改server.xml

<Engine name="Catalina" defaultHost="localhost">修改为

<Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat23">

<!- -

<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"/>

<!--

注释:此处刚开始我设置的4000,可是tomcat总启动后,总是无法访问项目,遂改成了4001,则可以了。具体原因不明,不知道跟23机器上的端口是否冲突的原因。但是在22机器上,设置4000是可以的。也不知是否不能跟22机器上的端口一样

-->

 

    <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"/>

  </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>

 

配置web.xml,增加<distributable/>元素,表示此应用将与群集服务器复制Session

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

        <distributable/>

 

7.配置Apache中的httpd.conf

打开apache安装目录下的conf/httpd.conf文件,在文件最后追加以下内容:

# Load mod_jk module 

LoadModule jk_module modules/mod_jk.so 

# Specify jk log file. 

JkLogFile /var/log/mod_jk.log 

# Specify jk log level [debug/error/info] 

JkLogLevel info 

# Specify workers.properties, this file tell jk: 

# how many nodes and where they are. 

JkWorkersFile conf/workers.properties 

# Specify which requests should handled by which node.  

JkMount /*.jsp controller

 

8.配置workers.properties

新建workers.properties     vi命令

上述配置中:JkWorkersFile conf/workers.properties 指明由一个workers.properties文件来描述集群结点的情况,因此,我们需要创建这个workers.properties文件,并放置于 conf文件夹下,这个文件的内容如下:

 

worker.list = controller,tomcat22,tomcat23 

#========tomcat1========   

worker.tomcat22.port=8009  

# 此处的端口是指<Connector port="8009" redirectPort="8443" protocol="AJP/1.3"/>处的

worker.tomcat22.host=192.168.1.22 

worker.tomcat22.type=ajp13 

worker.tomcat22.lbfactor = 1  

#========tomcat2======== 

worker.tomcat23.port=8009    

worker.tomcat23.host=192.168.1.23 

worker.tomcat23.type=ajp13 

worker.tomcat23.lbfactor = 1  

#========controller======== 

worker.controller.type=lb 

worker.controller.balance_workers=tomcat22,tomcat23 

worker.controller.sticky_session=false

worker.controller.sticky_session_force=1

#worker.controller.sticky_session=1

 

9.建立项目测试

建立test项目,需要在项目的web.xml中添加<distributable/>

建立test2.jsp,内容如下(网上都用这个测试,我就省的麻烦了)

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

  out.println("<br> ID " + session.getId()+"<br>");

  // 如果有新的 Session 属性设置

  String dataName = request.getParameter("dataName");

  if (dataName != null && dataName.length() > 0) {

     String dataValue = request.getParameter("dataValue");

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  Enumeration e = session.getAttributeNames();

  while (e.hasMoreElements()) {

     String name = (String)e.nextElement();

     String value = session.getAttribute(name).toString();

     out.println( name + " = " + value+"<br>");

         System.out.println( name + " = " + value);

   }

%>

  <form action="test2.jsp" method="POST">

    名称:<input type=text size=20 name="dataName">

     <br>

    :<input type=text size=20 name="dataValue">

     <br>

    <input type=submit>

   </form>

</body>

</html>

上面的测试页面就不解释了,很好理解。

 

注:关闭2223的防火墙,不然访问不了,或者tomcat无法正常启动,或者能访问,但是每次重新请求session都会丢失,更不能共享

service iptables stop                                 

 

原本打算用tomcat8 ,但是添加< Cluster >标签后,无法启动tomcat,遂只能改用tomcat6进行配置  ;此情况可能是路由组播造成的。当不使用默认网络eth0时,tomcat6也会出现此情况。至于tomcat8没有再具体测试。或者也有可能是防火墙未关闭2014.07.07 补充)

 

linux tomcat开机自启动
修改Tomcat/bin/startup.sh :

export JAVA_HOME=/usr/java/jdk1.8.0_05

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/opt/tomcat01
/opt/tomcat01/bin/catalina.sh start

 

/etc/rc.d/rc.local中加入:
/opt/tomcat01/bin/startup.sh

 

分享到:
评论

相关推荐

    Linux下搭建tomcat集群全记录

    经测试本文详细描述了Linux下搭建tomcat集群全记录

    Linux搭建Apache+Tomcat环境

    本说明手册为了阐述Linux搭建Apache+Tomcat环境,并详细介绍Tomcat的集群和负载均衡配置而编写。届时介绍域名的绑定,Red Hat和Ubuntu中随系统自动启动个软件的配置方法。

    Linux_Apache+Tomcat+jk

    讲述了怎样在liunx系统下配置tomcat集群,apache负载均衡,session黏贴,关于缓存,压缩可以在此基础上扩展

    apache + tomcat + mod_jk集群

    apache + tomcat + mod_jk集群。我分别在windwos、linux32位、linux64位系统下都成功搭建。

    linux apache tomcat mod_jk 集群搭建

    这文档时我边搭建边写出来的,按道理来讲的话是可行的,要是在搭建的过程有问题的话记得看log日志。

    Tomcat集群

    linux环境下搭建Tomcat集群详细步骤及各个参数配置,jk连接器的使用和代理配置,Apache安装和设置,Tomcat部署

    集群(linux+tomcat+mod_jk)

    集群配置; 压缩包内置: 1、apache 相关安装包 2、tomcat 相关安装包 3、集群环境搭建文档

    tomcat 集群部署

    apache + tomcat + mod_jk 集群部署。我分别在windows、Linux32位、Linux64位都搭建成功了。

    nginx+tomcat高可用、高性能jsp集群

    目的:搭建高可用、高性能的jsp集群 二、初始化系统 #init system 系统环境: CentOS 5.5(定制安装) 组件: Base Development Libraries Development Tools Editors Text-based Internet ./init_system.sh #此脚本...

    Linux下Nginx搭建

    1.Ngnix 下载 ...黄海下载的是: ...由于使用集群,所以tomcat 间的session 同步就显得尤为重要。 本例中使用memcached-session-manager 的插件进行session 的同步管理。 http://code.google.com/p/m

    Nginx+Tomcat高性能负载均衡集群搭建教程

    其占有内存少,并发能力强,在同类型的网页服务器中表现较好。...在这里我们采用集群部署方式,使用多个Tomcat,反向代理使用Nginx。 架构如下: 准备工作 apache-tomcat-7.0.61 nginx-1.12.2 Redis-x64-3.2.10

    Redhat_linux与java开发相关资料

    Redhat_Linux中JDK的卸载和安装 Redhat_Linux搭建FTP服务 Redhat安装Apache和SVN Mod_Proxy+Apache+Tomcat负载均衡与集群配置 Redhat_linux创建FTP用户(含-SELinux简介)

    Apache+Jbosseap环境搭建V1.0 (2).docx

    Apache所用包:httpd-2.2.19.tar.gz Jboss 所用包:jboss-eap-5.1.2.zip JDK 所用包:jdk-6u26-linux-x64-rpm.bin 整合所需包:tomcat-connectors-1.2.26-src.tar.gz

    Nginx+Tomcat+Session-高性能群集搭建.doc

    随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器、apache有优点也 有不足,apache渐渐不能满足人们的要求,目前nginx被大量采用做高性能web服务器,...

    FineReport 群集配置方案

    在Linux中用Apache+Tomcat+JK实现负载均衡和群集的完整过程,亲测OK。

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ │ apache-tomcat-7.0.57.tar.gz │ │ JVM调优实战.doc │ │ Tomcat7优化.docx │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 ...

    2023国赛 网络建设与运维正式赛卷

    还包括对DFS服务、ASP服务、打印服务、Nginx和Tomcat服务、Samba服务、iSCSI服务等多种IT基础设施的服务搭建和安全管理,以及Linux服务器的CA认证、Ansible自动化运维、Apache和IIS web服务器配置、Samba和NFS共享...

    低清版 大型门户网站是这样炼成的.pdf

    1.2.5 支持集群功能的web服务器tomcat 21 1.2.6 开源数据库服务器之骄子mysql 23 1.2.7 功能强大的flv流媒体服务器red5 24 1.3 门户网站开发指导思想 26 1.4 ssh 2组合框架—门户网站开发之首选 28 1.4.1 mvc...

Global site tag (gtag.js) - Google Analytics