微服务不停服升级
有时候我们会给生产环境修复一些比较严重的bug,有没有一种操作可以不停服进行系统升级呢?
答案是: 有的.
环境
生产环境部署在阿里云acs-swarm上.
服务注册使用eureka.
原理分析
首先新增新版本的服务实例到生产环境,待新版本服务开始服务之后,通知注册中心下线老版本服务(此时老版本服务不停机,还可以提供服务,只是不会在收到新的请求了),观察监控 等待老版本服务处理完所有请求之后,停机老版本服务,至此完成不停服升级.
原理挺简单,关键看操作.
具体操作
打包要升级的服务,并推送到阿里云镜像服务.
进入阿里云后台容器服务,选择服务所在集群,选择相应的应用 点变更配置.
找到相应的服务,修改一下服务名称,比如 user-service 修改成 user-service-1,在修改一下服务镜像的版本号,还有acs应用的版本号.
注意发布类型要选蓝绿发布确定之后稍等片刻,你会发现,你的容器服务列表新增了一个user-service-1的服务. eureka服务器上user-service的实例也多了一个.
通知注册中心下线老版本服务
curl -X PUT http://eureka-server:8761/eureka/app/{SERVICE-NAME}/{SERVICE-ID}/status?value=OUT_OF_SERVICE
- 1
把{}中的内容替换成实际内容.
你会发现eureka会给这个实例标记一个 红色的 OUT_OF_SERVICE,这样eureka client就不会获取到这个实例的注册信息了,网关也不会讲流量转发到这个实例上来了.看监控下线老版本服务.
你会发现老服务的流量会越来越少.当老服务处理完所有请求的时候,到阿里云acs控制台,选择确认发布.
搞定,收工.
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wzslw@163.com
文章标题:微服务不停服升级
文章字数:501
本文作者:武继明
发布时间:2019-05-09, 14:41:32
最后更新:2020-08-21, 06:30:57
原始链接:https://www.omingo.com/2019/05/09/微服务不停服升级/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。
来做第一个留言的人吧!