阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat单机多实例

276次阅读
没有评论

共计 2523 个字符,预计需要花费 7 分钟才能阅读完成。

在这篇文章中,我们将会看到在单机单用户基础上,如何运行多个 tomcat 实例。

我们首先看到的是 tomcat 的目录结构,其每个文件夹有以下用途:

  • bin – 包含所有运行 tomcat 的二进制和脚本文件
  • lib – 包含 tomcat 使用的所有共享库
  • conf – 包含配置信息,如 tomcat 绑定的端口等
  • logs – 包含所有的日志文件
  • temp – 此目录是 tomcat 存放的临时文件
  • webapps – 此目录非常重要,这里存放所有的应用程序 war 包
  • work – 如果应用程序包含 jsp 文件,那么每个 jsp 文件会被编译转化为 servlet,存放于此
 

Tomcat 单机多实例

当我们运行 Tomcat 时,会用到 5 个环境变量。他们是:

  • CATALINA_HOME
  • CATALINA_BASE
  • CATALINA_TMPDIR
  • JRE_HOME/JAVA_HOME
  • CLASSPATH

在以上列表中,CATALINA_HOME 和 JAVA_HOME 是必要的环境变量。其它的都可以通过 CATALINA_HOME 来转换,是可选的。

CATALINA_HOME – 此环境变量是 tomcat 安装 / 提取的根目录。所以通过 CATALINA_HOME,可以得到 bin 和 lib 目录。

CATALINA_BASE – 如果不指定则是 CATALINA_HOME 的值。该变量指向的目录里面包括每个运行实例需要使用自己的 conf、logs、temp、webapps、work 目录。

一般运行 Tomcat 的方法是,只设置 CATALINA_HOME 变量,执行 startup.sh 脚本,startup.sh 会自动转换其它未设置的变量。

Tomcat 单机多实例

 

startup.sh 设置环境变量时调用 catalina.sh 脚本,此脚本会读取 CATALINA_BASE 的值,在 $CATALINA_BASE/conf 目录,得到 server.xml。这个文件时 Tomcat 的核心配置,它包含所有的配置信息,如 shutdown 端口,connector 端口,主机名称,应用目录等。例如,Tomcat 通常使用 8080 作为连接端口,所以我们可以通过 http://localhost:8080/ 访问。

如果我们已经设置 $CATALINA_BASE,Tomcat 就会从该变量所对应的目录搜索得到 server.xml。

使用此方法可以在一台机器上运行多个 Tomcat 实例。我们不需要改变 CATALINA_HOME 值,只需要在启动 / 关闭 Tomcat 之前修改 CATALINA_BASE 值。

创建一个名为“tomcat-instance1”的目录,从 CATALINA_HOME 目录中复制 conf,logs,temp,webapps,work 目录,修改“tomcat-instance1”目录中的 conf/server.xml 文件。需要修改的端口是:Shutdown port,Connector port,ajp port 和 Redirect port。

Shutdown port – 此端口用于关闭 Tomcat。当执行 shutdown.sh 脚本时,它会给此端口发出一个信号,Tomcat 的进程会监听此端口,如果接收到这样的信号,进程会清理退出。

Connector port – 此端口是应用对外公开发布的端口。

ajp port – Web 服务器(例如 Apache 的 httpd Server)通过此端口和 Tomcat 进行通信,也可以使用它设置一个负载均衡服务器。

Redirect port – 如果此 Connector 支持非 SSL 请求和接收 SSL 请求,Catalina 会自动将请求指向到此端口。

看看示例 server.xml 文件:

1
2
3
4
5
6
7
8
<server port="8005" shutdown="SHUTDOWN">
    .....
    <connector
        connectiontimeout="20000"port="8080"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        redirectport="8443" />
    <connector port="8009" protocol="AJP/1.3" redirectport="8443" />
</server>

因为一个端口一旦被绑定,其它进程就不能再绑定,所以我们将这些端口修改为其它值。在 tomcat-instance1/conf/server.xml 文件,配置 server port =8105,connector port = 8181,ajp port = 8109。

1
2
3
4
5
6
7
8
<server port="8105" shutdown="SHUTDOWN">
    .....
    <connector
        connectiontimeout="20000" port="8181"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        redirectport="81443" />
    <connector port="8109" protocol="AJP/1.3" redirectport="81443" />
</server>

现在我们可以创建两个脚本文件来启动关闭 tomcat-instance1。

startup-instance1.sh

1
2
3
export CATALINA_BASE= /home/ramki/tomcat-instance1
cd $CATALINA_HOME/bin
./startup.sh

shutdown-instance1.sh

1
2
3
export CATALINA_BASE= /home/ramki/tomcat-instance1
cd $CATALINA_HOME/bin
./shutdown.sh

这里我们设置了 CATALINA_BASE 变量并指向新的 tomcat-instance1。因为运行 tomcat 的所有二进制文件都在 CATALINA_HOME/bin 目录,随后使用 startup/shutdown 脚本。

Tomcat 单机多实例

 

综上所述,我们可以通过创建多实例目录并修改 conf/server.xml 文件中的 port 值来运行实例。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2523字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中