需求缘由

最近接收了一个新的工具业务: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

智能推荐

【Java】一台服务器配置多个Tomcat的更多相关文章

  1. 同一台服务器配置多个tomcat服务的方法

    要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...

  2. 一台服务器配置多个TOMCAT

    如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...

  3. linux一台服务器配置多个Tomcat

    前提:linux服务器上已经运行多个Tomcat,再去搭建一个Tomcat服务 1.官网下载Tomcat 2.上传到服务器指定一个目录/usr/local/tomcat 3.然后解压tar包,tar ...

  4. 【适合公司业务】全网最详细的IDEA里如何正确新建【普通或者Maven】的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【多个子项目】并存)(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...

  5. 全网最详细的IDEA里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【一个子项目】并存)(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...

  6. 全网最详细的Eclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...

  7. 全网最详细的MyEclipse里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(图文详解)

    不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在eclipse里,则是File -> new ->  ...

  8. java基础76 web服务器之Tomcat服务器

    (注:本文是以“压缩版Tomcat”为例,展开描述的) 一.Tomcat服务器的介绍 1.服务器 1.1.服务器的种类 从物理上讲:服务器就是一台pc机器.至少8核/8G以上.内存至少用T来计算.宽带 ...

  9. 【Centos7】Tomcat安装及一个服务器配置多个Tomcat

    完成解压 参考 http://www.cnblogs.com/h--d/p/5074800.html https://www.cnblogs.com/tudou-22/p/9330875.html 步 ...

随机推荐

  1. linux每日命令(35):grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  2. Python 读取csv的某行

    站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...

  3. Android开发(十五)——ListView中Items的间距margin

    ListView中Items没有margin 参考:http://www.cnblogs.com/xitang/p/3677528.html

  4. Linux查看文件总的数据行数,并按行拆分

    先利用 wc -l BLM.txt       读出 BLM.txt 文件一共有多少行. 再 1. 以行数拆分 -l 参数: split –l 50 原始文件 拆分后文件名前缀 例:以50行对文件进行 ...

  5. Java如何读取和下载网页?

    在Java编程中,如何读取和下载网页? 以下示例显示如何使用net.URL类的URL()构造函数来读取和下载网页. package com.yiibai; import java.io.Buffere ...

  6. 原生JS封装ajax方法

    http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...

  7. extern、static、restrict、volatile 关键字

    extern extern的两个作用: 修饰变量或函数,提示编译器此变量或函数是在其它文件中定义的,但要在此处引用: 进行链接指定,如: extern "C" void fun(i ...

  8. Java中的引用类型Scanner类和随机类型Random

    Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型.   引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. ...

  9. Linux/Centos下使用mtr做路由图进行网络分析

    工具作用: mtr可以做路由图供我们分析哪里出现故障或者是否存在有网络拥塞的情况 1. 首先安装mtr 工具 使用yum  安装 :  yum  install mtr -y  2. 使用 我经常在工 ...

  10. 一篇文章带你看懂Cloudflare信息泄露事件

    版权声明:本文由贺嘉  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁  ...