11.18. 使用 Cookie 在现有生产站点上配置 A-B 测试
您可以使用带有第 7 (L7)策略的 Red Hat OpenStack Platform (RHOSP)负载均衡服务(octavia)策略为生产环境网站配置 A-B 测试或分割测试。
在本例中,路由到网站的"B"版本的 Web 客户端,由池(pool1)
中的成员服务器将 cookie site_version
设置为 B
。
先决条件
- 两个生产网站(现场 A 和 site B)。
您已根据根据池启动路径"重定向请求的说明配置了 HTTP 负载均衡器"。所需的配置概述如下:
-
在负载均衡器 (
lb1
) 中的监听器 (listener1
)。 -
以
/js
或/images
开头的 URL 发送到池(static_pool
)的 HTTP 请求。 -
所有其他请求都发送到侦听器的默认池(
池1
)。 - 有关配置的更多信息,请参阅 第 11.12 节 “根据到池的起始路径重定向请求”。
-
在负载均衡器 (
流程
提供您的凭据文件。
示例
source ~/overcloudrc
$ source ~/overcloudrc
Copy 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
$ openstack loadbalancer pool create --name pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP
Copy 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
$ openstack loadbalancer pool create --name static_pool_B \ --lb-algorithm ROUND_ROBIN --loadbalancer lb1 --protocol HTTP
Copy 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
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool static_pool_B --name policy2 --position 1 listener1
Copy 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
$ openstack loadbalancer l7rule create --compare-type REGEX \ --type PATH --value '^/(js|images)' policy2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将第二个 L7 规则添加到与 Cookie (
site_version
)匹配的策略(policy2
)到确切字符串(B
)。示例
openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy2
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy2
Copy 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
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool pool_B --name policy3 --position 2 listener1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 L7 规则添加到与 Cookie (
site_version
)匹配的策略(策略3)
到精确字符串(B
)。示例
openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy3
$ openstack loadbalancer l7rule create --compare-type EQUAL_TO \ --key site_version --type COOKIE --value B policy3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意为较低位置分配具有最具体规则的 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
$ openstack loadbalancer l7rule list policy2 $ openstack loadbalancer l7rule list policy3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow