Blue/Greenデプロイメントにおいて旧系のデーモンなどの処理を抑止する方法はありますか
Scenarioサーバで実行されるDaemon、Scheduleサーバの予約実行、Reflectorサーバのメトリック送信は、マルチノードで実行してはいけない処理であることからマスターノードでのみ実行されます。Blue/Greenデプロイメントでは、一時的にダブルマスター状態となるため、冗長に処理が動作してしまう可能性があります。
本問題を回避するためには、旧系のマスターノードに対して以下のAPIを呼び出す必要があります。API呼び出しによって該当マスターノードはDaemon実行やSchedule実行、メトリック送信を停止します。
マスター処理を抑制するAPI
PATCH /services
{
"master_suppression": true
}
マスター処理の抑制を解除するAPI
PATCH /services
{
"master_suppression": false
}
マスターの状態の確認
マスター処理抑制モードは、GET /services
の応答で確認することができます。
>>> r = await callout(url="http://scenario:9000/services")↵
... print(json.loads(r.body)["master_suppression"])↵
... ↵
↵
False
>>>
Tip
calloutを使用する場合、エンドポイントのデフォルト値がAPIGWとなっているため、指定しないとAPIGWの master_suppression の値を参照します。利用する場合は上記のように明示的に scenario / schedule / reflector サーバーを指定してください。
また、上記の抑制操作をREPLで行う場合は、Runtime
組込オブジェクトに対して以下のように操作することができます。
>>> runtime = Runtime()↵
... print(runtime.ismaster())↵...マスターノードであることを確認
... ↵
↵
True
>>> print(runtime.context.master_suppression)↵...マスター抑制モードを確認
... ↵
↵
False
>>> runtime.context.master_suppression = True↵...マスター抑制モードに設定(Daemon/予約発火/メトリック送信は停止します)
... print(runtime.context.master_suppression)↵
... ↵
↵
True
>>> runtime.context.master_suppression = False↵...マスター抑制モードを解除(Daemon/予約発火/メトリック送信が再開します)
... print(runtime.context.master_suppression)↵
... ↵
↵
False
>>>