7.6.4. ロールアウト計画の使用
ロールアウト計画
管理対象ドメインでは、ドメインまたはホストレベルのリソースで目的となる操作は複数のサーバーに影響する可能性があります。このような操作には、サーバーに適用される操作の順序を説明するロールアウト計画や、一部のサーバーで実行に失敗した場合に操作を元に戻すかどうかを指示するポリシーなどが含まれます。指定されたロールアウト計画がない場合、デフォルトのロールアウト計画 が使用されます。
以下は 5 つのサーバーグループが関係するロールアウト計画の例になります。操作は順次 (in-series
) または同時 (concurrent-groups
) にサーバーグループへ適用することができます。構文の詳細は ロールアウト計画の構文 を参照してください。
{"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" }}}
上記の例を見ると、3 つの段階を経てドメインのサーバーに操作が適用されることが分かります。あるサーバーグループのポリシーによってサーバーグループ全体で操作のロールバックが引き起こされると、他のサーバーグループもすべてロールバックされます。
- サーバーグループ group-A と group-B には同時に操作が適用されます。group-A のサーバーには操作が順次適用され、group-B のすべてのサーバーは操作を同時に処理します。group-A で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-B で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
- group-A と group-B のすべてのサーバーが完了すると、group-C のサーバーに操作が適用されます。これらのサーバーは操作を同時に処理します。group-C では操作を適用できなかったサーバーが 2 台以上あると、グループ全体でロールバックが実行されます。
- group-C のすべてのサーバーが完了すると、操作が group-D と group-E に同時に適用されます。group-D のサーバーには操作が順次適用され、group-E のすべてのサーバーは操作を同時に処理します。group-D で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-E で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
ロールアウト計画の構文
ロールアウト計画は以下のいずれかの方法で指定できます。
-
deploy
コマンド操作ヘッダーでロールアウト計画を定義します。詳細は ロールアウト計画を使用したデプロイ を参照してください。 -
rollout-plan
コマンドを使用してロールアウト計画を保存し、deploy
コマンド操作ヘッダーでプラン名を参照します。詳細は 保存したロールアウト計画を使用したデプロイ を参照してください。
上記の方法で最初に使用するコマンドは異なりますが、どちらも 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
で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。 max-failed-servers
:0
から100
までの整数値。グループにおける操作の適用に失敗したサーバー合計数の最大率 (パーセント) で、失敗したサーバーの率がこの値を超えるとグループのすべてのサーバーが元に戻されます。指定がない場合のデフォルト値は0
で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。注記max-failed-servers
とmax-failure-percentage
の両方がゼロ以外の値に設定された場合、max-failure-percentage
が優先されます。
-
-
rollback-across-groups
: ブール値。1 つのサーバーグループのサーバーすべてで操作をロールバックする必要があると、すべてのサーバーグループでロールバックの実行を引き起こすかどうかを指定します。デフォルトはfalse
です。
ロールアウト計画を使用したデプロイ
ロールアウト計画の完全詳細を直接 deploy
コマンドに提供するには、rollout
設定を headers
引数に渡します。形式の詳細は ロールアウト計画の構文 を参照してください。
以下の管理 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)}
保存したロールアウト計画を使用したデプロイ
ロールアウト計画は複雑になることがあるため、ロールアウト計画の詳細を保存するオプションがあります。これにより、毎回ロールアウト計画の完全詳細を必要とせずに、ロールアウト計画を使用するときにロールアウト計画の名前を参照することができます。
rollout-plan
管理 CLI コマンドを使用してロールアウト計画を保存します。形式の詳細は ロールアウト計画の構文 を参照してください。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 }
アプリケーションのデプロイ時に保存されたロールアウト計画名を指定します。
以下の管理 CLI コマンドは、保存されたロールアウト計画
my-rollout-plan
を使用してすべてのサーバーグループにアプリケーションをデプロイします。deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
保存されたロールアウト計画の削除
削除するロールアウト計画の名前を指定して rollout-plan
管理 CLI コマンドを使用すると、保存されたロールアウト計画を削除できます。
rollout-plan remove --name=my-rollout-plan
デフォルトのロールアウト計画
複数のサーバーに影響する操作はすべてロールアウト計画を使用して実行されます。操作リクエストにロールアウト計画が指定されていない場合は、デフォルトのロールアウト計画が生成されます。計画には以下の特徴があります。
- ハイレベルなフェーズは 1 つのみです。操作に影響するすべてのサーバーグループには同時に操作が適用されます。
- 各サーバーグループ内では、操作がすべてのサーバーに同時に適用されます。
- サーバーグループのいずれかのサーバーに操作を適用できないと、グループ全体でロールバックが実行されます。
- あるサーバーグループに操作を適用できないと、他のすべてのサーバーグループでロールバックが実行されます。