• [转载]Tomcat单机多实例配置


    Tomcat单机多实例配置

    当一个进程的线程超过500个的话,那么这个进程的运行效率会变得很低。因为一个进程产生过多的线程,CPU资源会浪费在线程间切换过程当中。但当服务器配置很高的情况下,如:32G内存,16核的CPU。这样一台高配的机器上只装一个Tomcat实例,会有点浪费。其实我们可以根据服务器的硬件配置,配置多个Tomcat实例,充分利用硬件的资源。你第一时间可能会想到,直接下载多份Tomcat安装包,直接解压,改下端口跑起来不就可以了? 这样也是可以的,但不好维护。假设你在一台机器上安装了5个Tomcat实例,日后要升级Tomcat时,你需要将新版本的tomcat复制并覆盖掉旧的5个tomcat安装程序和配置,所以还是挺麻烦的。下面介绍多个Tomcat实例共享同一个安装包的配置方法。

    安装环境

    操作系统:CentOS7 64位 Mini版 
    JDK:1.8,安装目录:/opt/jdk1.8 
    Tomcat:Tomcat8.0.35,安装目录:/opt/apache-tomcat-8.0.35 
    配置3个Tomcat实例组件一个集群: 
    /opt/tomcat_instance/tomcat1 
    /opt/tomcat_instance/tomcat2 
    /opt/tomcat_instance/tomcat3

    安装步聚

    1> 下载Tomcat安装包并解压,目录结构如下:

    drwxr-xr-x. 3 root root  4096 5月  26 01:41 bin
    drwxr-xr-x. 3 root root  4096 6月  28 16:14 conf
    drwxr-xr-x. 2 root root  4096 5月  25 22:12 lib
    drwxr-xr-x. 2 root root  4096 6月  28 15:48 logs
    drwxr-xr-x. 2 root root  4096 5月  25 22:12 temp
    drwxr-xr-x. 7 root root  4096 5月  25 22:14 webapps
    drwxr-xr-x. 3 root root  4096 5月  12 05:57 work

    2> 在/opt/tomcat_instance下分别创建3个实例的目录:

    shell> mkdir -p /opt/tomcat_instance/tomcat1
    shell> mkdir -p /opt/tomcat_instance/tomcat2
    shell> mkdir -p /opt/tomcat_instance/tomcat3

    3> 拷贝tomcat安装目录下的conf目录分别放入3个实例目录中

    shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat1/
    shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat2/
    shell> copy -R /opt/apache-tomcat-8.0.35/conf /opt/tomcat_instance/tomcat3/

    4> 在tomcat实例下创建实例启动和停止脚本

    启动和停止脚本放到tomcat实例的bin目录下

    a) 启动脚本

    shell> mkdir -p /opt/tomcat_instance/tomcat[1-4]/bin
    shell> touch startup.sh
    shell> chown +x startup.sh

    将以下脚本拷贝到startup.sh文件中,注意修改CATALINA_BASE指向的tomcat实例路径:

    #!/bin/bash
    export JRE_HOME=/opt/jdk1.8/jre
    export CATALINA_HOME=/opt/tomcat8
    export CATALINA_BASE="/opt/tomcat_instance/tomcat1"
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat1"
    
    #创建logs目录
    if [ ! -d "$CATALINA_BASE/logs" ]; then
      mkdir $CATALINA_BASE/logs
    fi
    
    #创建temp目录
    if [ ! -d "$CATALINA_BASE/temp" ]; then
      mkdir $CATALINA_BASE/temp
    fi
    
    # 调用tomcat启动脚本
    bash $CATALINA_HOME/bin/startup.sh "$@"

    b) 停止脚本

    shell> touch shutdown.sh
    shell> chown +x shutdown.sh
    shell> vim shutdown.sh

    拷贝以下脚本到shutdown.sh文件中:

    #!/bin/bash
    export JRE_HOME=/opt/jdk1.8/jre
    export CATALINA_HOME=/opt/tomcat8
    export CATALINA_BASE="/opt/tomcat_instance/tomcat1"
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    
    bash $CATALINA_HOME/bin/shutdown.sh "$@"

    5、修改每个tomcat实例中server.xml中的端口

    <Server port="8005" shutdown="SHUTDOWN">
      ...
      <Service name="Catalina">
        ...
    
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        ...
    
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        ...
    
        <Engine name="Catalina" defaultHost="localhost">
            ...
          <Host name="localhost"  appBase="/opt/deploy/webapps"
                unpackWARs="true" autoDeploy="true">
            ...
          </Host>
        </Engine>
      </Service>
    </Server>

    上面是裁剪过后的server.xml,分别修改以上三个端口(Server、HTTP、AJP),不要和其它实例的端口或系统已经占用的端口发生冲突。

    6、创建实例部署应用的目录

    shell> mkdir -p /opt/deploy/webapps

    所有实例的app默认都部署到/opt/deploy/webapps目录下,注意修改server.xml中Host节点的appBase属性的值。

    7、启动服务

    shell> /opt/tomcat_instance/tomcat1/bin/startup.sh
    shell> /opt/tomcat_instance/tomcat2/bin/startup.sh
    shell> /opt/tomcat_instance/tomcat2/bin/startup.sh

    服务器启动之后,会分别在相应的实例目录下生成logs、temp、work和webapps目录。另外也可以在实例目录下创建lib目录,用于存放app的jar。现在来看实例的安装目录,就和tomcat的安装包解压后的目录结构一样了,但所有实例共享同一套tomcat安装程序的bin和lib。后面如果需要升级tomcat或修改tomcat脚本的相关配置,只需要更新这一套程序就行,也方便了日后的维护。tomcat1实例的目录结构如下:

  • 相关阅读:
    gulp-css-spriter 将css代码中的切片图片合并成雪碧图
    通过JS模拟select表单,达到美化效果[demo]
    jQuery拖拽 & 弹出层
    sublime text 快速编码技巧 GIT图
    原生JS不到30行,实现类似javascript MVC的功能-minTemplate
    javascript拖拽原理与简单实现方法[demo]
    滚动焦点图实现原理和实践[原创视频]
    谈一谈值类型与引用类型和装箱与拆箱
    【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)
    由JS函数返回值引发的一场”血案"
  • 原文地址:https://www.cnblogs.com/wendelhuang/p/6931660.html
Copyright © 2020-2023  润新知