【BIG-IP LTM】セッションパーシステンスの設定と動作確認 Version: 16.1.2

負荷分散装置の負荷分散方式(ラウンドロビンや比率など)は、クライアントからの初回アクセスをどのサーバに転送するのかを決定するために使用されます。

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

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

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

この記事では、よく使用される送信元IPアドレスCookie(HTTP Cookie Insert)のパーシステンスの動作を確認します。

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

  >> 参考記事 :  負荷分散の基本設定と動作確認(Node、Pool、VirtualServer)
  >> 参考記事 :  ロードバランシング方式 と動作確認
スポンサーリンク

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

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

設定は、Persistenceのプロファイルを作成し、仮想サーバに適用します。

プロファイルの作成

Local Traffic  >> Profiles >>Persistence より、プロファイルの一覧が確認できます。すでにデフォルトでプロファイルが登録されています。
TypeSource Address Affinityのものが、送信元IPアドレスパーシステンスに該当します。


デフォルトのsource_addrを使用しても問題ありませんが、今回は、カスタムでプロファイルを作成してみます。右上のCreateをクリックします。

Nameは任意の名前(今回は、custom-src-persist とします)とし、Persistence Typeで、Source Address Affinityを選択します。

すると下記のように画面が切り替わります。

内容は、デフォルトのsource_addrプロファイルと同じで、これでも送信元IPアドレスパーシステンスは動作します。デフォルトから設定をカスタムしたい場合は、Customにチェックをいれます

よくチューニングするのは、セッション維持のTimeout値です。デフォルトでは180秒です。180秒間、通信がアイドルすると、セッションがクリアされます
デフォルトのままだと、ECサイトなどで、ユーザが180秒間操作をしないでいると、サーバへ接続断となる可能性があるため、時間を長くしたりする場合があります。

今回は、5分(300秒)に変更して、Finishedをクリックします。

下記のとおり登録されました。

仮想サーバに適用

Main >> Local Traffic >> Virtual Servers から、Web-VSをクリックします。

PropertiesタブからResourcesタブへ切り替えます。

Default Persistence Profile で、custom-src-persist を選択し、Updateをクリックします。

動作確認

端末のブラウザから、パーシステンスを適用した仮想アドレス(http://www.hirotanoblog.work)へアクセスすると、Web-01の画面が表示されます。何回か、接続を更新しても、Web-01のままです。

端末からCurlで10回連続、Webサーバのタイトルを取得したところ、すべて、Web-01にアクセスしており、パーシステンスされていることがわかります

$ for ((i=0; i<10; i++)); do curl -s www.hirotanoblog.work | grep -o '<title>.*</title>'
| sed 's#<title>\(.*\)</title>#\1#'; done
Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01 Web-01 – Web-01

BIG-IP上、下記コマンドのより、送信元IPアドレスパーシステンスされていることが確認できます。

(tmos)# show ltm persistence persist-records all-properties
Sys::Persistent Connections
source-address - 10.0.1.100:80 - 10.0.2.24:80
---------------------------------------------
  TMM           0                            
  Mode          source-address               
  Value         126.xxx.xxx.xxx                
  Age (sec.)    1                            
  Virtual Name  /Common/Web-VS               
  Virtual Addr  10.0.1.100:80                
  Node Addr     10.0.2.24:80                 
  Pool Name     /Common/Web-Pool             
  Client Addr   126.xxx.xxx.xxx                
  Owner entry   not mirrored
  • Age (sec.) : タイムアウト時間(秒)   
  • Virtual Addr :接続しているVirtual ServerのIPアドレス 
  • Node Addr :振り分け先のノード(実サーバ) 
  • Client Addr :接続しているクライアントのアドレス 

タイムアウト時間は、通信が発生するたびに、ゼロクリアされます。今回は、300秒でタイムアウトするよう設定していますので、無通信の間、1秒に1つずつカウンタがあがり、300まで進んで、セッションがクリアされます

(tmos)# show ltm persistence persist-records all-properties
Sys::Persistent Connections
source-address - 10.0.1.100:80 - 10.0.2.24:80
---------------------------------------------
  TMM           0                            
  Mode          source-address               
  Value         126.xxx.xxx.xxx               
  Age (sec.)    298                          
  Virtual Name  /Common/Web-VS               
  Virtual Addr  10.0.1.100:80                
  Node Addr     10.0.2.24:80                 
  Pool Name     /Common/Web-Pool             
  Client Addr   126.xxx.xxx.xxx                
  Owner entry   not mirrored                 

Total records returned: 1
(tmos)# show ltm persistence persist-records all-properties
Sys::Persistent Connections
source-address - 10.0.1.100:80 - 10.0.2.24:80
---------------------------------------------
  TMM           0                            
  Mode          source-address               
  Value         126.xxx.xxx.xxx               
  Age (sec.)    299                          
  Virtual Name  /Common/Web-VS               
  Virtual Addr  10.0.1.100:80                
  Node Addr     10.0.2.24:80                 
  Pool Name     /Common/Web-Pool             
  Client Addr   126.xxx.xxx.xxx               
  Owner entry   not mirrored                 

Total records returned: 1
(tmos)# show ltm persistence persist-records all-properties
Sys::Persistent Connections
Total records returned: 0
(tmos)# show ltm persistence persist-records all-properties
Sys::Persistent Connections
Total records returned: 0
スポンサーリンク

Cookie パーシステンス

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

Cookieパーシステンスは、http /https通信に限ります。そのため、仮想サーバには、HTTPプロファイルが適用されている必要があります。

プロファイルの作成

送信元IPアドレス パーシステンスと同様、Local Traffic  >> Profiles >>Persistence よりプロファイルを設定します。
TypeCookieのものが、Cookieパーシステンスに該当します。

デフォルトのcookieを使用しても問題ありませんが、今回は、カスタムでプロファイルを作成してみます。右上のCreateをクリックします。

Nameは任意の名前(今回は、custom-cookie とします)とし、Persistence Typeで、Cookieを選択します。

すると下記のように画面が切り替わります。

デフォルトのMethodである、HTTP Cookie Insertが一番よく使用されます。実サーバからCookieの有無に関わらず、BIG-IPが独自のCookieをHTTPレスポンスに挿入します。

今回は、特にカスタム設定はせず、Finishedをクリックします。

下記のとおり登録されました。

仮想サーバに適用

Main >> Local Traffic >> Virtual Servers から、Web-VSをクリックします。

PropertiesタブからResourcesタブへ切り替えます。

Default Persistence Profile で、custom-cookie を選択し、Updateをクリックします。

動作確認

端末のブラウザ(Chrome)から、パーシステンスを適用した仮想アドレス(http://www.hirotanoblog.work)へアクセスすると、Web-02の画面が表示されます。何回か、接続を更新しても、Web-02のままです。

Chromeより 設定 >> セキュリティとプライバシー >> Cookieと他のサイトデータ >> すべてのCookieとサイトデータを表示よりwww.hirotanoblog.work のCookieを確認すると、BIGIPが挿入しているCookieが確認できます

Curlコマンドでも挿入されているCookieが確認できます。

$ curl -I www.hirotanoblog.work
HTTP/1.1 200 OK
Date: Sun, 27 Mar 2022 11:00:19 GMT
Server: Apache
Link: ; rel="https://api.w.org/"
Content-Type: text/html; charset=UTF-8
Set-Cookie: BIGipServerWeb-Pool=1191313418.20480.0000; path=/; Httponly

コメント