[Pound 2.8] 負荷分散とCookieによるセッション維持

リバースプロキシ(Pound)Cookie,Pound,負荷分散

はじめに

前回の記事で、Poundのインストールと初期設定の説明を行い、リバースプロキシサーバとして動作させてみました。

今回は、バックエンドサーバを2台用意して負荷分散をします。また、同一のクライアントからのリクエストを常に同じバックエンドサーバに割り振るようにセッション維持(パーシステンス)の設定を行います。

構成

CentOS8でPoundをリバースプロキシとして動作させます。PoundはインターネットからHTTPS/TCP443のリクエストを受けます。続いて、Poundはインターネット側から受け取ったリクエストをバックエンドの2台のうちのどちらかにHTTP/TCP8080でリクエストを転送します。また、2回目以降の接続には同じバックエンドサーバに割り振られるようにセッション維持をさせます。

セッション維持の方式ですがPoundではクライアントIPやURLベース、Cookie等いくつかあります。今回はCookie方式を使います。

なお、Poundの負荷分散やセッション維持の詳細動作について、manやググったりしましたが詳細な説明を述べている情報は見つけられませんでした。そのため推測となりますが、(1)初回のリクエストをWebサーバへ転送。複数のWebサーバへの転送基準は不明だが後述の「Priority」設定で重みづけが可能。(2)WebサーバがCookieを付与してレスポンスをする。(3)おそらくその際にPoundはレスポンスを行ったバックエンドサーバとCookie情報を記憶する。(4)2回目以降のリクエスト時はCookieが付与されているので、PoundはCookieを読み取り記憶しているバックエンドサーバにリクエストを送る。という動作だと思います。

Poundの設定

負荷分散とCookieのセッション維持設定です。

17~30行目がバックエンドサーバ2台分の設定です。Priorityは1~9まで指定できデフォルトが5です。高いほどリクエストが転送されるようになります。

31~35行目がセッション維持の設定です。
TypeをCOOKIEにします。
IDはバックエンドサーバで付与するCookieの名前を指定します。当方の場合は先日WordPressでCookieを発行させる設定を行っておりその名前を使います。(WordPressでCookieを発行させたブログ記事
TTLはアイドルタイムアウトです。120秒間通信が無ければセッション維持を開放します。

# vi /etc/pound.cfg

User "pound"
Group "pound"
Control "/var/lib/pound/pound.cfg"

Alive 30

ListenHTTPS
  Address 192.168.200.12
  Port    443
  Cert    "/etc/pki/tls/certs/www.lab-infra.com.pem"
  AddHeader "X-Forwarded-Proto: https"
  xHTTP 0
End

## WordPress
Service
  HeadRequire "Host:.*www.lab-infra.com"
  BackEnd
    Address 192.168.201.21       #1台目のWebサーバ
    Port    8080
    TimeOut 10
    Priority 5
    Disabled 0
  End
  BackEnd
    Address 192.168.201.22       #2台目のWebサーバ
    Port    8080
    TimeOut 10
    Priority 5
    Disabled 1
  End
  Session
    Type    COOKIE
    ID      "PHPSESSID"
    TTL     120
  End
End

設定は以上です。(『systemctl restart pound』などの反映コマンドは省略します)

動作確認

セッション維持『無効』で確認

まず、Session維持を設定しない状態で動作を確認します。
Sessionをすべてコメントアウトします。)

#     Session
#       Type    COOKIE
#       ID      "PHPSESSID"
#       TTL     120
#     End

次にサイトへ接続します。なお、それぞれのWebサーバには『TESTPAGE-1』と『TESTPAGE-2』のページを配置してます。その状態で数回接続をすると、同じくらいの頻度で両ページが表示されます。つまり負荷分散が行われていることが確認できます。

セッション維持『有効』で確認

次にセッション維持を有効にして動作確認をします。
先ほどのSessionのコメントアウトを全て外します。

     Session
       Type    COOKIE
       ID      "PHPSESSID"
       TTL     120
     End

サイトに数回接続しましたが、何度接続しても『TESTPAGE-1』が表示され、セッション維持が機能していることが確認できました。

なお、Cookieを削除し再度接続したところ『TESTPAGE-2』が表示され、その後数回接続をしても『TESTPAGE-2』が表示され続けセッション維持が効いていることが確認できました。
(Google ChromeでCookieを削除するには「F12」キー>Application>Cookiesから対象サイトのURL上で右クリックでコンテキストメニューを開き「Clear」)

以上でPoundの負荷分散、Cookieによるセッション維持の設定に関する説明を終わります。