文档章节

apache+jk+tomcat集群配置

bill2candy
 bill2candy
发布于 2016/10/28 16:20
字数 1491
阅读 14
收藏 1

 

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上了。

 

© 著作权归作者所有

共有 人打赏支持
bill2candy

bill2candy

粉丝 22
博文 13
码字总数 16628
作品 1
青岛
后端工程师
apache+tomcat+jk配置域名问题

@红薯 你好,想跟你请教个问题: apache+jk+tomcat集群+windows server2008 问题:在配置虚拟主机后,通过网页访问域名出现的是login.jsp打开的文件,jsp文件貌似没有被apache识别,这个怎么破...

四季漫雪
2013/10/13
514
3
apache+tomcat集群配置域名

最近在配置公司的服务器域名遇到一个问题求解: 环境:apache+jk+tomcat集群+windows server2008 问题:在配置虚拟主机后,通过网页访问域名出现的是login.jsp打开的文件,jsp文件貌似没有被...

四季漫雪
2013/10/12
277
0
Centos基于Apache的Tomcat负载均衡和集群

Centos基于Apache的Tomcat负载均衡和集群 一、背景原理 1、tomcat 做个WEB服务器有它的局限性,处理能力低,效率低。承受并发小(1000左右)。但目前有不少网站或者页面是JSP的。并采用了tom...

liuhao_sh
2015/08/17
0
1
apache结合Tomcat出现的问题

我一个服务器上运行了apache与Tomcat,apache+jk+Tomcat,apache来反向代理给后台的Tomcat,今天发现,当用域名访问时,打不开页面,而用ip来访问时却能正常访问。很是不解!当重启Tomcat后就...

ZhouLS
2012/09/20
323
1
请教大神们关于web服务的负载均衡的问题?

小弟最近在学习Javaweb项目的负载均衡,跟别人一样按照网上的教程一步步尝试。 也开始了解了基于apache+jk+tomcat的简单分发web请求的配置。 然后,现在开始有了一个疑问,在网上自己没能找到...

熊霸天下888
2012/11/19
174
3

没有更多内容

加载失败,请刷新页面

加载更多

React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
28分钟前
0
0
Jenkins使用

clean install -Dmaven.test.skip=true

1713716445
37分钟前
0
0
多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
今天
1
0
HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
今天
3
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部