今回は、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-web (10.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
コメント