docker 化をすすめるにあたり、consul-template と registrator で nginx の upstream を動的に更新しようと思いました。 ところで、
| |
という状態から1つ減って
| |
となった場合、消えた 10.1.2.5:5678 とつながっていたクライアントとの通信はどうなるのでしょうか? LoadBalancer には Connection Draining という機能・設定があります。 ELB にもあります(ロードバランサーの Connection Draining を設定する)。 nginx ではどうなるのか試してみました。version は 1.11.1 nginx で
| |
とし、Apache にてざっとこんな感じで 8080, 8081, 8082, 8083 で CGI が動くようにし、
Listen 8080
Listen 8081
Listen 8082
Listen 8083
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AllowOverride None
Options None
Order allow,deny
Allow from all こんな CGI で各ポートに接続され、出力が流れている状態で nginx の upstream を減らして nginx -s reload すると通信が止まるかどうか
| |
結果は「通信は途切れない」、もちろん新規の接続は upstream に残った proxy 先にのみ振られます。 良かった良かった、これで安心して思う存分コンテナの入れ替えができます。

