专栏首页未读代码的专栏Tomcat 的单机多实例配置

Tomcat 的单机多实例配置

多实例

有时候需要在一个服务器上部署多个Tomcat,通过不同的端口进行区分,比如,反向代理。但是不想简单的通过复制Tomcat来实现,这样既不方便以后的升级也不方便管理,那么这时候就需要配置Tomcat的单机多实例了。

Tomcat 下载

Tomcat 的下载可以直接到Tomcat官方网站下载自己需要的版本,我这里下载的Tomcat8.5.32。

// 解压
tar -zxvf apache-tomcat-8.5.32.tar.gz

可以看到解压后目录如下:

niu@ubuntu:~/develop/test$ cd apache-tomcat-8.5.32/
niu@ubuntu:~/develop/test/apache-tomcat-8.5.32$ ll
total 120
drwxr-x--- 2 niu niu  4096 8月  10 01:35 bin/
drwx------ 2 niu niu  4096 6月  20 12:53 conf/
drwxr-x--- 2 niu niu  4096 8月  10 01:35 lib/
-rw-r----- 1 niu niu 57092 6月  20 12:53 LICENSE
drwxr-x--- 2 niu niu  4096 6月  20 12:50 logs/
-rw-r----- 1 niu niu  1723 6月  20 12:53 NOTICE
-rw-r----- 1 niu niu  7138 6月  20 12:53 RELEASE-NOTES
-rw-r----- 1 niu niu 16246 6月  20 12:53 RUNNING.txt
drwxr-x--- 2 niu niu  4096 8月  10 01:35 temp/
drwxr-x--- 7 niu niu  4096 6月  20 12:51 webapps/
drwxr-x--- 2 niu niu  4096 6月  20 12:50 work/

配置多实例模版

要实现单Tomcat的多实例启动,首先我们要修改一下当前的Tomcat目录结构具体操作如下。为了方便,我们会先配置一个模版实例,然后在模版实例中编写一个启动停止shell脚本。以后扩展实例只需要拷贝一份修改端口号。

// 删除无用文件
rm LICENSE 
rm NOTICE 
rm RELEASE-NOTES
rm RUNNING.txt
// 创建WEB实例模版文件夹,以后部署新实例只需要拷贝一份
mkdir web-template
// 移动实例文件到实例模版文件夹
mv conf/ ./web-template/
mv logs/ ./web-template/
mv tem/ ./web-template/
mv temp/ ./web-template/
mv webapps/ ./web-template/
mv work/ ./web-template/

在模版文件夹下编写启动停止Tomcat的shell脚本。

// 新建sehll脚本
vim tomcat.sh

输入如下内容:

RETVAL=$?
# tomcat实例目录
export CATALINA_BASE="$PWD"
# tomcat安装目录,改成自己的
export CATALINA_HOME="/home/niu/develop/test/apache-tomcat-8.5.32"
# 可选
export JVM_OPTIONS="-Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Start Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stop Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage:$0 {start|stop}"
exit 1
;;
esac
exit $RETVAL

保存退出,赋予执行权限。

chmod +x tomcat.sh

经过上面的操作,现在的Tomcat目录结构如下:

apache-tomcat-8.5.32
├── bin
├── lib
└── web-template
    ├── conf
    ├── logs
    ├── temp
    ├── webapps
    └── work

测试实例模版

实例模版中包含config文件夹,也就是此实例的配置文件,可以修改端口号等信息。我们没有进行修改过,默认也就是8080。webapps文件夹中的ROOT目录也就是Tomcat的默认发布目录,我们没有进行修改,里面存放的是Tomcat默认首页信息。

// 启动模版实例进行测试,可以看到正常启动的日志
tomcat.sh start
// 停止则使用stop
tomcat.sh stop

成功启动后,访问IP+8080进行测试。

Tomcat首页

看到属性的页面,大功告成。距离多实例只有一步之遥。

增加一个实例

增加一个实例,只拷贝一份模版实例。然后修改端口号即可。不然会因为端口占用而无法启动。

# 拷贝一份实例
cp -r web-template/ web-9090
# 修改端口号为9090
vim conf/server.xml
# 修改HTTP端口号从8080变为9090,第69行左右
<Connector port="9090" protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="8443" />
# 修改SHUTDOWN端口号从8005变为9005,第22行左右
ver port="9005" shutdown="SHUTDOWN">
# 保存,退出,启动
tomcat.sh start

此时可以访问IP+端口9090进行访问测试。

9090实例访问测试

到这里,多实例已经部署完成,关闭各个Tomcat。退出终端。 增加实例只需要拷贝模版实例然后修改端口号。每个实例都有自己单独的配置,可以独立管理启动。

本文分享自微信公众号 - 未读代码(weidudaima),作者:未读代码

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Springboot 系列(三)Spring Boot 自动配置

    关于配置文件可以配置的内容,在 Spring Boot 官方网站已经提供了完整了配置示例和解释。

    未读代码
  • 原来热加载如此简单,手动写一个 Java 热加载吧

    热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般...

    未读代码
  • Springboot 系列(十一)使用 Mybatis 访问数据库

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数获取结果集的过...

    未读代码
  • Tomcat 的单机多实例配置

    有时候需要在一个服务器上部署多个Tomcat,通过不同的端口进行区分,比如,反向代理。但是不想简单的通过复制Tomcat来实现,这样既不方便以后的升级也不方便管...

    黄泽杰
  • 腾讯云 CVM 实例类型

    腾讯云提供不同的实例类型来满足用户特定的使用场景。这些实例类型由 CPU、内存、存储和网络组成不同的组合。您需要根据将要运行在实例上的程序或者软件的要求,来选择...

    勤劳的小蜜蜂
  • 云服务器 CVM

    https://cloud.tencent.com/redirect.php?redirect=1014&cps_key=6f5f5aedea72d213ca3...

    勤劳的小蜜蜂
  • KNN(k-nearest neighbor的缩写)原理及使用

    如果一个实例在特征空间中的K个最相似(即特征空间中最近邻)的实例中的大多数属于某一个类别,则该实例也属于这个类别。所选择的邻居都是已经正确分类的实例

    用户5745385
  • 腾讯云推出竞价实例 云服务器开销最高下降90%

    伴随着数字化技术的广泛应用,企业业务上云成为大势所趋,企业在服务器等方面的IT成本得以大幅下降。但是追求性价比之路永无止境,企业的长久发展依赖成本的长期优化,对...

    尊托云数
  • 类 对象 实例的区别

    对象是new 过的类 (包含 可以实例化的 和不能实例化的 ,比如抽象类就不能实例化)

    lilugirl
  • Spring Cloud Finchley版中Consul多实例注册的问题处理

    问题:该问题可能在开发阶段不一定会发现,但是在线上部署多实例的时候,将会发现Consul中只有一个实例。

    程序猿DD

扫码关注云+社区

领取腾讯云代金券