Linux下的Tomcat服务器集群

编辑
文档创建者:snake9003 (54210 )     浏览次数:3597次     编辑次数:4次     最近更新:xiwangbang 于 2018-06-13     

目录:

1. 背景介绍编辑

前一篇Tomcat服务器集群中,介绍了Windows下apache+tomcat集群的配置过程。而在Linux下,配置过程大同小异,主要区别在于apache的安装和一小部分配置。

本文将以一个实际的例子来介绍如何搭建与配置Linux环境下的Apache+Tomcat集群。

本文使用的Linux环境为 ubantu 16.04 ,Apache与两个Tomcat都安装在同一台机器上,不排除不同的Linux环境和不同的网络结构会造成不同的细节区别,请读者自行判断。

2. 环境准备编辑

2.1 JDK

Linux系统基本上都有自带的openJDK,必须先将其卸载并安装sun/oracle公司发布的JDK。


2.2 Apache

使用版本:2.4.20


2.3 Tomcat 
使用版本:7.0.70

2.4 Apache Tomcat Connector (mod_jk)
使用版本:JK-1.2.39

Apache 2.4 以上版本需要额外安装 apr、apr-util、pcre 三个依赖包,如果使用Apache 2.2 及以下版本则无需安装依赖包。

apr 版本:apr-1.5.2.tar.gz

apr-util 版本:apr-util-1.5.4.tar.gz

pcre 版本:pcre-8.38.tar.gz

3. 软件安装编辑

3.1 安装apr

安装路径:/usr/local/apr

root@ubuntu: tar -zxvf apr-1.5.2.tar.gz root@ubuntu: cd apr-1.5.2/ root@ubuntu: ./configure --prefix=/usr/local/apr root@ubuntu: make root@ubuntu: make install

可能遇到的问题:

在另一台centos7的机器上执行 ./configure 时报错:

[root@centos apr-1.5.2]# ./configure --prefix=/usr/local/apr checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking target system type... x86_64-unknown-linux-gnu Configuring APR library Platform: x86_64-unknown-linux-gnu checking for working mkdir -p... yes APR Version: 1.5.2 checking for chosen layout... apr checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/usr/local/apr-1.5.2': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details [root@centos apr-1.5.2]#

原因是缺少编译器,需要再安装编译器gcc,命令如下:

[root@centos apr-1.5.2]# yum install gcc-c++

然后等它自动安装完,再重新执行 ./configure

3.2 安装apr-util
安装路径:/usr/local/apr-util

root@ubuntu: tar -zxvf apr-util-1.5.4.tar.gz root@ubuntu: cd apr-util-1.5.4/ root@ubuntu: ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr root@ubuntu: make root@ubuntu: make install

3.3 安装pcre

安装路径:/usr/local/pcre

root@ubuntu: tar -zxvf pcre-8.38.tar.gz root@ubuntu: cd pcre-8.38/ root@ubuntu: ./configure --prefix=/usr/local/pcre root@ubuntu: make root@ubuntu: make install

3.4 安装Apache

安装路径:/usr/local/apache

root@ubuntu: tar -zxvf httpd-2.4.20.tar.gz root@ubuntu: cd httpd-2.4.20 root@ubuntu: ./configure --prefix=/usr/local/apache --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/bin --with-pcre=/usr/local/pcre root@ubuntu: make root@ubuntu: make install

3.5 安装Apache Tomcat Connector(mod_jk)

root@ubuntu: tar -zxvf tomcat-connectors-1.2.39-src.tar.gz root@ubuntu: cd tomcat-connectors-1.2.39-src/native root@ubuntu: ./buildconf.sh root@ubuntu: ./configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni root@ubuntu: make root@ubuntu: make install


如果以上安装全部成功,则可以在/usr/local/apache/modules下找到 mod_jk.so 文件。

3.6 安装Tomcat

解压下载到的apache-tomcat-7.0.70.tar.gz文件至/usr/local,并复制成两份,分别重命名为 tomcat1 和 tomcat2。

4. 配置过程编辑

4.1 配置Apache

1)打开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 /* controller

Tomcat服务器集群中,这一部分配置是通过新建mod_jk.conf文件实现的,实际上两种方式没有区别。

可能出现的问题:

配置完成后,启动apache时报错:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
此时需要修改httpd.conf 文件,
            把:
                ServerName www.example.com:80
            改为:
                ServerName localhost:80

2)在/usr/local/apache/conf目录下新建 workers.properties 文件,添加以下内容并保存(tomcat名称应与各自 server.xml 中的信息对应):

#server worker.list = controller #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #========tomcat2======== worker.tomcat2.port=8010 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=false worker.controller.sticky_session_force=1 #worker.controller.sticky_session=1

如果需要配置远程的tomcat服务器的话,只需要将 worker.tomcat1.host=localhost 中的 localhost 改为远程服务器的IP地址即可。本例都是本地的tomcat,并且在一台机器上,所以端口号不同,如果在不同服务器上,则可视情况无需修改端口号。
注意:该文件中的端口号不是tomcat的访问端口(如默认的8080),而是AJP协议的端口,在tomcat的server.xml中位置如下图所示:
222
4.2 配置Tomcat
1)对于tomcat的配置主要集中在 /conf/server.xml 文件上。鉴于是在同一机器上运行两个tomcat实例,因此要对server.xml中配置的所有端口进行修改,避免端口被占用,本例中,tomcat1端口按照默认设置不变,tomcat2的所有端口均在默认基础上加1。
2)在Engine标签中添加 JvmRoute,分别设为tomcat1,tomcat2(必须与前面的workers.properties文件信息对应),如下图所示:
222
3)配置cluster标签
在server.xml中找到被注释的cluster标签
222
在其下方添加以下内容:
<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>

在本例中,仅仅将被注释的cluster标签取消注释并不能集群成功,于是从tomcat官方文档中找了一份默认配置(即上述配置),并测试成功。

可能出现的问题:

配置完成之后,启动tomcat时报错:

Failed bind replication listener on address:auto

需将上述内容中Receiver标签下的address值由"auto"改为实际的服务器ip:
222

5. 结果测试编辑

本例中的结果测试与Tomcat服务器集群中的结果测试方法一致,此处不再赘述

6. 参考资料编辑

tomcat官方关于tomcat集群配置的文档:
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
tomcat官方关于Apache Tomcat Connector的文档
http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
apache官方关于apache的安装文档
http://httpd.apache.org/docs/2.2/en/install.html
apache官方关于configure参数的文档
http://httpd.apache.org/docs/2.2/en/programs/configure.html#installationdirectories

附件列表


主题: 性能优化
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?