11.18. Cookie を使用して既存の本番サイトで A-B テストを設定
レイヤー 7 (L7) ポリシーと共に Red Hat OpenStack Platform (RHOSP) Load-balancing サービス (octavia) を使用して、実稼働環境 Web サイトの A-B テスト (または分割テスト) を設定できます。
以下の例では、Web サイトの “B” バージョンにルーティングする Web クライアントは、プール (pool1
) のメンバーサーバーによってクッキー site_version
を B
に設定します。
前提条件
- 2 つの実稼働環境用 Web サイト (サイト A とサイト B)
HTTP ロードバランサーが、「開始パスに基づくリクエストのプールへのリダイレクト」の手順に従って設定されている。必要な設定の概要は以下のとおりです。
-
ロードバランサー (
lb1
) のリスナー (listener1
)。 -
/js
または/images
で始まる URL を持つ HTTP リクエストは、プール (static_pool
) に送信される。 -
他のすべてのリクエストは、リスナーのデフォルトプール (
pool1
) に送信される。 - 設定の詳細は、「開始パスに基づくリクエストのプールへのリダイレクト」 を参照してください。
-
ロードバランサー (
手順
Source コマンドで認証情報ファイルを読み込みます。
例
$ source ~/overcloudrc
ロードバランサー (
lb1
) に 3 番目のプール (pool_B
) を作成します。注記丸かっこ内の値は、この手順のコマンド例で使用されるサンプルの値です。これらのサンプル値を、実際のサイトに適した値に置き換えてください。
例
$ openstack loadbalancer pool create --name pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP
プライベートサブネット (
private_subnet
) のロードバランサーメンバー (192.0.2.50
および192.0.2.51
) をプール (pool_B
) に追加します。例
この例では、バックエンドサーバー
192.0.2.50
と192.0.2.51
の名前は、それぞれmember1
とmember2
です。$ openstack loadbalancer member create --name member1 \ --address 192.0.2.50 --protocol-port 80 \ --subnet-id private_subnet pool_B $ openstack loadbalancer member create --name member2 \ --address 192.0.2.51 --protocol-port 80 \ --subnet-id private_subnet pool_B
ロードバランサー (
lb1
) に 4 番目のプール (static_pool_B
) を作成します。例
$ openstack loadbalancer pool create --name static_pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP
プライベートサブネット (
private_subnet
) のロードバランサーメンバー (192.0.2.100
および192.0.2.101
) をプール (static_pool_B
) に追加します。例
$ openstack loadbalancer member create --name member3 \ --address 192.0.2.100 --protocol-port 80 \ --subnet-id private_subnet static_pool_B $ openstack loadbalancer member create --name member4 \ --address 192.0.2.101 --protocol-port 80 \ --subnet-id private_subnet static_pool_B
リスナー (
listener1
) に L7 ポリシー (policy2
) を作成します。ポリシーには、アクション (REDIRECT_TO_POOL
) を追加し、プール (static_pool_B
) を示す必要があります。1
の位置にポリシーを挿入します。例
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool static_pool_B --name policy2 --position 1 listener1
リクエストパスの最初の
/js
または/images
にマッチする正規表現を使用する L7 ルールを、ポリシー (policy2
) に追加します。例
$ openstack loadbalancer l7rule create --compare-type REGEX \ --type PATH --value '^/(js|images)' policy2
文字列 (
B
) のクッキー (site_version
) にマッチする 2 番目の L7 ルールを、ポリシー (policy2
) に追加します。例
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy2
リスナー (
listener1
) に L7 ポリシー (policy3
) を作成します。ポリシーには、アクション (REDIRECT_TO_POOL
) を追加し、プール (pool_B
) を示す必要があります。2
の位置にポリシーを挿入します。例
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool pool_B --name policy3 --position 2 listener1
文字列 (
B
) のクッキー (site_version
) にマッチする L7 ルールを、ポリシー (policy3
) に追加します。例
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy3
注記最も厳しいルールを持つ L7 ポリシーが低い位置に割り当てられることが重要です。これは、すべてのルールが True と評価される最初のポリシーが、アクションが実行されるポリシーになるからです。この手順では、誤ったプールにリクエストが送信されないように、
policy3
の前にpolicy2
が評価される必要があります。
検証
-
openstack loadbalancer l7policy list
コマンドを実行し、ポリシーpolicy2
およびpolicy3
が存在することを確認します。 openstack loadbalancer l7rule list <l7policy>
コマンドを実行し、それぞれのポリシーごとにcompare_type
がSTARTS_WITH
のルールが存在することを確認します。例
$ openstack loadbalancer l7rule list policy2 $ openstack loadbalancer l7rule list policy3
関連情報
- コマンドラインインターフェイスリファレンス の loadbalancer pool create
- コマンドラインインターフェイスリファレンス の loadbalancer member create
- コマンドラインインターフェイスリファレンス の loadbalancer l7policy create
- コマンドラインインターフェイスリファレンス の loadbalancer l7rule create