这可能是最详细完整的tomcat集群配置教程

开头吐槽一下多数人的博客,大段配置文件忽略,或者是细节不说,导致误区太多,走太多弯路

遇到出错不要慌,ctrl+f搜一下,我整合了大多数都会遇到的报错

我配置的tomcat集群是tomcat+apache的版本,单服务器的集群模式,多个服务器的集群原理相同,只需要把使用的端口权限开放,nginx后边再配置
各个版本
tomcat-7.0.96
jdk-8u221-linux-x64.tar.gz
CentOS7 简易版
tomcat-connectors-1.2.4.6
httpd-2.4.38
经过测试,jdk1.8版本是可用的!不用再去找1.6和1.7了!!!


1.准备工作

pcre,apr-util,apr,这三个是apache需要的环境
未安装会提示apr not found,apr-util not found, pcre not found的信息
这三个包编译缺的依赖诸如gcc,都可以使用yum自动安装,不用特别去找

安装pcre-8.42.tar.gz,官网可以下载,注意不要安装pcre2,apache不识别的
pcre有点难找,所以我给出连接pcre下载连接
我的所有包放在/home/User下,解压缩命令写自己的路径

tar -zxvf pcre-8.42.tar.gz
cd pcre-8.42
./configure --prefix=/usr/local/pcre
make
make install

这里注意,pcre可以通过yum安装和手动安装两种方式,如果想卸载yum安装的pcre,使用rpm -e时千万记得把/lib64下的libpcre几个文件备份,或者提前开启ssh,拷贝其他虚拟机的。而且,不同版本虚拟机的libpcre文件不兼容。

安装APR

tar -zxvf apr-1.6.5.tar.gz
cd apr-1.6.5
 ./configure --prefix=/usr/local/apr
 make
 make install

安装APR-util

tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
 ./configure --prefix=/usr/local/apr-util
 make
 make install

2安装apache集群与tomcat

tar -zxvf httpd-2.4.38.tar.gz
cd http-2.4.38
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all
make
make install

如果环境装好,但是提示不存在,请使用以下命令

./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/bin --with-pcre=/usr/local/pcre

安装完成以后,启动apache,启动apache的目的是生成mod_jk.so这个文件,顺便看看安装成功与否

/usr/local/apache2/bin/apachectl start

关闭:

/usr/local/apache2/bin/apachectl stop

这里给出为apacher注册系统服务

cp /usr/local/http/bin/apachectl /etc/re./d/init.d/httpd
vi httpd
vi httpd
#找到:#!/bin/sh
#另起一行,增加:
# chkconfig: 35 70 30
# description: Apache
注册服务: chkconfig --add httpd

注册完成,启动服务就是service httpd start,不用再带路径启动了
启动成功后,访问ip地址,能看到It works!则成功安装
第一次使用可能需要打开端口外网权限

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd reload

--permanent的意思是 长久有效

安装tomcat-connectors

tar -zxvf tomcat-connectors-1.2.46.tar.gz
cd tomcat-connectors-1.2.46/native
./buildconf.sh
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni
make
make install

安装tomcat

tar -zxvf apache-tomcat-7.0.96.tar.gz
mv apache-tomcat-7.0.96.tar.gz /usr/local/tomcat1
tar -zxvf apache-tomcat-7.0.96.tar.gz
mv apache-tomcat-7.0.96.tar.gz /usr/local/tomcat2

tomcat配置主要集中才conf/server.xml,里边集成了大量预设的配置,自由注释,简单轻便。
由于我是单个主机,所以需要改端口,多个服务器的话,就不用改端口,但记得配置文件端口一一对应


3配置文件项

配置文件默认启动两个connector,在ip正确,端口正确,还连不上,如果apache连不到tomcat就注释上边的connect,这是某种情况的解决方案

注意自己配置文件里是否启动了两个AJP连接,需要删除一个

改动1:

···
#AJP 端口改为6009,另一个改为7009
<Connector port="6009" protocol="AJP/1.3" redirectPort="8443" />
···
# 添加jvmRoute,注意属性要和workers.properties文件对应,另一个tomcat同理为tomcat2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

改动2:
在<Engine/>(/是为了markdown排版)中添加关于集群的设置

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
        <Manager 
            className="org.apache.catalina.ha.session.BackupManager" 
            expireSessionsOnShutdown="false" 
            notifyListenersOnReplication="true"
            mapSendOptions="6"
        />
 
        <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"/>
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster> 

address中把auto改为该服务器的ip,这就基本完成tomcat的配置。接下来是apache的
进入apache安装目录下的conf/http.conf文件,文件末尾追加

LoadModule jk_module modules/mod_jk.so
# Specify jk log file.
JkLogFile /var/log/mod_jk.log
JkShmFile /var/log/mod_jk.shm
# Specify jk log level [debug/error/info]JkLogLevel info
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
# 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 /* loadbalancer

这里有两个注意的点

  1. JkShmFile在低版本没用,高版本需要配置,不然报错No JkShmFile defined in httpd.conf
  2. JkMount /* loadbalancer 在老版本的应该是 controller,这里先不讲,下个文件讲

和http.conf同级文件夹,新建workers.properties文件,写入

worker.list = loadbalancer,tomcat1,tomcat2,status
#========tomcat1========
worker.tomcat1.port=6009
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=7009
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#server的加权比重,值越高,分得的请求越多
#----------------------------------------------------------------------
# load balancerworker -负载均衡控制器
# ---------------------------------------------------------------------
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2  #指定分担请求的tomcat
worker.loadbalancer.sticky_session=1    #设置为粘性session
worker.loadbalancer.sticky_session_force=0  #设置当多次请求未响应,请求将转发
worker.status.type=status

这里注意,过去版本是controller,现在我用的是loadbalancer,在配置过程中发现,controller已经不被识别,一直报错说不是正确类型
如果日志文件提示Could not get member list for lb worker from map,这说明你ajp13指定的端口和workers文件没有对应。

到此,所有配置完毕
启动两个tomcat后,启动集群

# 未配置服务启动方式
/usr/local/apache2/bin/apachectl start
# 已配置服务启动方式
service httpd start

一些PS

多个服务器模式需要打开端口外网权限,这里给几个例子,具体由你自己的服务器配置去打开端口

firewall-cmd --zone=public --add-port=6009/tcp --permanent
firewall-cmd --zone=public --add-port=7009/tcp --permanent
firewall-cmd --zone=public --add-port=4000-4100/tcp --permanent
firewall-cmd reload

--permanent的意思是 长久有效


一台主机启动多个tomcat,注意Connect TCP模式的端口,端口被占用了就不会启动了

怎么在tomcat挂载项目不是这篇的重点,就不写了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容