开发者社区> 问答> 正文

Swarm 集群负载均衡路由蓝绿发布策略

[font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]蓝绿发布是一种 [font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]零宕机 [font=PingFangSC, 'helvetica neue', 'hiragino sans gb', arial, 'microsoft yahei ui', 'microsoft yahei', simsun, sans-serif]的应用更新策略。进行蓝绿发布时,应用的旧版本服务与新版本服务会同时并存,同一个应用不同版本的服务之间共享负载均衡,通过调节负载均衡权重的方式,可以实现不同版本服务之间的流量切换。验证无误后,可以通过发布确认的方式将应用的旧版本的服务删除;如果验证不通过,则进行发布回滚,应用的新版本会进行删除。

场景介绍
假设您要进行蓝绿发布的应用是一个 Nginx 的静态页面,初始的应用模板如下。

  1. [backcolor=transparent]nginx[backcolor=transparent]-[backcolor=transparent]v1[backcolor=transparent]:
  2. [backcolor=transparent]  image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'registry.aliyuncs.com/ringtail/nginx:1.0'
  3. [backcolor=transparent]  ports[backcolor=transparent]:
  4. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent]  [backcolor=transparent]80[backcolor=transparent]:[backcolor=transparent]80[backcolor=transparent]/[backcolor=transparent]tcp
  5. [backcolor=transparent]  labels[backcolor=transparent]:
  6. [backcolor=transparent]    aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//proxy_test:80
  7. [backcolor=transparent]  restart[backcolor=transparent]:[backcolor=transparent] always

部署后页面的效果如下。


使用说明
由于每个容器需要暴露主机的端口,所以执行负载均衡路由蓝绿发布过程中,需要确保某个服务容器的个数少于或者等于集群中机器数的1/2;否则,会导致端口冲突。
进行负载均衡蓝绿发布时,您可以考虑先缩容容器到集群机器数量的一半,然后进行蓝绿发布,发布结束后,再扩容到原来的规模。

操作步骤
  1. 登录 容器服务管理控制台
  2. 单击左侧导航栏中的 [backcolor=transparent]应用。
  3. 选择目标应用所在的集群。
  4. 选择目标应用并单击 [backcolor=transparent]变更配置。

  5. 选择变更的发布模式与新版本服务的配置。

    [backcolor=transparent]注意:
    • 在蓝绿发布中,新版本与旧版本不能共用同一个名字。
    • 在蓝绿发布的场景中,为了保证应用的零宕机切换,新版本的服务的路由权重默认为 0,需要通过路由管理页面进行调整,方可进行流量切换。

模板样例如下:[backcolor=transparent] nginx[backcolor=transparent] -[backcolor=transparent] v2[backcolor=transparent] :
  • [backcolor=transparent]image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'registry.aliyuncs.com/ringtail/nginx:2.0'
  • [backcolor=transparent]ports[backcolor=transparent]:
  • [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]80[backcolor=transparent]:[backcolor=transparent]80[backcolor=transparent]/[backcolor=transparent]tcp
  • [backcolor=transparent]labels[backcolor=transparent]:
  • [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//proxy_test:80
  • [backcolor=transparent]restart[backcolor=transparent]:[backcolor=transparent] always

  • 单击 [backcolor=transparent]确定,发布变更。
    在发布的过程中,会经历两个状态:
    • 蓝绿发布中:表示新版本的服务尚未启动完成。

    • 蓝绿发布待确认:表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。
      进入应用的详情页面,可以看到新版本的应用和旧版本的应用并存。其中蓝色的表示旧版本的服务,绿色表示新版本的服务。如果一个服务在前后两个版本中都存在且没有变化,那么会出现黄色的标签,表示这个应用在蓝绿发布中不会出现任何变化。

    单击 [backcolor=transparent]路由列表 并单击[backcolor=transparent]设置服务权重。
    如下图所示,旧版本服务的负载均衡权重为 100,新版本服务负载均衡的权重为 0。

    要做到[backcolor=transparent]零宕机升级,您需要先把新版本的服务的权重值调整为 100,此时新旧服务的权重各占 50%,测试新旧版本的服务都有稳定的流量。

    [backcolor=transparent]注意:同时调整两个服务的权重,可能会导致部分请求失败,所以权重需要分为两步进行调整,一步只调整一个服务的权重。例如,先将新服务权重值从 0 调整为 100,待流量稳定后,再将然旧服务权重值从 100 设置为 0。

    下一步,将旧版本服务的权重调整为 0,新版本服务的权重调整为 100。

    您可以打开一个新的浏览器窗口,访问新的版本,结果如下。

    当整个发布流程验证完毕后,在应用列表页面,单击 [backcolor=transparent]确认发布完成 并在弹出的确认对话框中单击 [backcolor=transparent]确认 进行发布确认,方可进行下一次发布。

    您可以看到应用的服务列表已经更新了,旧的服务已经完全下线删除了。

    展开
    收起
    反向一觉 2017-10-30 13:43:01 2157 0
    0 条回答
    写回答
    取消 提交回答
    问答排行榜
    最热
    最新

    相关电子书

    更多
    《应用型负载均衡ALB产品解读》 立即下载
    阿里云网络-SLB负载均衡产品介绍 立即下载
    负载均衡SLB热点问题解答 立即下载