11.18. cookie を使用して既存の本番サイトで AB テストを設定
レイヤー 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 --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --name pool_B --protocol HTTPプライベートサブネット (
private_subnet) のロードバランサーメンバー (192.0.2.50および192.0.2.51) をプール (pool_B) に追加します。例
$ openstack loadbalancer member create --address 192.0.2.50 --protocol-port 80 --subnet-id private_subnet pool_B $ openstack loadbalancer member create --address 192.0.2.51 --protocol-port 80 --subnet-id private_subnet pool_Bロードバランサー (
lb1) に 4 番目のプール (static_pool_B) を作成します。例
$ openstack loadbalancer pool create --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --name static_pool_B --protocol HTTPプライベートサブネット (
private_subnet) のロードバランサーメンバー (192.0.2.100および192.0.2.101) をプール (static_pool_B) に追加します。例
$ openstack loadbalancer member create --address 192.0.2.100 --protocol-port 80 --subnet-id private_subnet static_pool_B $ openstack loadbalancer member create --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