【Java】一台服务器配置多个Tomcat
需求缘由
最近接收了一个新的工具业务:ipublish发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦。这尼玛 哪个公司都不敢这么牛逼的和用户说,我们网站要停服务几分钟,准备发布的。
基于这个原因我要对ipublish进行优化,如何优雅的发布代码,而用户是无感的
功能需求
发布系统自己更新迭代需求的过程中,不能停止服务,对用户是无感知的
实现设计方案
其实这个问题基本都知道解决方案,我这里就王婆卖瓜自卖自夸吧,来一张架构图

架构非常简单,通过一个LB作为反向代理,然后将所有请求转发到 后端的tomat ,后端有两个tomcat ,但是提供服务的只能是某一个tomcat
操作步骤
前提条件
LB 使用的Nginx 监听 80端口
配置两个tomcat 一个 8080 端口,一个 8081端口
Nginx
No.1 安装
#Ubuntu
sudo apt-get install nginx #Centos
sudo yum install nginx
No.2 配置
如下配置,我给大家截图下重点,可以看到 upstream 中有8080 8081两个配置,其中后面有一个down关键字,表示对应端口不提供服务,
upstream ipublish {
server 127.0.0.1:8080 weight=1 down;
server 127.0.0.1:8081 weight=1 ;
}
server {
listen 80 default_server;
server_name www.54php.cn;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://ipublish;
}
}
Tomcat
其实tomcat 非常容易安装,因为官网提供编译后的可以直接下载运行就行了,我们这里重点讲解如何配置两个tomcat 监听不同的端口
No.1 下载
官网下载地址,这里我们下载tomcat7, http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.78/bin/apache-tomcat-7.0.78.tar.gz
No.2 准备
下载完成后,将 压缩文件解压,加入解压之后 文件夹名称是apache_tomcat,此时我们复制出两个文件夹,名称分别是tomcat_8080,tomcat_8081,这两个目录就是用来配置两个端口
No.3 配置
以 tomcat_8080为例,tomcat_8081配置逻辑一样
修改 tomcat_8080/conf/server.xml
#找到如下地方,将port 改为7080(tomcat_8081的这个地方改为 7081)
<Server port="8070" shutdown="SHUTDOWN"> #找到如下地方,将port 改为8080(tomcat_8081的这个地方改为 8081)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改tomcat_8080/bin/start.sh
#找到如下地方,增加配置
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export JAVA_VERSION=jdk1.8.0_101
export JAVA_HOME=/usr/local/$JAVA_VERSION
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CATALINA_HOME=/usr/local/tomcat_8080 #此处根据各种路径配置
export CATALINA_BASE=/usr/local/tomcat_8080 #此处根据各种路径配置
No.4 启动
例如开始提供服务的是tomcat_8080,然后我要更新东西的时候我就把代码放入tomcat_8081,然后启动8081端口的tomcat服务,由于java启动是需要时间的,所以等启动好了之后,我就把nignx 中的 upstream 8080端口加上down关键字,然后nginx reload,这样就是8081 对外提供服务,我在关闭8080服务,这样对用户就是无感更新了
效果展示
主要给大家展示一下我们风骚的ipublish系统 界面



原文地址:【Java】一台服务器配置多个Tomcat
标签:java 发布系统 ipublish tomcat nginx upstream
智能推荐
- 【Git 使用笔记】第四部分:git在公司中的开发流程
- 【实战】Docker 入门实战一:安装Dockeer
- 【运维工具】logrotate 日志管理神器
- 【运维工具】Git代码发布系统
- 金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?
【Java】一台服务器配置多个Tomcat的更多相关文章
- 同一台服务器配置多个tomcat服务的方法
要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...
- 一台服务器配置多个TOMCAT
如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...
- linux一台服务器配置多个Tomcat
前提:linux服务器上已经运行多个Tomcat,再去搭建一个Tomcat服务 1.官网下载Tomcat 2.上传到服务器指定一个目录/usr/local/tomcat 3.然后解压tar包,tar ...
- 【适合公司业务】全网最详细的IDEA里如何正确新建【普通或者Maven】的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【多个子项目】并存)(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...
- 全网最详细的IDEA里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【一个子项目】并存)(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...
- 全网最详细的Eclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...
- 全网最详细的MyEclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在eclipse里,则是File -> new -> ...
- java基础76 web服务器之Tomcat服务器
(注:本文是以“压缩版Tomcat”为例,展开描述的) 一.Tomcat服务器的介绍 1.服务器 1.1.服务器的种类 从物理上讲:服务器就是一台pc机器.至少8核/8G以上.内存至少用T来计算.宽带 ...
- 【Centos7】Tomcat安装及一个服务器配置多个Tomcat
完成解压 参考 http://www.cnblogs.com/h--d/p/5074800.html https://www.cnblogs.com/tudou-22/p/9330875.html 步 ...
随机推荐
- 小米手机安装mitmproxy证书
[本文出自天外归云的博客园] 问题描述 小米手机在连接mitmproxy代理后通过浏览器访问mitm.it下载android证书后无法成功安装证书 设备:Redmi Note 2(红米手机) 解决方法 ...
- Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)
(1)rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名. (2)dense_rank函数返回一个唯一的值, ...
- Linux CentOS 6.9 Minimal 编译 OpenJDK 7
今天学习<深入理解Java虚拟机:JVM高级特性与最佳实践>一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节. 一.前期准备 约定:工具默认安装目 ...
- linux 如何快速的查找日志中你所要查找的信息
在工作中我总会通过日志来查找相关问题,但有时候日志太多有不知道又不知道日志什么时候打印的,这时我们可以通过一下方法来查找: 1.把目录跳到你日志文件存放的地方 2.grep 关键字 * 例如 ...
- docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中
需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...
- [Bayes] Point --> Line: Estimate "π" by R
“半个数学系 + 一个计算机科学系 = Deep Learning初级班” simulation = function(sampleSize){ c = rep(0,sampleSize) // &l ...
- Android文档-开发者指南-第一部分:入门-中英文对照版
发布的博客,排版太不行了,整理下发在百度盘上了: 第一部分:Introduction(入门) 0.Introduction to Android(引进到Android) 1.Application F ...
- 【python】并查集
转自:http://blog.csdn.net/rav009/article/details/12781899 # -*- coding: UTF-8 -*- class unionfind: def ...
- Fastjson 爆出远程代码执行高危漏洞,更新版本已修复
fastjson近日曝出代码执行漏洞,恶意用户可利用此漏洞进行远程代码执行,入侵服务器,漏洞评级为“高危”. 基本介绍fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器 ...
- CentOS6.5安装JDK8
上传JDK源码包,我用的jdk-8u144-linux-x64.tar.gz.解压它 tar -zxvf jdk-8u144-linux-x64.tar.gz 更改环境变量 vim /etc/prof ...