设为首页 收藏本站
查看: 742|回复: 0

[经验分享] 利用Apache实现系统无缝切换

[复制链接]

尚未签到

发表于 2017-1-5 10:50:48 | 显示全部楼层 |阅读模式
热部署,是实际开发中经常会遇到的一个问题。一个系统上线之后,不可避免的会因为修改bug,功能的增加等问题需要更新代码、配置文件,这就需要重启应用服务器。如果系统需要提供的是7*24小时的服务,不能中断访问,那么如何能够做到在部署系统时做到系统的无缝切换呢?
1、F5等负载均衡设备
一般大型网站中都会采用f5做负载均衡。在更新系统时,可以先把线上应用部署在一台临时服务器B,通过F5让访问该应用的请求都指向B,同时A服务器下线。在服务器A上进行更新操作,测试完毕后,通过F5再把请求转发到服务器A,同时B服务器下线。更新完毕!
缺点:F5花费太大,小公司使用太过奢侈
2、Nginx等反向代理服务器
F5毕竟是比较奢侈的硬件,中小公司大都会需用nginx服务器做负载均衡。在进行系统切换时,和F5原理相同。先把请求转发到备用机B上,更新服务器A,然后再把请求切换到A。此方法只需用简单修改Nginx配置文件:
更新前:
upstream XXX_server_pool {
#server   192.168.1.15:80  //A下线
server   192.168.1.16:80   //B在线
}
更新后:
upstream XXX_server_pool {
server   192.168.1.15:80  //A在线
#server   192.168.1.16:80   //B下线
}
切换过程中nginx的reload很快,因此不会出现nginx服务器down掉的情况。
缺点:有的应用前面并没有Nginx,只适用通过Nginx实现负载均衡的系统。
3、Apache切换应用指向
如果应用服务器前采用apache的http服务器,那么可以通过切换apache对后端应用的指向实现无缝切换。
apache接到请求后,如果是动态请求需要向后端的应用服务器转发,resin、tomcat等,改变了apache指向的应用服务器的就可以实现。比如:原应用部署在resin下开启8081端口,重新部署应用在resin_standby下开启8082端口,这样apache就可以在8081和8082两个端口下自由切换了。

  • 应用app重新copy一份app_standby
  • resin重新copy一份resin_standby
  • 修改resin_standby的端口,保证和resin端口不一致
  • 修改apache的http.conf,执行reload

resin:
<http-server>
<doc-dir>/home/httpd/app</doc-dir>
<http  port='8081'/>
<srun id='1' host='127.0.0.1' port='6801' srun-index='3'/>
省略……
resin_standby:
<http-server>
<doc-dir>/home/httpd/app_standby</doc-dir>
<http  port='8088'/>
<srun id='2' host='127.0.0.1' port='6808' srun-index='3'/>
省略……
apache配置文件(在线):
<VirtualHost *:80>
DocumentRoot "/home/httpd/app"
CauchoConfigFile /usr/local/resin/conf/resin.conf
CustomLog logs/access_log combined
<Directory /home/httpd/app>
省略……
</Directory>
</VirtualHost>
apache配置文件(切换时):
<VirtualHost *:80>
DocumentRoot "/home/httpd/app_standby"
CauchoConfigFile /usr/local/resin_standby/conf/resin.conf
CustomLog logs/access_log combined
<Directory /home/httpd/app_standby>
省略……
</Directory>
</VirtualHost>
执行apache的reload命令:
apachectl -k graceful
也可以把修改配置文件和执行reload命令做成shell脚本执行。
切换到standby(例子):
#!/bin/sh
HOSTNAME=app
cp /usr/local/apache2/conf/vhosts/${HOSTNAME}.conf /usr/local/apache2/conf/vhosts/${HOSTNAME}_bak.conf
cp /usr/local/apache2/conf/vhosts/${HOSTNAME}_standby.conf /usr/local/apache2/conf/vhosts/${HOSTNAME}.conf
`/usr/local/apache2/bin/apachectl -t`
CHECK_FLAG=$?
if test $CHECK_FLAG -eq 0
then
/usr/local/apache2/bin/apachectl -k graceful
rm -f /usr/local/apache2/conf/vhosts/${HOSTNAME}_bak.conf
echo "Standby started!"
else
cp /usr/local/apache2/conf/vhosts/${HOSTNAME}_bak.conf /usr/local/apache2/conf/vhosts/${HOSTNAME}.conf
rm -f /usr/local/apache2/conf/vhosts/${HOSTNAME}_bak.conf
echo "Standby conf error! conf restored!"
fi
切换到active的类似,就不在赘述。
缺点:在同一台机器上启动两份应用,对硬件有些要求(内存,jvm参数优化等)。有时候可能不能同时启动两份应用,视情况而定。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324192-1-1.html 上篇帖子: Apache URL重写实现伪静态 下篇帖子: Apache+tomcat负载均衡的入门配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表