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" }}}
查看上面的示例,将操作应用到域中的服务器时要分三个阶段完成。如果任何服务器组的策略触发在服务器组中回滚该操作,则所有其他服务器组也将回滚。
- 服务器组 group-A 和 group-B 将同时应用操作。该操作将连续应用到 group-A 中的服务器,而 group-B 中的所有服务器将同时处理该操作。如果 group-A 中超过 20% 的服务器未能应用该操作,它将在整个组中回滚。如果 group-B 中的任何服务器都无法应用该操作,它将在该组间回滚。
- 完成 group-A 和 group-B 中的所有服务器后,该操作将应用到 group-C 中的服务器。这些服务器将同时处理操作。如果 group-C 中的多个服务器无法应用该操作,它将在该组中回滚。
- 完成 group-C 中的所有服务器后,服务器组 group-D 和 group-E 将同时应用该操作。该操作将按顺序应用到 group-D 中的服务器,而 group-E 中的所有服务器将同时处理该操作。如果 group-D 中超过 20% 的服务器无法应用该操作,它将在整个组中回滚。如果 group-E 中的任何服务器都无法应用此操作,它将在该组间回滚。
rollout Plan Syntax
您可以通过以下任一方式指定推出部署计划。
-
在
deploy
命令操作标头中定义推出部署计划。详情请参阅使用 Rollout Plan 部署。 -
使用
rollout-plan
命令存储推出计划,然后在deploy
命令操作标头中引用计划名称。详情请参阅使用 Stored Rollout 计划部署。
虽然每种方法都有不同的初始命令,但这两种方法都使用 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-servers
和max-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 计划部署
由于推出计划可能比较复杂,您可以选择存储推出计划的详细信息。这可让您在您要使用部署计划名称时引用推出计划的名称,而不必每次都需要部署计划的完整详情。
使用
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 }
在部署应用时指定存储的 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
所有影响多个服务器的操作都将通过推出计划来执行。如果没有在操作请求中指定推出部署计划,则会生成默认的推出部署计划。计划将具有以下特征:
- 只有一个高级别阶段。受操作影响的所有服务器组将同时应用操作。
- 在每个服务器组中,操作将同时应用到所有服务器。
- 如果服务器组中的任何服务器上发生故障,则会导致在该组内回滚。
- 任何服务器组的故障将导致所有其他服务器组回滚。