[转载]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 "[email protected]"

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 "[email protected]"

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实例的目录结构如下:

时间: 2024-08-07 13:07:51

[转载]Tomcat单机多实例配置的相关文章

Tomcat单机多实例配置

配置多实例目录: 安装好tomcat后,创建三个实例目录,将主站点的:conf. work .temp.logs目录分别复制到3个实例目录下. 1 [[email protected] tomcat]# mkdir {bbs.fox.com,www.fox.com,e-mail.fox.com} 2 [[email protected] tomcat]# cp -r conf logs temp work ./bbs.fox.com 3 [[email protected] tomcat]# c

Tomcat(tomcat虚拟主机,Tomcat日志,单机多实例配置实战,JVM设置和连接数设置)

一.配置Tomcat的虚拟主机 一.Tomcat虚拟主机基本配置. 在介绍nginx和apache的时候,我们都有提过虚拟主机,在tomcat中也有这么一说, [[email protected] ~]# vim /usr/local/tomcat/conf/server.xml 搜索/Host,其中<Host>和</Host>之间的配置为虚拟主机配置部分,name定义域名,appBase定义应用的目录,Java的应用通常是一个Jar的压缩包,将jar的压缩包放到appBase目录

Docker 快速验证 tomcat 单机多实例方案

概述 主要讲的是解决问题的思路.当然也附带了尽可能详细的步骤,感兴趣的童鞋可以一步一步跟着来实践一把.因为运维职业的缘故,基本上是把事故当故事来写了,希望能够喜欢. 缘起 至少10年了,没在一线玩过 Tomcat 了,这次客户现场就来了一场遭遇战.虽然客户说了他来搭建,但是项目进度不等人,还是自己动手吧.当然了,新服务器是要走流程申请的,只能在现有服务器想办法.犹记得当年解决 Tomcat 部署这些都是小菜,没想到在苛刻的商业环境中,处处是坑,步步有雷.不过,咱干过开发也干过运维,这点儿动手的事

Tomcat单机多实例部署-多项目部署

博文说明[前言]: 本文将通过个人口吻介绍Tomcat单机多实例部署,在目前时间点[2017年8月13号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文参考文献及引用文章链接: 1.http://wiki.jikexueyuan.com/project/tomcat/ [Tomcat 8 权威指南-极客学院出品] 2.<Tomcat 权威指南> 2.http://www.cn

单Tomcat的多实例配置原理及应用

转自 http://www.cher7.com/?id=12919 我们常有在JAVAWeb应用部署或依赖Tomcat应用中遇到单机多实例的需求,解决方案一般有: 1.复制Tomcat到不同目录,更改Server.xml等配置文件: 2.部署不同应用实例到webapps目录下或直接将多项目部署到同一Tomcat实例中. 以此解决多项目部署问题,不能说以上两种解决方案不对,只是这种解决思路有以下几个问题: 复制多Tomcat难于维护.两三个实例还好说,如果配置十个以上的实例,那对于统一启动.Tom

tomcat单机多实例

catalina.home指向公用信息的位置,就是bin和lib的父目录. catalina.base指向每个Tomcat目录私有信息的位置,就是conf.logs.temp.webapps和work的父目录. 仅运行一个Tomcat实例时,这两个属性指向的位置是相同的. tomcat单机多实例的部署. 步骤如下: 1.下载一个免安装版本的tomcat7. 2.在tomcat目录创建一个tomcat-ins文件夹,该文件夹作为多实例的根目录. 3.分别针对每个实例创建自己的tomcat目录文件夹

Redis的make,make test,make install、单机多实例配置,以及API程序写数据!

最近学习王家林老师的大数据蘑菇云行动,要实现将Spark Streaming分析的数据写入到Redis.今天正好开始入手.  一.Ubuntu16安装Redis3.2.1 遇到了不少的问题,其中,make倒是没问题,make test的时候,出现了: !!! WARNING The following tests failed: *** [err]: Slave should be able to synchronize with the master in tests/integration/

tomcat之 Tomcat 7.0.78 单机多实例配置

前言:JDK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的javaSDK. JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库.所以要想运行jsp的程序必须要有JDK的支持,理所当然安装Tomcat的前提是安装好JDK. 一. JDK安装 1. 查看os版本[[email protected]MySQL ~]# uname -aLinux mysql 2.6.

centos7mysql5.6.30单机多实例配置主主复制

1.在原来单实例的基础上修改配置/usr/my.cnf [mysqld_multi] mysqld=/usr/bin/mysqld_safe mysqladmin=/usr/bin/mysqladmin user=root [mysqld3306] port=3306 socket=/var/lib/mysql/mysql.sock pid-file=/var/lib/mysql/localhost.localdomain.pid datadir=/var/lib/mysql/ user=roo