【A10 Thunder】セッション維持(パーシステンス)と動作確認 5.2.0

今回は、A10のセッション維持(パーシステンス)について記事にします。

前回は、A10の負荷分散方式について記事にしました。

  >> 参考記事 :  負荷分散方式と動作確認

負荷分散方式は、下記のように、初回のアクセスをどのサーバへ転送するのかを決定する方式です。

下記では、クライアントの初回アクセスをWeb-01に転送したとします。負荷分散方式がラウンドロビンの場合この後、クライアントから初回アクセスが来たら、Web-02に転送しようとします

パーシステンスは、同じクライアントに対して、初回アクセスで決定された転送先のサーバに対して、2回目以降のリクエストもそのサーバへ転送するように、セッション状態を維持する機能です。

処理負荷の分散のみで、セッションを考慮しなくてもよいサーバへの負荷分散であれば、パーシステンスは不要です。しかし、例えば、ECサイトなど、クライアントからの一連の処理を同一のサーバで処理する必要があるアプリケーションも存在し、その場合は、パーシステンスが必要となります。

”同じクライアント”を識別する方法として、よく使用されるのが、送信元IPアドレスによるパーシステンスCookieパーシステンスです。これら2つの方式の動作確認をします。

スポンサーリンク

送信元IPアドレスパーシステンス

構成は、下記記事のものを流用しますので、先にお読みいただくことをお勧めします。

  >> 参考記事 :  サーバ負荷分散(L4)の基本設定と動作確認

”同じクライアント”の判定を送信元のIPアドレスで行います。送信元IPアドレスが同じであれば、それらは同一のクライアントと見なし、転送先のサーバを固定(セッション維持)します。

パーシステンス設定の手順は、テンプレートを作成し、仮想ポートへ適用します。

ADC >> Templates より Persistence >> Create  >> Persist Source IP をクリックします。

下記の画面が表示されます。

  • Name:任意の名前。今回は、src-persist とします。
  • Match Type:パーシステンスを実行する単位です。デフォルトはportです。Serverにすると、ポートではなく、サーバ単位にパーシステンスされます。
  • Timeout:パーシステンスの有効期間。デフォルトは5分。アクセスがなくなり、5分経過すると、パーシステンスが解除されます。
  • Netmask:送信元アドレスのパーシステンスの単位。ホスト単位(255.255.255.255)がデフォルトです。ネットワーク単位(例えば、255.255.255.0など)に転送先のサーバを固定したい場合に設定が可能。通常はデフォルトのままです。

今回は、Nameだけ設定し、OKをクリックします。

上で設定したテンプレートを仮想ポートに適用します。今回は、vip-web10.0.10.200)に設定した仮想ポート(TCP 80番)に適用します。

ADC >> SLB >> Virtual Servers より、vip-web をクリックし、仮想ポート80(TCP)をEditします。

Persist Typeで、Source IPを選択し、Template Persist Source IPで、上で作成したテンプレートsrc-persistを選択し、Updateをクリックします。

CLIで設定する場合は、下記のとおりです。

vThunder(config)# slb template persist source-ip src-persist 
vThunder(config-source ip persist)#exit 
vThunder(config)#slb virtual-server vip-web 10.0.10.200  
vThunder(config-slb vserver)#port 80 tcp 
vThunder(config-slb vserver-vport)#template persist source-ip src-persist 

ブラウザで仮想アドレスに連続して複数回アクセスすると、Web-01のみへ転送されています。

送信元IPパーシステンスされていることは、show  session persist で確認できます。

vThunder# show session persist 
Prot Forward Source         Forward Dest           Reverse Source         Age Proto 
--------------------------------------------------------------------------------------
src  126.141.230.142        10.0.10.200:80         10.0.200.100:80        300 TCP  
Total Sessions:
スポンサーリンク

Cookieパーシステンス

構成は、下記記事のものを流用しますので、先にお読みいただくことをお勧めします。

  >> 参考記事 :  サーバ負荷分散(L7:HTTP )の基本設定と動作確認

”同じクライアント”の判定をCookieを用いて行います。クライアントからの初回アクセスの際に、A10がCookieを発行します。クライアントは2回目以降からそのCookieをもとに、セッション維持します。

Cookieパーシステンスは、Web系通信(http/https)でしか使用できません。仮想ポートもTCPではなく、httpやhttpsにする必要があります。

パーシステンス設定の手順は、送信元IPと同様に、テンプレートを作成し、仮想ポートへ適用します。

ADC >> Templates より Persistence >> Create  >> Persist Cookie をクリックします。

下記の画面が表示されます。

  • Name:任意の名前。今回は、cookie-persist とします。
  • Expiration(seconds) :Cookieの有効期間。デフォルトは10年。秒で指定することも可能。
  • Match Type:パーシステンスを実行する単位です。デフォルトはportです。Serverにすると、ポートではなく、サーバ単位にパーシステンスされます。

今回は、Nameだけ設定し、OKをクリックします。

上で設定したテンプレートを仮想ポートに適用します。今回は、vip-web 10.0.10.200)に設定した仮想ポート(HTTP80番)に適用します。

ADC >> SLB >> Virtual Servers より、vip-web をクリックし、仮想ポート80(HTTP)をEditします。

Persist Typeで、Cookieを選択し、Template Persist Source IPで、上で作成したテンプレートcookie-persistを選択し、Updateをクリックします。

CLIで設定する場合は、下記のとおりです。

vThunder(config)#slb template persist cookie cookie-persist 
vThunder(config-cookie persist)#exit 
vThunder(config)#slb virtual-server vip-web 10.0.10.200  
vThunder(config-slb vserver)#port 80 http  
vThunder(config-slb vserver-vport)#template persist cookie cookie-persist 

ブラウザで仮想アドレスに連続して複数回アクセスすると、Web-02のみへ転送されています。

Curlコマンドで、HTTPアクセスのヘッダ情報を取得すると、Cookieが挿入されていることが確認できます。

$ curl -I 10.0.10.200
HTTP/1.1 200 OK
Content-Length: 97
Content-Type: text/html
Last-Modified: Sun, 17 Oct 2021 05:50:38 GMT
Accept-Ranges: bytes
ETag: "3ec6b7e91ac3d71:0"
Server: Microsoft-IIS/10.0
Date: Mon, 03 Jan 2022 13:19:14 GMT
Set-Cookie: UqZBpD3n3iXPAw1X=v1jBougwSDAdl; Expires=Thu, 01-Jan-2032 13:19:14 GMT; Path=/ 

有効期限が10年のCookieが発行されています。このCookieを用いて、パーシステンスが実行されます。

show slb persist にて Cookieパーシステンスのカウンタが上昇していることを確認してください。

vThunder# show slb persist 
                                    Total      
-----------------------------------------------
URL hash persist (pri)               0          
URL hash persist (sec)               0          
URL hash persist fail                0          
SRC IP persist ok                    4          
SRC IP persist fail                  0          
SRC IP hash persist(pri)             0          
SRC IP hash persist(sec)             0          
SRC IP hash persist fail             0          
DST IP persist ok                    0          
DST IP persist fail                  0          
DST IP hash persist(pri)             0          
DST IP hash persist(sec)             0          
DST IP hash persist fail             0          
SSL SID persist ok                   0          
SSL SID persist fail                 0          
Cookie persist ok                    7          
Cookie persist fail                  0          
Persist cookie not found             0          
Persist cookie Pass-thru             0          
Enforce higher priority              0

コメント