生产环境的java项目如何更新

小面 发布于 2014/11/18 11:45
阅读 1K+
收藏 1
        java项目上线后,可能随时会迭代更新,修复bug。问题来了,更新项目大多数时候需要重启服务,但是在生产环境可不能随便重启服务的。大家是如何处理这个问题的呢?我能想到的就是,部署两个应用,用nginx做负载,需要更新的时候,一个应用生产,一个应用更新,完了再更新另一个。求教还有没有什么方法呢?
加载中
1
红薯
红薯

没错,我们就是这么干的

0
郭幻程
郭幻程
在夜深人静的时刻,停(啪) 机(啪)维(啪)护 (!)
0
Feng_Yu
Feng_Yu

不着急发布的话,在没人用的时候更新即可。

否则用双实例吧

0
抢小孩糖吃
抢小孩糖吃

把所有Java的实现的东西都实现成为WebService或者REST 或者等等。。。接口,多计算机启动WebService,之后进行服务变更,小改动只要接口统一,可以进行平滑切换,大改动请把调用接口独立出来,例如用PHP实现等方式。

简单一些的可以多服务器切换。

0
cantellow
cantellow

都是这么干的,代码流:

本机开发——》测试机——》线上

可以做成自动化的,只需要执行一个shell就搞定。

0
cantellow
cantellow

可以给你一个自动部署到测试机的脚本做参考

=======================

#!/bin/sh
SERVER="xxx.xxx.xxx.xxx"
SERVER_DIR="deployment/"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_25"
JRE_HOME="/usr/lib/jvm/jdk1.7.0_25/jre"
TOMCAT_HOME="tomcat/apache-tomcat-7.0.42"

echo ">> stop tomcat..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME; sh $TOMCAT_HOME/bin/shutdown.sh;"

echo ">> gradle war..."
gradle clean
gradle war

mkdir web
cd web
jar -xvf ../build/libs/server.war
#和tomcat自带的包冲突
rm -f WEB-INF/lib/jsp-api-2.0.jar
rm -f WEB-INF/lib/servlet-api-2.4.jar
#applicationContext变成dev模式,同时保留dis模式,方便部署
mv -f WEB-INF/applicationContext.xml WEB-INF/applicationContext.dis
mv -f WEB-INF/applicationContext.dev WEB-INF/applicationContext.xml
cd ..

#增量同步
echo ">> rsync..."
rsync -rtzvlp --delete web web@$SERVER:$SERVER_DIR

rm -rf web

echo ">> start tomcat,remote debug port on 8000..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME;cd $TOMCAT_HOME; sh bin/catalina.sh jpda start; tail -f logs/catalina.out;"

小面
自动部署最好还是做任务计划在凌晨做,我说的是在白天的生产环境中有紧急的更新的情况,特别是涉及到支付的业务要特别谨慎。
干死it
干死it
可以参考下
0
小胸弟
小胸弟

你们的还好,我是做存储的,高峰的时候1分钟有100W次读请求,没有啥负载均衡设备,都是TCP直接连接的。

现在几百台机器了,手动都上不动了,不过我们公司内部有自动部署系统。不然几万台服务器上线不会累死去啊。

0
程小猿
程小猿

负载均衡

自动部署


0
_金角大王_
_金角大王_

引用来自“cantellow”的评论

可以给你一个自动部署到测试机的脚本做参考

=======================

#!/bin/sh
SERVER="xxx.xxx.xxx.xxx"
SERVER_DIR="deployment/"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_25"
JRE_HOME="/usr/lib/jvm/jdk1.7.0_25/jre"
TOMCAT_HOME="tomcat/apache-tomcat-7.0.42"

echo ">> stop tomcat..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME; sh $TOMCAT_HOME/bin/shutdown.sh;"

echo ">> gradle war..."
gradle clean
gradle war

mkdir web
cd web
jar -xvf ../build/libs/server.war
#和tomcat自带的包冲突
rm -f WEB-INF/lib/jsp-api-2.0.jar
rm -f WEB-INF/lib/servlet-api-2.4.jar
#applicationContext变成dev模式,同时保留dis模式,方便部署
mv -f WEB-INF/applicationContext.xml WEB-INF/applicationContext.dis
mv -f WEB-INF/applicationContext.dev WEB-INF/applicationContext.xml
cd ..

#增量同步
echo ">> rsync..."
rsync -rtzvlp --delete web web@$SERVER:$SERVER_DIR

rm -rf web

echo ">> start tomcat,remote debug port on 8000..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME;cd $TOMCAT_HOME; sh bin/catalina.sh jpda start; tail -f logs/catalina.out;"

+1
返回顶部
顶部