`
allwefantasy
  • 浏览: 45747 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

12cd.com 开发分享--重新部署你的网站但不中断用户的使用

阅读更多

     Java程序的发布更新是件比较头疼的事情,因为需要重启生产服务器,所以你经常会看到很多网站会有如下的标语 

“网站将在 00:00-5:00 更新 暂停服务”之类的的话。当然也有很多其他的原因,比如网站被和@@谐了也在等待重新开张的机会通常也会这么说。题外话。   

 

     如何解决这个问题呢?如何做到网站重新部署而不中断用户的使用呢? 12cd初期就遇到这个问题,当时不断有新的功能推出,(当然也有新的bug发现)一个礼拜重新部署一到两次很正常。用户常常反馈网站为什么“老挂”(ps:对用户来说网站不能访问就是挂了 哈哈)。所以决定解决这个问题。

 

    要实现重新部署而不影响用户的正常使用,我们先看看12cd的服务器架构方面的东东。

 

    12cd使用了三台服务器,

 

  1.   一台WEB(4核4GRAM) 部署有Apache2,tomcat6 (还有PHP的网站)
  2.   一台DB(2核4GRAM)  部署有mysql数据库 和tomcat6
  3.   一台流媒体(2核4GRAM) 部署有Red5和一套基于Red5开发的WEB程序 还有memecached 服务器

 

       三台服务器使用的都是Linux系统。

 

     不知道大家注意到没,DB上也有个tomcat6应用服务器。关键就在这。我们看下面就能揭晓谜底

 

     配置apache服务器

     只需要在httpd.conf 文件中额外添加下面几句话:

 

ProxyRequests off
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid  lbmethod=byrequests nofailover=Off
ProxyPassReverse / balancer://cluster/

<proxy balancer://cluster>
BalancerMember   ajp://127.0.0.1:8777 loadfactor=80 route=webjack
BalancerMember   ajp://dbserver:8777  status=+H  route=dbjack
</proxy>

 

   其中   ajp://dbserver:8009 指向的就是DB上的tomcat. Status=+H 指的是 DB是备用服务器。当然我这段配置文件文件是

   单独出来引入配置文件的。防止代理所有的请求。

 

 

   配置tomcat服务器

    在WEB服务器上的Tomcat添加

 

  

<Engine name="Catalina" defaultHost="localhost" jvmRoute="webjack">
  

    在DB上的添加

 

 

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="dbjack">
 

   当然你还要启用AJPConnector

 

 

 <Connector  port="8777" protocol="AJP/1.3" redirectPort="8443" URIEncoding="GBK"/>
 

 

  就这么多操作。我们模拟一下用户的流程,看会发生什么(首先请参看我上一篇文章  12cd.com 开发分享--简单session机制模拟解决跨域问题)。

  方便起见,我们把部署了apache2的服务器叫做Web,把DB服务器叫做DB

 

 

  1.    用户登录后,会写入cookie和在数据库onlineusers表中有记录
  2.    网站推出新功能,首先部署Web上的应用。此时Web上的tomcat将无法服务。但是这个时段可能会有很多用户正在使用Web上的服务。
  3.    由于我们开启了apache的负载均衡功能,所以此时apache会发现Web上的应用服务器已经无法使用。所以会把当前用户的请求定向到DB上的tomcat上
  4.    这个时候用户就被透明的定向到了DB的应用服务器上。但是DB服务器并没有存储用户的会话(虽然此时已经实现避免用户看到 服务暂停 的页面)
  5.    程序内部filter根据cookie以及onlineusers记录在DB上重新构建了用户的session.因此即使被定向到了DB上上,用户也无需重新登录。
  6.    Web 部署完毕后,我们再接着部署DB上的。此时用户将被重新定向到Web的应用与器上。
  7.    整个过程完美的实现了程序的重新部署和用户的无中断使用 cheers,dude! 呵呵

 

 

           当然能够实现上面的效果,得益与使用自定义cookie跟踪会话以及apache提供的负载均衡功能

 

 

 

分享到:
评论
1 楼 modiliany 2012-04-30  
楼主的经验挺宝贵,问一下, 同一台web服务器上应该可以跑多个tomcat吧,做它们之间的负载均衡

相关推荐

    Min GW - binutils-2.18.50-20080109-2.tar.gz

    这样,你就可以在任何目录下使用MinGW了。 ********* Create install directory Create a directory to install all the stuff into. This writer usually creates c:\MinGW and copies all of the above files in...

    smali-2.0.3.jar baksmali-2.0.3.jar

    &lt;a.odex&gt;处是你要分解的odex文件的名字,命令完成之后,会生成一个out文件夹,里面就是所有的class文件。如果出现问题, 比如什么异常,缺少包什么的,就更到rom里面把出错信息里面要求的包拿出来,放到当前目录...

    抽奖程序Lottery program

    git clone https://github.com/moshang-xc/lottery.git cd lottery # Server plugin installation cd server npm install # Front-end plugin installation cd ../product npm install # Package npm run build ...

    Delphi案例开发.源代码

    本系统要注意开发环境的选取,如上面所说的,最好使用delphi7以下的版本,不能使用delphi8。另外还要注意系统程序所用到的数据库的设置,先是把数据库还原,然后设置TEST.UDL里的连接参数,使程序能与数据库建立...

    jdk-8u91-linux-x64.tar.gz

    jdk-8u91-linux-x64.tar.gz java jdk-8u91 linux-x64 .tar.gz 截至2016.04.20 最新版JDK For Linux x64 gar.gz sha256: 6f9b516addfc22907787896517e400a62...md5: 3f3d7d0cd70bfe0feab382ed4b0e45c0 大小:172.97 MB

    linux内核版本4.9.37

    59A使用该内核的方式 打补丁 1)将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中 2)在linux服务器中进入 osdrv 的根目录,执行如下命令: cd opensource/kernel tar -zxf linux-4.9.37.tar....

    jenkins-2.121.2-1.1.noarch.zip

    Jenkins 是一个开源自动化服务器... Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要 jenkins-2.121.2-1.1.noarch rpm安装文件

    cmd操作命令和linux命令大全收集

    它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. shutdown-------60秒倒计时关机命令 7. lusrmgr.msc----本机...

    前端工程化开发方案app-proto.abb27cd0-d17c-11e6-a8a8-cf002e4b7ba8.pdf

    前端工程化开发方案app-proto.abb27cd0-d17c-11e6-a8a8-cf002e4b7ba8.pdf

    VMwareTools-9.6.2-1688356.tar.gz

    $ cd vmware-tools-distrib 4. 执行vmware-install.pl文件: $ sudo ./vmware-install.pl 5. 一路打Enter Shared Folder路径为: /mnt/hgfs/ ====================== 我的系统: Windows7 32 bit; WMware Player...

    asterisk部署文档

    //安装开发环境及编绎环境: yum -y groupinstall 'Development Tools' yum -y install libtool* yum -y install kernel-heads* yum -y install ncurses-dev* yum -y install kernel-devel yum install -y kernel ...

    ejb3.0入门经典教程及源码

    本光盘是配书CD-ROM光盘,其中包括黎活明的入门教程、sourcecode、“软件”两个文件夹、ejb-3_0-fr-spec-ejbcore.pdf、 ejb-3_0-fr-spec-persistence.pdf、ejb-3_0-fr-spec-simplified.pdf。两个演示文档以及mysql-...

    MySQL 5.6.25 源码包+安装方法 (mysql-5.6.25.tar.gz)

    4.3 重新设置MySQL安装目录的权限(除data目录外,其余所有目录及文件均修改用户为root,组不变) # chown -R root . # chown -R mysql data 4.4 启动mysql_safe # bin/mysqld_safe --user=mysql & 4.5 设置MySQL的...

    jenkins-2.164.3-1.1.noarch.rpm

    Jenkins 是一个开源自动化服务器... Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。

    IEEE Std 802.3cd-2018

    来自IEEE Xplore官网,IEEE Std 802.3cd-2018 (Amendment to IEEE Std 802.3-2018 as amended by IEEE Std 802.3cb-2018 and IEEE Std 802.3bt-2018),开发50GBASE-FR、50GBASE-LR、50GBASE-SR、100GBASE-DR、100...

    Linux下开发SDL所必须的几个库

    cd SDL-1.2.13.tar.gz ./configure make make install 其他安装包依此类推. 在安装libiconv-1.12.tar.tar之前先装freetype-2.3.5.tar.gz 编译: g++ -o client client.cxx `sdl-config --...

    docker-compose一键部署rocketmq

    注意 如果你的微服务或者项目在开发的时候没有放入docker中或者与rocketmq容器不能直接用IP访问, 那么请把broker.conf中的 #brokerIP1=192.168.0.253 前面#号去掉,并且把后面的IP地址改成你的rocketmq容器宿主机IP...

    matlab开发-cd.zip.zip

    matlab开发-cd.zip.zip

    指纹仪linux开发包SDK,适用U.are.U4000/URU4000B

    1- Insert the Product CD in the CD-ROM drive. 2- Run Setup.sh located in the root folder on the CD. 3- Follow the installation instructions. 4. At the completion of the installation, for ...

    redhat9.0安装gcc所需RPM

    在CD2中RPMS中可以找到 gcc-3.2.2-5.i386.rpm 这个文件,同样拷贝到你自己创建的目录中 然后 安装顺序,命令行依次输入  rpm -ivh glibc-kernheaders-2.4-8.10.i386.rpm  rpm -ivh glibc-devel-2.3.2-11.9....

Global site tag (gtag.js) - Google Analytics