美文网首页
这可能是最详细完整的tomcat集群配置教程

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

作者: lemonan | 来源:发表于2019-10-14 17:42 被阅读0次

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

    遇到出错不要慌,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挂载项目不是这篇的重点,就不写了

    相关文章

      网友评论

          本文标题:这可能是最详细完整的tomcat集群配置教程

          本文链接:https://www.haomeiwen.com/subject/actdmctx.html