apache+jk+tomcat集群配置

 

1集群配置介绍

Apache Tomcat可以说是当下最受欢迎的开源Java Web服务器。Tomcat的单个实例恐怕无法满足访问量日增的需要。这种情况下,需要考虑在“集群”环境下运行Tomcat;在这种环境下,Web服务器的工作负载分配到多个Tomcat实例。

负载均衡:前端服务器(常常名为“负载均衡器”、“代理均衡器”或“反向代理”)收到HTTP请求后,前端服务器将请求分发到后端的不止一个“worker”Web服务器,由它们实际处理请求。负载均衡可以消除后端的单一故障点,并且可以为任何Web服务实现高可用性、高扩展性以及更合理的资源优化。

会话复制:会话复制是一种机制,将客户端会话的整个状态原原本本复制到集群中的两个或多个服务器实例,以实现容错和故障切换功能。通常情况下,分发的状态服务能够跨集群中的多个不同服务器实例,复制客户端会话的状态。

集群:集群由两个或多个Web服务器实例组成,这些服务器实例步调一致地工作,透明地处理客户端请求。客户端将一组服务器实例认为是单一实体服务。集群的目的是,为客户端提供高可用性服务,同时尽量高效地利用所有的可用计算资源。

2配置过程

2.1环境要求

下面是搭建Tomcat集群的具体要求。我在本教程中假设有4台Ubuntu服务器。

Apache服务器#1:(106)带mod_jk的Apache HTTP Web服务器(充当代理均衡器)

Tomcat服务器#2:(107-109)Java运行时6.x或更高版本,以及Apache Tomcat 7.x(充当worker Web服务器)。

Apache Web服务器充当代理均衡器。Apache Web服务器是客户端唯一看得见的那台服务器,所有的Tomcat实例都被隐藏起来,客户端看不见它们。mod_jk插件被激活后,Apache Web服务器将任何入站的HTTP请求转发到集群中的Tomcat worker实例。

2.2 apache 服务器安装

Tomcat Connectors让你可以将Tomcat连接到其他开源Web服务器。对Apache Web服务器而言,Tomcat Connectors以一种名为mod_jk的Apache模块而出现。装有mod_jk的Apache Web服务器可以将Ubuntu服务器变成代理均衡器。  

$ sudo apt-get install apache2 libapache2-mod-jk

2.3 tomcat服务器安装

1)Jdk安装

$ apt-cache search openjdk

After checking the latest version of OpenJDK, install it with apt-get

$ sudo apt-get install openjdk-7-jdk

$ vi ~/.bashrc设置环境变量

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

2)Tomcat 安装

Copy tomcat to server

$ sudo tar xvzf apache-tomcat-7.0.35.tar.gz -C /opt

CATALINA_HOME=/opt/apache-tomcat-7.0.35

Reload .bashrc file as follows.

$ source ~/.bashrc

Now enable Tomcat by running the following startup script.

$ sudo $CATALINA_HOME/bin/startup.sh

2.4 apache 服务器配置

  在Ubuntu上,mod_jk配置文件位于/etc/apache2/mods-enabled/jk.conf。更新如下:

<IfModule jk_module>  

      # We need a workers file exactly once  

    # and in the global server  

    JkWorkersFile /etc/libapache2-mod-jk/workers.properties  

  

    # JK error log  

    # You can (and should) use rotatelogs here  

    JkLogFile /var/log/apache2/mod_jk.log  

  

    # JK log level (trace,debug,info,warn,error)  

    JkLogLevel info  

  

    JkShmFile /var/log/apache2/jk-runtime-status 

  

    JkWatchdogInterval 60  

  

    JkMount /*  loadbalancer 

    JkMount /jk-status jkstatus 

  

    # Configure access to jk-status and jk-manager  

    # If you want to make this available in a virtual host,  

    # either move this block into the virtual host  

    # or copy it logically there by including "JkMountCopy On"  

    # in the virtual host.  

    # Add an appropriate authentication method here!  

    <Location /jk-status>  

            # Inside Location we can omit the URL in JkMount  

            JkMount jk-status  

            Order deny,allow  

            Deny from all  

            Allow from 127.0.0.1  

    </Location>  

    <Location /jk-manager>  

            # Inside Location we can omit the URL in JkMount  

            JkMount jk-manager  

            Order deny,allow  

            Deny from all  

            Allow from 127.0.0.1  

    </Location>  

</IfModule> 

如果实在虚拟机下,还需要在下面/etc/apache2/sites-available/000-default.conf文件加入:

    JkMount /*  loadbalancer 

    JkMount /jk-status jkstatus 

使用下列内容,创建或编辑etc/libapache2-mod-jk/workers.properties:    

worker.list=loadbalancer,jkstatus # 为192.168.1.100配置Tomcat实例 

    worker.tomcat1.type=ajp13  

    worker.tomcat1.host=192.168.1.100  

    worker.tomcat1.port=8081

    # worker“tomcat1”

    worker.tomcat1.connection_pool_size=200

    worker.tomcat1.connection_pool_timeout=600  

    # worker“tomcat1”将要求操作系统发送关于连接的KEEP-ALIVE信号。 

    worker.tomcat1.socket_keepalive=1  

    # 为192.168.1.200配置Tomcat实例 

    worker.tomcat2.type=ajp13  

    worker.tomcat2.host=192.168.1.200  

    worker.tomcat2.port=8082

    worker.tomcat2.connection_pool_size=200

    worker.tomcat2.connection_pool_timeout=600  

    # worker“tomcat2”将要求操作系统发送关于连接的KEEP-ALIVE信号。  

    worker.tomcat2.socket_keepalive=1  

    worker.jkstatus.type=status 

    worker.loadbalancer.type=lb  

    worker.loadbalancer.balance_workers=tomcat1,tomcat2

2.5 tomcat 服务器配置

2.5.1 tomcat组播方式设置session store

 Sudo vim /opt/apache-tomcat-7.0.30/conf/server.xml

<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="you ip address"

                      port="4000"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>

 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

   <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

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



<ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener>

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

</Cluster>

tomcat集群和负载均衡的实现(session同步)

因 为tomcat的session同步功能需要用到组播,windows默认情况下是开通组播服务的,但是linux默认情况下并没有开通。

可以通过指令打 开

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入

eht0 net 224.0.0.0 netmask 240.0.0.0

2.5.2 redis共享方式设置session store

redis已经有组件支持直接在tomcat7中设置下将redis作为tomcat默认的session存储器,下面介绍下配置过程

1.从http://redis.io/下载redis,按照redis服务端

  wget http://download.redis.io/redis-stable.tar.gz

  tar xvzf redis-stable.tar.gz

  cd redis-stable

  make

2.启动redis

  cd RedisDirectory/src

  ./redis-server --port 6379

3.从http://tomcat.apache.org/download-70.cgi下载tomcat7,按照tomcat7

4.从https://github.com/xetorthio/jedis/downloads下载jedis作为java的redis客户端,从https://github.com/jcoleman/tomcat-redis-session-manager/downloads下载tomcat的redis session manager插件,从http://commons.apache.org/proper/commons-pool/download_pool.cgi下载apache的common pool包,将这几个jar包拷贝到tomcat7的lib目录下

5.修改tomcat的conf下的context.xml文件,添加或者修改下面的配置

  <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />

  <Manager className="com.radiadesign.catalina.session.RedisSessionManager"

  host="localhost" <!-- optional: defaults to "localhost" -->

  port="6379" <!-- optional: defaults to "6379" -->

  database="0" <!-- optional: defaults to "0" -->

  maxInactiveInterval="60" <!-- optional: defaults to "60" (in seconds) --> />

6.重启tomcat后就可以看到session存储到redis上了。

 

转载于:https://my.oschina.net/u/2441175/blog/777424

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值