8.18. 使用 Cookie 在现有产品站点上配置 A-B 测试
您可以使用 OpenShift (RHOSO)带有第 7 层(L7)策略的 Red Hat OpenStack Services on OpenShift (RHOSO)负载均衡服务(octavia)来配置 A-B 测试或分割测试。
在本例中,路由到网站的"B"版本的 Web 客户端将 Cookie site_version
设置为 B
,由池中的成员服务器(pool1)
设置为 B。
先决条件
-
管理员已为您创建一个项目,并为您提供了一个
clouds.yaml
文件来访问云。 python-openstackclient
软件包驻留在您的工作站上。$ dnf list installed python-openstackclient
- 两个生产网站(站点 A 和站点 B)。
您已根据起始路径到池的"重定向请求"中的说明配置了 HTTP 负载均衡器。所需的配置概述如下:
-
在负载均衡器 (
lb1
) 中的监听器 (listener1
)。 -
带有以
/js
或/images
开头的 URL 的 HTTP 请求发送到池(static_pool
)。 -
所有其他请求都发送到监听器默认池(
pool1
)。 - 有关配置的详情,请参考 第 8.12 节 “根据开始的路径将请求重定向到池”。
-
在负载均衡器 (
流程
确认为您的云设置了系统
OS_CLOUD
变量:$ echo $OS_CLOUD my_cloud
如果需要,重置变量:
$ export OS_CLOUD=my_other_cloud
作为替代方案,您可以在每次运行
openstack
命令时添加--os-cloud <cloud_name
> 选项指定云名称。在负载平衡器(
lb1
)上创建第三个池(pool_B
)。注意括号内的值是此流程中示例命令中使用的示例值。将这些示例值替换为适合您的站点的值。
Example
$ 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
)。Example
在本例中,后端服务器
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
在负载平衡器(
lb
1)上创建一个第四个池(static_pool_B
)。Example
$ 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
)。Example
$ 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
中插入策略。Example
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool static_pool_B --name policy2 --position 1 listener1
向策略(
policy2
)添加一个 L7 规则,它使用一个正则表达式匹配以/js
或/images
开始的请求路径。Example
$ openstack loadbalancer l7rule create --compare-type REGEX \ --type PATH --value '^/(js|images)' policy2
向策略(
policy2)
添加第二个 L7 规则,该规则将 Cookie (site_version
)与确切字符串(B
)匹配。Example
$ 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
处插入策略。Example
$ openstack loadbalancer l7policy create --action REDIRECT_TO_POOL \ --redirect-pool pool_B --name policy3 --position 2 listener1
将 L7 规则添加到与 Cookie (
site_version
)匹配的策略(policy
3)到确切的字符串(B
)。Example
$ 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
的规则。Example
$ openstack loadbalancer l7rule list policy2 $ openstack loadbalancer l7rule list policy3