Blue/Greenデプロイメントにおいて旧系のデーモンなどの処理を抑止する方法はありますか



Scenarioサーバで実行されるDaemon、Scheduleサーバの予約実行、Reflectorサーバのメトリック送信は、マルチノードで実行してはいけない処理であることからマスターノードでのみ実行されます。Blue/Greenデプロイメントでは、一時的にダブルマスター状態となるため、冗長に処理が動作してしまう可能性があります。
本問題を回避するためには、旧系のマスターノードに対して以下のAPIを呼び出す必要があります。API呼び出しによって該当マスターノードはDaemon実行やSchedule実行、メトリック送信を停止します。

マスター処理を抑制するAPI

PATCH /services
{
    "master_suppression": true
}


マスター処理の抑制を解除するAPI

PATCH /services
{
    "master_suppression": false
}


Tip

マスター処理抑制モードは、GET /servicesの応答で確認することができます。

>>> r = await callout(path="/services")↵
... print(MU(json.loads(r.body)).master_suppression)↵
... ↵
↵
False
>>>


また、上記の抑制操作をREPLで行う場合は、Runtime組込オブジェクトに対して以下のように操作することができます。

>>> runtime = Runtime()↵
... print(runtime.ismaster())↵...マスターノードであることを確認
... ↵
↵
True
>>> print(runtime.master_suppression)↵...マスター抑制モードを確認
... ↵
↵
False
>>> runtime.master_suppression = True↵...マスター抑制モードに設定(Daemon/予約発火/メトリック送信は停止します)
... print(runtime.master_suppression)↵
... ↵
↵
True
>>> runtime.master_suppression = False↵...マスター抑制モードを解除(Daemon/予約発火/メトリック送信が再開します)
... print(runtime.master_suppression)↵
... ↵
↵
False
>>>