

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用负载均衡器生成的 cookie 的粘性
<a name="alb-cookies-stickiness"></a>

当你将 Application Load Balancer 与负载均衡器生成的 Cookie 一起使用时：
+ Application Load Balancer 使用[目标组权重](https://aws.amazon.com/premiumsupport/knowledge-center/elb-make-weighted-target-groups-for-alb/)来确定如何在目标组之间平衡传入流量。
+ 默认情况下，Application Load Balancer 使用循环方法[将请求路由到目标目标组中的 EC2 实例](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)。

  在流量最初路由到实例后，后续流量将在指定的持续时间内持续到该 EC2 实例。

**模板：**使用 CloudFormation 模板`stickysessionslb.yml`（包含在[示例代码.zip 文件](samples/stickiness.zip)中）尝试使用负载均衡器生成的 Cookie 进行粘性会话。

## 常见使用案例
<a name="alb-cookies-use-cases"></a>

在以下情况下，使用带有负载均衡器生成的 Cookie 的粘性会话：
+ PHP 网络服务器
+ 维护日志、购物车或聊天对话等临时会话数据的服务器

## basic.yml 的代码发生了变化
<a name="alb-cookies-code-changes"></a>

相关的代码更改位于目标组配置中，将粘性类型设置为，持续时间设置为 10 秒。`lb_cookie`


****  

|  |  | 
| --- |--- |
| basic.yml | stickysessionslb.yml | 
| <pre>TG1:<br />   Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />   Properties:<br />     Name: TG1<br />     Protocol: HTTP<br />     Port: 80<br />     TargetType: instance<br />     Targets:<br />       - Id: !Ref Instance1<br />       - Id: !Ref Instance2<br />VpcId: !Ref CustomVPC</pre> | <pre>TG1:<br />   Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />   Properties:<br />     Name: TG1<br />     Protocol: HTTP<br />     Port: 80<br />     TargetType: instance<br />     Targets:<br />       - Id: !Ref Instance1<br />       - Id: !Ref Instance2<br />     VpcId: !Ref CustomVPC<br />     TargetGroupAttributes:<br />       - Key: stickiness.enabled<br />         Value: true<br />       - Key: stickiness.type<br />         Value: lb_cookie<br />       - Key: stickiness.lb_cookie.duration_seconds<br />Value: 10</pre> | 

## 步骤
<a name="alb-cookies-steps"></a>

**备注**  
NAT 网关的费用很小。
多个 EC2 实例将比单个 EC2实例更快地耗尽您的免费套餐时间。

1. 在实验室环境`stickysessionslb.yml`中部署 CloudFormation 模板。

1. 等待，直到目标组实例的运行状况从**初始**变为正**常**。

1. 使用 HTTP (TCP/80) 在网络浏览器中导航到 Application Load Balancer 网址。

   例如：`http://alb-123456789.us-east-1.elb.amazonaws.com/`

   该网页显示以下内容之一：**实例 1- TG1**、**实例 2- TG1**、**实例 3- TG2** 或**实例 4- TG1**。

1. 多次刷新页面。

## 预期结果
<a name="alb-cookies-results"></a>

**注意**  
本示例中的 CloudFormation 模板将粘性配置为持续 10 秒。

加载网页的实例应在 10 秒的持续时间内保持不变，如页面文本所示。大约 10 秒钟后，粘性就会被释放，目标实例可能会发生变化。

## 工作方式
<a name="alb-cookies-how"></a>
+ 在此示例中，一个目标组中存在两个 EC2 实例。这些 EC2 实例安装了 Apache Web 服务器 (`httpd`)，并且每个 EC2 实例上的`index.html`页面文本都经过硬编码以区分开来。
+ Application Load Balancer 为用户的会话创建绑定，该绑定绑定到目标，并带有过期时间。
+ 当您重新加载页面时，Application Load Balancer 会检查绑定是否存在且尚未过期。
  + 如果绑定已过期或不存在，Application Load Balancer 将运行其路由逻辑并确定目标实例。
  + 如果绑定尚未过期，Application Load Balancer 会将流量路由到同一个目标实例。