Openresty学习使用(二)平滑发版与升级

Openresty学习使用(二)平滑发版与升级

发版场景

开发过程中,总是需要时不时的发版,常常也有那种因为人工操作失误导致的生产事故。

问题

目前很多web应用都采用nginx来实现负载均衡。通过在upstream里面配置多个服务器来进行请求分发。在和某台服务器通讯的过程中,如果发生错误, 请求将被分派给下一个服务器, 直到所有可用服务器都被尝试。如果没有任何一个服务器可以可以返回成功的应答,则客户端将会收到和最后一台机器的通讯结果。
upstream常见配置如下:
weight
设置服务器的权重,默认为1.
max_fails
设置在参数fail_timeout指定的时间内,发生的和服务器通讯的不成功的数量。默认情况,不成功尝试次数被设置为1.如果设置为0则关闭尝试计数。
fail_timeout
用于设置:时间段,在此期间应该发起指定数量的和服务器通讯的不成功尝试,以判断服务器是否不可到达
和接下来服务器被判定为不可到达的时间期间,默认,fail_timeout参数被设置为10秒钟.
注:如果设置为max_fails=5;fail_timeout=30s,表示如果有5次请求失败,则该服务器被断定为不可到达,之后30s之类将不再尝试这台机器。再之后的每30s,都将进行最多5次尝试,如果继续失败则继续判断为不可到达并不再尝试。
backup
标记当前服务器为备用服务器。当主服务器(注:应该是没有标记为backup和down的服务器)都不能达到时请求将被分派过去。
down
将当前服务器标记为永久不可到达。

方案

对于简单的场景,直接后台重启应用服务器即可,因为nginx默认会重试。但是对于复杂的场景,比如不想同时调用两个版本,有些不方便重试的场景,比如调用第三方付费接口等。这个时候我们更希望平滑发版与升级。通过手动修改nginx的配置文件,注释掉一台,然后reload可以实现,但是需要人上服务器操作,有一定的操作风险。

建议

比较推荐的建议,是通过脚本来规避人为风险
由实例上的web服务器提供一个本地静态文件,下线的时候删除掉,上线之前创建

#下线
rm /data/server/tomcat/webapp/nginx-status
sleep 6 #等待一段时间,相当于nginx的时间,留一些buffer
#重启应用
#上线
touch /data/server/tomcat/webapp/nginx-status
sleep 6 #

应用重启后,并不表示立马就能提供服务,所以还会建议在应用里面做一个健康检查。在应用检查通过之后,再进行上线操作。
上线流程
startApplication -> healthCheck ->online
下线流程
offline -> stopApplication

幸运的是最新OpenResty已经包含两个这样的插件,lua-resty-upstream-healthcheck和lua-upstream-nginx-module。不同的是lua-upstream-nginx-module是直接操作upstream来实现上下线的。下篇文章对这两个插件进行介绍和使用说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值