11.18. 使用 Cookie 在现有生产站点上配置 A-B 测试
您可以使用带有第 7 层(L7)的 Red Hat OpenStack Platform (RHOSP)负载均衡服务(octavia)为生产环境网站配置 A-B 测试或分割测试。
在本例中,路由到网站的"B"版本的 Web 客户端,将池中成员服务器(pool1)中的 Cookie site_version 设置为 B。
先决条件
- 两个生产网站(站点 A 和网站 B)。
您已按照"基于到池的起始路径重定向请求"的说明配置了 HTTP 负载均衡器。所需的配置概述如下:
-
在负载均衡器 (
lb1) 中的监听器 (listener1)。 -
带有以
/js或/images开头的 URL 的 HTTP 请求发送到池(static_pool)。 -
所有其他请求都发送到侦听器默认池(
pool1)。 - 有关配置的详情,请参考 第 11.12 节 “根据到池的开始路径重定向请求”。
-
在负载均衡器 (
流程
提供您的凭据文件。
- 示例
source ~/overcloudrc
$ source ~/overcloudrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在负载均衡器(
lb1)上创建第三个池(pool_B)。注意括号中的值是此流程中的示例命令中使用的示例值。使用适合您的站点的值替换这些示例值。
- 示例
openstack loadbalancer pool create --name pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP --wait
$ openstack loadbalancer pool create --name pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在专用子网(
private_subnet)上添加负载均衡器成员(192.0.2.50和192.0.2.51)到池(pool_B)。- 示例
在本例中,后端服务器
192.0.2.50和192.0.2.51分别命名为member1和member2:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在负载平衡器(
lb1)上创建第四个池(static_pool_B)。- 示例
openstack loadbalancer pool create --name static_pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP --wait
$ openstack loadbalancer pool create --name static_pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在专用子网(
private_subnet)上添加负载均衡器成员(192.0.2.100和192.0.2.101)到池(static_pool_B)。- 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在监听器 (
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 --wait
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool static_pool_B --name policy2 --position 1 listener1 --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
向策略(
policy2)添加一个 L7 规则,它使用一个正则表达式匹配以/js或/images开始的请求路径。- 示例
openstack loadbalancer l7rule create --compare-type REGEX \ --type PATH --value '^/(js|images)' policy2 --wait
$ openstack loadbalancer l7rule create --compare-type REGEX \ --type PATH --value '^/(js|images)' policy2 --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
向策略添加第二个 L7 规则,该策略(
policy2)与 Cookie (site_version)匹配到确切的字符串(B)。- 示例
openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy2 --wait
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy2 --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在监听器 (
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 --wait
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool pool_B --name policy3 --position 2 listener1 --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将 L7 规则添加到与 Cookie (
site_version)匹配的策略(policy3)到确切的字符串(B)。- 示例
openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy3 --wait
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy3 --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将带有最具体规则的 L7 策略分配给较低位置非常重要,因为第一个规则都评估为 True 的策略是其操作的策略。在此过程中,需要在
policy3之前评估policy2,以避免将请求发送到不正确的池。
验证
-
运行
openstack loadbalancer l7policy list命令,并验证策略policy2和policy3是否存在。 运行
openstack loadbalancer l7rule list <l7policy> 命令,并验证每个对应策略都有带有STARTS_WITH的compare_type规则。- 示例
openstack loadbalancer l7rule list policy2 openstack loadbalancer l7rule list policy3
$ openstack loadbalancer l7rule list policy2 $ openstack loadbalancer l7rule list policy3Copy to Clipboard Copied! Toggle word wrap Toggle overflow