7.6.4. 使用 Rollout Plans

关于 Rollout 计划

在受管域中,针对域或主机资源的操作可能会影响多个服务器。此类操作可能包括详细介绍操作应用到服务器的顺序的推出计划,以及详细描述是否可以在部分服务器上成功执行该操作的策略。如果没有指定推出计划,则会使用默认的推出部署计划

以下是涉及五个服务器组的推出计划示例:操作可以按序列、序列 并发组应用到服务器组Rollout Plan Syntax 中对语法进行了更为详细的说明。

{"my-rollout-plan" => {"rollout-plan" => {
    "in-series" => [
        {"concurrent-groups" => {
            "group-A" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-B" => undefined
        }},
        {"server-group" => {"group-C" => {
            "rolling-to-servers" => "false",
            "max-failed-servers" => "1"
        }}},
        {"concurrent-groups" => {
            "group-D" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-E" => undefined
        }}
    ],
    "rollback-across-groups" => "true"
}}}

查看上面的示例,将操作应用到域中的服务器时要分三个阶段完成。如果任何服务器组的策略触发在服务器组中回滚该操作,则所有其他服务器组也将回滚。

  1. 服务器组 group-Agroup-B 将同时应用操作。该操作将连续应用到 group-A 中的服务器,而 group-B 中的所有服务器将同时处理该操作。如果 group-A 中超过 20% 的服务器未能应用该操作,它将在整个组中回滚。如果 group-B 中的任何服务器都无法应用该操作,它将在该组间回滚。
  2. 完成 group-Agroup-B 中的所有服务器后,该操作将应用到 group-C 中的服务器。这些服务器将同时处理操作。如果 group-C 中的多个服务器无法应用该操作,它将在该组中回滚。
  3. 完成 group-C 中的所有服务器后,服务器组 group-Dgroup-E 将同时应用该操作。该操作将按顺序应用到 group-D 中的服务器,而 group-E 中的所有服务器将同时处理该操作。如果 group-D 中超过 20% 的服务器无法应用该操作,它将在整个组中回滚。如果 group-E 中的任何服务器都无法应用此操作,它将在该组间回滚。
rollout Plan Syntax

您可以通过以下任一方式指定推出部署计划。

虽然每种方法都有不同的初始命令,但这两种方法都使用 rollout 操作标头来定义推出计划。这使用以下语法:

rollout (id=PLAN_NAME | SERVER_GROUP_LIST) [rollback-across-groups]
  • PLAN_NAME 是使用 rollout-plan 命令存储的推出计划的名称。
  • SERVER_GROUP_LIST 是服务器组的列表。使用逗号分隔(,)来分隔多个服务器组,以指示应当按顺序对每一服务器组执行操作。使用脱字符(^)分隔符表示应同时对每个服务器组执行操作。

    • 对于每一服务器组,请在括号中设置以下任何策略:使用逗号分隔多个策略。

      • Rolling-to-servers :一个布尔值,如果设为 true,则按顺序将操作应用到组中的每一服务器。如果值为 false 或未指定,操作将同时应用到组中的服务器。
      • max-failed-servers :整数,它取组中的最大服务器数,无法应用该操作,然后再将它恢复到组中的所有服务器上。如果没有指定,则默认值为 0,表示任何服务器上的失败都会在组中触发回滚。
      • max-failure-percentage :0 到 100 之间的整数,表示组中服务器总数的最大百分比,在应在该组中的所有服务器上恢复操作之前无法应用该操作。如果没有指定,则默认值为 0,表示任何服务器上的失败都会在组中触发回滚。

        注意

        如果 max-failed-serversmax-failure-percentage 都被设置为非零值,则 max-failure-percentage 将具有优先权。

  • rollback-acros-groups :一个布尔值,指示一个服务器组中的所有服务器上是否需要回滚操作。默认值为 false
使用 Rollout 计划部署

您可以通过将推出(rollout) 设置 传递到 headers 参数,将部署计划的完整详情直接提供给 deploy 命令。有关格式的更多信息,请参阅 Rollout Plan Syntax

以下管理 CLI 命令利用为串行部署指定 rolling -to-servers=true 的部署计划将应用部署到 main- server-group 服务器组:

deploy /path/to/test-application.war --server-groups=main-server-group --headers={rollout main-server-group(rolling-to-servers=true)}
使用 Stored Rollout 计划部署

由于推出计划可能比较复杂,您可以选择存储推出计划的详细信息。这可让您在您要使用部署计划名称时引用推出计划的名称,而不必每次都需要部署计划的完整详情。

  1. 使用 rollout-plan 管理 CLI 命令来存储推出计划。有关格式的更多信息,请参阅 Rollout Plan Syntax

    rollout-plan add --name=my-rollout-plan --content={rollout main-server-group(rolling-to-servers=false,max-failed-servers=1),other-server-group(rolling-to-servers=true,max-failure-percentage=20) rollback-across-groups=true}

    这会创建以下部署计划:

    "rollout-plan" => {
        "in-series" => [
            {"server-group" => {"main-server-group" => {
                "rolling-to-servers" => false,
                "max-failed-servers" => 1
            }}},
            {"server-group" => {"other-server-group" => {
                "rolling-to-servers" => true,
                "max-failure-percentage" => 20
            }}}
        ],
        "rollback-across-groups" => true
    }
  2. 在部署应用时指定存储的 rollout 计划名称。

    以下管理 CLI 命令使用 my-rollout-plan 存储的推出计划将应用部署到所有服务器组:

    deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
删除 Stored Rollout Plan

您可以通过指定要删除的 rollout-plan 管理 CLI 命令,移除存储的推出部署计划。

rollout-plan remove --name=my-rollout-plan
默认 Rollout Plan

所有影响多个服务器的操作都将通过推出计划来执行。如果没有在操作请求中指定推出部署计划,则会生成默认的推出部署计划。计划将具有以下特征:

  • 只有一个高级别阶段。受操作影响的所有服务器组将同时应用操作。
  • 在每个服务器组中,操作将同时应用到所有服务器。
  • 如果服务器组中的任何服务器上发生故障,则会导致在该组内回滚。
  • 任何服务器组的故障将导致所有其他服务器组回滚。