作者/来源:yixinu.com
栏目:运维/编程
日期:2013-09-03 17:28:32
服务器5台
172.16.0.1(LB)
172.16.1.21(Real Server),以下简称 vs1
172.16.1.22(Real Server),以下简称 vs2
172.16.1.23(Real Server),以下简称 vs3
172.16.1.24 (这台是线上测试用),以下简称 vs4
WebServer/集群服务 : nginx
平滑升级步骤:
1、将开发部发过来的代码发布到vs4上面,开启一个测试端口映射到vs4的测试环境端口,这是为了不让用户看到测试版环境。
2、通知测试部测试代码,待测试完了,完全可以上线了,将vs4上的代码同步到vs1,vs2,vs3上面
3、同步方式采用分批同步,首先关闭vs2和vs3,同步这两台机器,待vs2和vs3能正常访问了,再开启vs2和vs3,关闭vs1并同步。
脚本如下:
#!/usr/bin/env bash echo '#从nginx 集群 关闭 vs2,vs3' /bin/sed -i 's/server 172.16.1.22/#server 172.16.1.22/g' /usr/local/nginx-1.4/conf/nginx.conf /bin/sed -i 's/server 172.16.1.23/#server 172.16.1.23/g' /usr/local/nginx-1.4/conf/nginx.conf /usr/local/nginx-1.4/sbin/nginx -s reload echo '#关闭 vs2,vs3 的tomcat服务器' /usr/bin/ssh root@172.16.1.22 "/etc/init.d/tomcat_order stop" /usr/bin/ssh root@172.16.1.22 "/etc/init.d/tomcat_taoye stop" /usr/bin/ssh root@172.16.1.23 "/etc/init.d/tomcat_order stop" /usr/bin/ssh root@172.16.1.23 "/etc/init.d/tomcat_taoye stop" sleep 2 echo '#删除原来的代码' /usr/bin/ssh root@172.16.1.22 "rm /usr/local/tomcat_order/webapps/eboss/* -rf" /usr/bin/ssh root@172.16.1.22 "rm /usr/local/tomcat_taoye/webapps/taoyewang/* -rf" /usr/bin/ssh root@172.16.1.23 "rm /usr/local/tomcat_order/webapps/eboss/* -rf" /usr/bin/ssh root@172.16.1.23 "rm /usr/local/tomcat_taoye/webapps/taoyewang/* -rf" echo '#从vs4已经测试好的代码同步到vs2,vs3' /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomcat_order/webapps/eboss backup@172.16.1.22::eboss" /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomc at_order/webapps/eboss backup@172.16.1.23::eboss" /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomcat_taoye/webapps/taoyewang backup@172.16.1.22::taoyewang" /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomcat_taoye/webapps/taoyewang backup@172.16.1.23::taoyewang" echo '#启动 vs2,vs3的tomcat ' /usr/bin/ssh root@172.16.1.22 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_order start" /usr/bin/ssh root@172.16.1.22 "sleep 40" /usr/bin/ssh root@172.16.1.22 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_taoye start" /usr/bin/ssh root@172.16.1.23 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_order start" /usr/bin/ssh root@172.16.1.23 "sleep 40" /usr/bin/ssh root@172.16.1.23 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_taoye start" sleep 40 ###################################################################################################### echo '#从nginx 集群 开启 vs2,vs3,关闭 vs1' /bin/sed -i 's/#server 172.16.1.22/server 172.16.1.22/g' /usr/local/nginx-1.4/conf/nginx.conf /bin/sed -i 's/#server 172.16.1.23/server 172.16.1.23/g' /usr/local/nginx-1.4/conf/nginx.conf /bin/sed -i 's/server 172.16.1.21/#server 172.16.1.21/g' /usr/local/nginx-1.4/conf/nginx.conf /usr/local/nginx-1.4/sbin/nginx -s reload echo '#关闭 vs1 的tomcat服务器' /usr/bin/ssh root@172.16.1.21 "/etc/init.d/tomcat_order stop" sleep 2 /usr/bin/ssh root@172.16.1.21 "/etc/init.d/tomcat_taoye stop" echo '#删除原来的代码' /usr/bin/ssh root@172.16.1.21 "rm /usr/local/tomcat_order/webapps/eboss/* -rf" /usr/bin/ssh root@172.16.1.21 "rm /usr/local/tomcat_taoye/webapps/taoyewang/* -rf" echo '#从vs4已经测试好的代码同步到vs1' /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomcat_order/webapps/eboss backup@172.16.1.21::eboss" /usr/bin/ssh root@172.16.1.24 "/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /usr/local/tomcat_taoye/webapps/taoyewang backup@172.16.1.21::taoyewang" echo '#启动 vs1的tomcat ' /usr/bin/ssh root@172.16.1.21 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_order start" /usr/bin/ssh root@172.16.1.21 "sleep 40" /usr/bin/ssh root@172.16.1.21 "JAVA_HOME=/usr/java/jdk1.7.0_21;GM_HOME=/usr/local/GraphicsMagick;PATH=$GM_HOME/bin:$JAVA_HOME/bin:$PATH;export PATH;/etc/init.d/tomcat_taoye start" echo '#从nginx 集群 开启 vs2,vs3,关闭 vs1' /bin/sed -i 's/#server 172.16.1.21/server 172.16.1.21/g' /usr/local/nginx-1.4/conf/nginx.conf /usr/local/nginx-1.4/sbin/nginx -s reload echo '全部更新完成'
脚本中启动tomcat的命令行前面加了JAVA_HOME的环境变量,这是因为 远程ssh 启动 tomcat 必须加java的环境变量,要不然,tomcat是启动不了的。。