こんにちは、UOZUです!
今日はエンハンスドロードバランサの「セッション維持機能」を確認してみます。
今回の検証では、セッション維持機能を有効にすると、エンハンスドロードバランサから sac-elb-session というCookieが発行されることを確認します。
そのCookieを次回以降のリクエストで送信すると、同じ実サーバーへ振り分けられるようになります。
セッション維持機能とは
セッション維持機能が無効な場合の動作
まずはエンハンスドロードバランサを作成し、「セッション維持機能」が無い状態で実サーバーを設定します。

また振り分けの際には、どのサーバーに振り分けがされているか分かり易いよう、サーバーの/index.htmlでサーバー名が返る様にします。
[root@uozu-lb1 ~]# echo uozu-lb1 > /var/www/html/index.html
[root@uozu-lb1 ~]# cat /var/www/html/index.html
uozu-lb1
[root@uozu-lb1 ~]# curl http://localhost/
uozu-lb1[root@uozu-lb2 ~]# echo uozu-lb2 > /var/www/html/index.html
[root@uozu-lb2 ~]# cat /var/www/html/index.html
uozu-lb2
[root@uozu-lb2 ~]# curl http://localhost/
uozu-lb2Least Connectionsによる振り分けを確認する
まずは「セッション維持機能」は無効化したエンハンスドロードバランサのVIPあてに、curlでアクセスを行ってみます。
$ curl http://203.0.113.130/
uozu-lb2
$ curl http://203.0.113.130/
uozu-lb2
$ curl http://203.0.113.130/
uozu-lb1
$ curl http://203.0.113.130/
uozu-lb1何度かアクセスを行うと、各サーバに自動で切り替わることが確認できますね。
-v でも詳細を確認すると、接続先は同じIPでもlast-modifiedやetagも異なっており、別サーバーからレスポンスが返って来ていることが分かります。
$ curl -v http://203.0.113.130/
* Trying 203.0.113.130...
* TCP_NODELAY set
* Connected to 203.0.113.130 (203.0.113.130) port 80 (#0)
> GET / HTTP/1.1
> Host: 203.0.113.130
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Sun, 09 Aug 2026 08:32:58 GMT
< server: Apache/2.4.63 (AlmaLinux)
< last-modified: Sun, 09 Aug 2026 08:12:00 GMT
< etag: "9-65898cac78b13"
< accept-ranges: bytes
< content-length: 9
< content-type: text/html; charset=UTF-8
< via: 1.1 sac-elb
<
uozu-lb1
* Connection #0 to host 203.0.113.130 left intact$ curl -v http://203.0.113.130/
* Trying 203.0.113.130...
* TCP_NODELAY set
* Connected to 203.0.113.130 (203.0.113.130) port 80 (#0)
> GET / HTTP/1.1
> Host: 203.0.113.130
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Sun, 09 Aug 2026 08:32:57 GMT
< server: Apache/2.4.63 (AlmaLinux)
< last-modified: Sun, 09 Aug 2026 08:11:54 GMT
< etag: "9-65898ca639aa2"
< accept-ranges: bytes
< content-length: 9
< content-type: text/html; charset=UTF-8
< via: 1.1 sac-elb
<
uozu-lb2
* Connection #0 to host 203.0.113.130 left intactこれはエンハンスドロードバランサの振り分けアルゴリズムとしてLeast Connections、「その時点でアクセス数が少ないサーバに対して接続する」という仕組みを取っているためです。
特定のサーバーだけにアクセスが偏り、負荷があがることを防ぐためのロードバランサの動きになります。
セッション維持機能を有効にする
ではエンハンスドロードバランサの「設定変更」から「セッション維持機能」を有効に設定してみます。

改めてcurlでアクセスをしてみますが・・・動きが変わらない様に見えます。
$ curl http://203.0.113.130/
uozu-lb2
$ curl http://203.0.113.130/
uozu-lb1
$ curl http://203.0.113.130/
uozu-lb2
$ curl http://203.0.113.130/
uozu-lb1curlに-vをつけ、詳細を確認してみると、sac-elb-sessionから始まるCookieがレスポンスとして返ってくることが分かります。
$ curl -v http://203.0.113.130/
* Trying 203.0.113.130...
* TCP_NODELAY set
* Connected to 203.0.113.130 (203.0.113.130) port 80 (#0)
> GET / HTTP/1.1
> Host: 203.0.113.130
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Sun, 09 Aug 2026 08:48:11 GMT
< server: Apache/2.4.63 (AlmaLinux)
< last-modified: Sun, 09 Aug 2026 08:11:54 GMT
< etag: "9-65898ca639aa2"
< accept-ranges: bytes
< content-length: 9
< content-type: text/html; charset=UTF-8
< via: 1.1 sac-elb
< set-cookie: sac-elb-session=0199c331aa14be90; path=/
< cache-control: private
<
uozu-lb2
* Connection #0 to host 203.0.113.130 left intactcurlでCookieを保存・送信して同一サーバーへ振り分けられるか確認する
通常の curl コマンドでは、レスポンスで受け取ったCookieを次回リクエストに自動では利用しません。そのため、セッション維持機能を確認する場合は、-c でCookieを保存し、-b で保存したCookieを送信して確認します。
$ curl -c cookie.txt -v http://203.0.113.130/
* Trying 203.0.113.130...
* TCP_NODELAY set
* Connected to 203.0.113.130 (203.0.113.130) port 80 (#0)
> GET / HTTP/1.1
> Host: 203.0.113.130
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Sun, 09 Aug 2026 08:56:59 GMT
< server: Apache/2.4.63 (AlmaLinux)
< last-modified: Sun, 09 Aug 2026 08:12:00 GMT
< etag: "9-65898cac78b13"
< accept-ranges: bytes
< content-length: 9
< content-type: text/html; charset=UTF-8
< via: 1.1 sac-elb
* Added cookie sac-elb-session="1761a660f978d535" for domain 203.0.113.130, path /, expire 0
< set-cookie: sac-elb-session=1761a660f978d535; path=/
< cache-control: private
<
uozu-lb1
* Connection #0 to host 203.0.113.130 left intact$ cat cookie.txt
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
203.0.113.130 FALSE / FALSE 0 sac-elb-session 1761a660f978d535$ curl -b cookie.txt -v http://203.0.113.130/
* Trying 203.0.113.130...
* TCP_NODELAY set
* Connected to 203.0.113.130 (203.0.113.130) port 80 (#0)
> GET / HTTP/1.1
> Host: 203.0.113.130
> User-Agent: curl/7.61.1
> Accept: */*
> Cookie: sac-elb-session=1761a660f978d535
>
< HTTP/1.1 200 OK
< date: Sun, 09 Aug 2026 08:57:56 GMT
< server: Apache/2.4.63 (AlmaLinux)
< last-modified: Sun, 09 Aug 2026 08:12:00 GMT
< etag: "9-65898cac78b13"
< accept-ranges: bytes
< content-length: 9
< content-type: text/html; charset=UTF-8
< via: 1.1 sac-elb
<
uozu-lb1
* Connection #0 to host 203.0.113.130 left intact$ curl -b cookie.txt http://203.0.113.130/
uozu-lb1
$ curl -b cookie.txt http://203.0.113.130/
uozu-lb1
$ curl -b cookie.txt http://203.0.113.130/
uozu-lb1
$ curl -b cookie.txt http://203.0.113.130/
uozu-lb1
$ curl -b cookie.txt http://203.0.113.130/
uozu-lb1保存したCookieをリクエストに含めると、その後は同一サーバーへアクセスが流れることが分かります。
| 状態 | 確認方法 | 結果 |
|---|---|---|
| セッション維持 無効 | 通常の curl | uozu-lb1 / uozu-lb2 に振り分けられる |
| セッション維持 有効 | 通常の curl | Cookieを保持しないため、動きが変わらないように見える |
| セッション維持 有効 | curl -c でCookie保存 | sac-elb-session Cookieが保存される |
| セッション維持 有効 | curl -b でCookie送信 | 同一サーバーへ振り分けられる |
さいごに
今回は、さくらのクラウドのエンハンスドロードバランサで、セッション維持機能の動作を確認しました。
セッション維持機能を無効にしている場合は、ロードバランサの振り分けアルゴリズムに従って、複数の実サーバーへリクエストが振り分けられます。一方で、セッション維持機能を有効にすると、sac-elb-session というCookieが返され、そのCookieをリクエストに含めることで同じ実サーバーへアクセスが流れることを確認できました。
ブラウザではCookieが自動的に保存・送信されますが、curl で確認する場合は -c と -b オプションを使う必要があります。セッション維持機能を検証する際は、Cookieの有無もあわせて確認すると分かりやすいです。
ログイン状態を持つWebアプリケーションや、同一ユーザーのリクエストを同じサーバーへ寄せたい場合は、エンハンスドロードバランサのセッション維持機能を活用してみてはいかがでしょうか。
最後までお読みいただき、ありがとうございます!