Cluster mode
環境変数 CLUSTER
に数値をセットすると、1つのDockerコンテナ内でapplication server (node.js)プロセスがforkします
これをcluster modeと呼びます
DB、Redis、ルーティングなど、スケールさせる為の要所を説明しています
Cluster modeは、application server (node.js)をスケールアウトさせる手段の1つです
Dockerコンテナの数を増やす
docker-composeの --scale=
オプション等
1つのDockerコンテナの中に起動するnode.jsプロセス数を増やす
こっちがcluster modeです
設定例
workerが4つforkする
cluster数は2〜4程度にするのが一般的な様です
動作環境
forkしたプロセスはそれぞれ
メモリ512MB
1つの論理CPUスレッド
を必要とします
つまり以下は同等のリソースが必要です
forkせず1プロセスだけのDockerコンテナを4つ起動した場合
CLUSTER=4でプロセスを4つにforkさせたDockerコンテナを、1つ起動した場合
CLUSTER=2でプロセスを2つにforkさせたDockerコンテナを、2つ起動した場合
4論理CPUコア、2GBのメモリを割り当ててください
また、forkしたプロセスの分だけ、application serverからMongoDBやRedisへのコネクション数も増加します
クラウド版では
CLUSTER=2
で2プロセスにforkしたサーバー
これを数十台起動
2020/4ごろからこの構成で運用しています
forkしたプロセスの終了
親プロセスが子プロセスを環境変数 CLUSTER
の数だけforkで作成します
この時、子プロセスが不正終了すると
親プロセスが子プロセスを即座に補充します
子プロセスをkillすると確認できます
親プロセスは、外から受け取ったsignalを子プロセスに伝播します
コンテナ内のClusterを終了したい場合は、親プロセスに
SIGTERMを送信してください
全ての子プロセスの終了を待って、親プロセスも終了します
親プロセスが終了すれば、Dockerコンテナも停止します