全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
容器服务

简单路由蓝绿发布策略

更新时间:2017-08-03 19:29:55

背景信息

蓝绿发布是一种零宕机的应用更新策略。进行蓝绿发布时,应用的旧版本服务与新版本服务会同时并存,同一个应用不同版本的服务之间共享路由,通过调节路由权重的方式,可以实现不同版本服务之间的流量切换。验证无误后,可以通过发布确认的方式将应用的旧版本的服务删除;如果验证不通过,则进行发布回滚,应用的新版本会进行删除。

前置条件

支持蓝绿发布需要将路由服务升级到最新的版本。详细信息参见 升级系统服务

场景介绍

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

  1. nginx-v1:
  2. image: 'registry.aliyuncs.com/ringtail/nginx:1.0'
  3. labels:
  4. aliyun.routing.port_80: nginx
  5. restart: always

部署后页面的效果如下。

操作步骤

  1. 登录 容器服务管理控制台

  2. 单击左侧导航栏中的 应用

  3. 选择目标应用所在的集群。

  4. 选择目标应用并单击 变更配置

    变更

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

    注意:

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

    1

    模板样例如下所示:

    1. nginx-v2:
    2. image: 'registry.aliyuncs.com/ringtail/nginx:2.0'
    3. labels:
    4. aliyun.routing.port_80: nginx
    5. restart: always
  6. 单击 确定,发布变更。

    在发布的过程中,会经历两个状态:

    • 蓝绿发布中:表示新版本的服务尚未启动完成。
    • 蓝绿发布待确认:表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。

      进入应用的详情页面,可以看到新版本的应用和旧版本的应用并存。其中蓝色的表示旧版本的服务,绿色表示新版本的服务。如果一个服务在前后两个版本中都存在且没有变化,那么会出现黄色的标签,表示这个应用在蓝绿发布中不会出现任何变化。

    发布

  7. 单击 路由列表 并单击 设置服务权重

    如下图所示,旧版本服务的权重为 100,新版本服务的权重为 0。

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

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

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

  8. 由于默认路由服务是进行会话保持的,您可以打开一个新的浏览器窗口,访问新的版本,结果如下所示。

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

    确认

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

本文导读目录