

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

# 编辑网络负载均衡器的属性
<a name="edit-load-balancer-attributes"></a>

创建网络负载均衡器之后，您可以编辑其属性。

**Topics**
+ [删除保护](#deletion-protection)
+ [跨可用区负载均衡](#load-balancer-cross-zone)
+ [可用区 DNS 亲和性](#zonal-dns-affinity)
+ [辅助 IP 地址](#secondary-ip-addresses)

## 删除保护
<a name="deletion-protection"></a>

为了防止您的网络负载均衡器被意外删除，您可以启用删除保护。默认情况下，已为网络负载均衡器禁用删除保护。

如果您为网络负载均衡器启用删除保护，则必须先禁用删除保护，然后才能删除网络负载均衡器。

------
#### [ Console ]

**要启用或禁用删除保护**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择网络负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 在**保护**部分，启用或禁用**删除保护**。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**要启用或禁用删除保护**  
使用带 `deletion_protection.enabled` 属性的 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn {{load-balancer-arn}} \
    --attributes "Key=deletion_protection.enabled,Value={{true}}"
```

------
#### [ CloudFormation ]

**要启用或禁用删除保护**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含该`deletion_protection.enabled`属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "deletion_protection.enabled"
          Value: "{{true}}"
```

------

## 跨可用区负载均衡
<a name="load-balancer-cross-zone"></a>

对于网络负载均衡器，负载均衡器级别的跨区域负载均衡默认为关闭，但您可以随时启动它。对于目标组，默认设置是使用负载均衡器设置，但您可以通过在目标组级别明确启动或关闭跨区域负载均衡来覆盖默认设置。有关更多信息，请参阅 [目标组的跨区域负载均衡](edit-target-group-attributes.md#target-group-cross-zone)。

------
#### [ Console ]

**要启用或禁用负载均衡器的跨区域负载均衡**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中的 **Load Balancing (负载平衡)** 下，选择 **Load Balancers (负载均衡器)**。

1. 选择负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 在 **Edit load balancer attributes**（编辑负载均衡器属性）页面上，开启或关闭 **Cross-zone load balancing**（跨区域负载均衡）。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**要启用或禁用负载均衡器的跨区域负载均衡**  
使用带 `load_balancing.cross_zone.enabled` 属性的 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn {{load-balancer-arn}} \
    --attributes "Key=load_balancing.cross_zone.enabled,Value={{true}}"
```

------
#### [ CloudFormation ]

**要启用或禁用负载均衡器的跨区域负载均衡**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer ](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含该`load_balancing.cross_zone.enabled`属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "load_balancing.cross_zone.enabled"
          Value: "{{true}}"
```

------

## 可用区 DNS 亲和性
<a name="zonal-dns-affinity"></a>

使用默认客户端路由策略时，发送到网络负载均衡器 DNS 名称的请求将收到任何运行状况良好的网络负载均衡器 IP 地址。这会导致跨网络负载均衡器可用区分配客户端连接。使用可用区亲和性路由策略时，客户端 DNS 查询会优先考虑自身可用区中的网络负载均衡器 IP 地址。这有助于降低延迟和提高弹性，因为客户端在连接到目标时无需跨越可用区边界。

可用区亲和性路由策略仅适用于使用 Route 53 Resolver 解析网络负载均衡器 DNS 名称的客户端。有关更多信息，请参阅《Amazon Route 53 开发人员指南》中的 [什么是 Amazon Route 53 Resolver？](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)**。

**使用 Amazon Route 53 Resolver 的网络负载均衡器的可用客户端路由策略：**
+ **可用区亲和性** – *100% 可用区亲和性*

  客户端 DNS 查询将优先使用自身可用区中的网络负载均衡器 IP 地址。如果自身可用区中没有运行状况良好的网络负载均衡器 IP 地址，则查询可能会解析到其他可用区。
+ **部分可用区亲和性** – *85% 可用区亲和性*

  85% 的客户端 DNS 查询会优先选择自身可用区中的网络负载均衡器 IP 地址，剩余的查询会解析到任何运行状况良好的可用区。如果自身可用区中没有运行正常的 IP 地址，则查询可能会解析到其他运行正常的可用区。如果所有可用区中都没有运行正常的 IP 地址，则查询会解析到任何可用区。
+ **任意可用区**（默认值）– *0% 可用区亲和性*

  客户端 DNS 查询将在所有网络负载均衡器可用区中运行状况良好的网络负载均衡器 IP 地址中进行解析。

可用区亲和性有助于将请求从客户端路由到网络负载均衡器，而跨可用区负载均衡有助于将请求从网络负载均衡器路由到目标。使用可用区亲和性时，应关闭跨可用区负载均衡，这可确保从客户端到目标的网络负载均衡器流量保持在同一可用区内。使用此配置，客户端流量将发送到网络负载均衡器可用区，因此建议将您的应用程序配置为在每个可用区中独立扩展。当每个可用区的客户端数量或每个可用区的流量不同时，这是一个重要的考虑因素。有关更多信息，请参阅 [目标组的跨区域负载均衡](edit-target-group-attributes.md#target-group-cross-zone)。

当可用区被认为运行不正常或开始可用区转移时，除非故障打开生效，否则该可用区 IP 地址将被视为运行不正常，并且不会返回至客户端。当 DNS 记录处于故障打开状态时，可用区亲和性将保持不变。这有助于保持可用区的独立性，并防止潜在的跨可用区故障。

使用可用区亲和性时，预计可用区之间有时会出现不平衡的情况。建议确保目标在可用区级别进行扩展，以支持每个可用区工作负载。如果不平衡情况十分严重，则建议关闭可用区亲和性。这样将可以在 60 秒内在所有网络负载均衡器可用区之间均匀分配客户端连接，或者在 DNS TTL 之间均匀分配。

**在使用可用区亲和性之前，应注意以下几点：**
+ 可用区亲和性会导致使用 Route 53 Resolver 的所有网络负载均衡器客户端发生变化。
  + 客户端无法决定是要使用本可用区 DNS 解析，还是多可用区解析，相关决定由可用区亲和性代为作出。
  + 客户端并没有可靠的方法来确定其何时受到可用区亲和性的影响，也没有可靠的方法来确定 IP 地址所位于的具体可用区。
+ 将可用区亲和性与网络负载均衡器和 Route 53 解析器结合使用时，我们建议客户端在自己的可用区中使用 Route 53 解析器入站端点。
+ 在 DNS 运行状况检查认为其可用区本地 IP 地址完全不正常并将其从 DNS 中移除前，客户端将继续分配该本地地址。
+ 如果在开启跨区域负载平衡的情况下使用可用区亲和性，则可能会导致可用区之间的客户端连接分配失衡。建议将应用程序堆栈配置为在每个可用区中独立扩展，从而确保其可以支持相应的可用区客户端流量。
+ 如果开启了跨可用区负载平衡，网络负载均衡器将受到跨可用区影响。
+ 每个网络负载均衡器可用区的负载将与客户端请求的可用区位置成正比。如果您未配置在特定可用区中运行的客户端数量，则必须以被动方式独立扩展每个可用区。

### 监控
<a name="zonal-affinity-monitoring"></a>

建议使用可用区网络负载均衡器指标来跟踪可用区之间的连接分配情况。您可以使用指标来查看每个可用区的新连接数和活跃连接数。

我们建议跟踪以下指标：
+ **`ActiveFlowCount`** – 从客户端发往目标的并发流（或连接）总数。
+ **`NewFlowCount`** – 指定时间段内建立的从客户端到目标的新流（或连接）总数。
+ **`HealthyHostCount`** – 被视为运行正常的目标数量。
+ **`UnHealthyHostCount`** – 被视为运行不正常的目标数量。

有关更多信息，请参阅 [CloudWatch 您的 Network Load Balancer 的指标](load-balancer-cloudwatch-metrics.md)。

### 启用可用区亲和性
<a name="enable-zonal-affinity"></a>

------
#### [ Console ]

**要启用可用区亲和性**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择网络负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 在**可用区路由配置**、**客户端路由策略（DNS 记录）**下，选择**可用区亲和性**或**部分可用区亲和性**。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**要启用可用区亲和性**  
使用带 `dns_record.client_routing_policy` 属性的 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn {{load-balancer-arn}} \
    --attributes "Key=dns_record.client_routing_policy,Value={{partial_availability_zone_affinity}}"
```

------
#### [ CloudFormation ]

**要启用可用区亲和性**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含该`dns_record.client_routing_policy`属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "dns_record.client_routing_policy"
          Value: "{{partial_availability_zone_affinity}}"
```

------

## 辅助 IP 地址
<a name="secondary-ip-addresses"></a>

如果您遇到[端口分配错误](load-balancer-troubleshooting.md#port-allocation-errors-privatelink)，并且无法向目标组添加目标来解决这些错误，则可以向负载平衡器网络接口添加辅助 IP 地址。对于启用了负载均衡器的每个区域，我们从负载均衡器子网中选择 IPv4地址并将其分配给相应的网络接口。这些辅助 IP 地址用于与目标建立连接。它们还用于运行状况检查流量。我们建议您先添加一个辅助 IP 地址，监控 `PortAllocationErrors` 指标，并仅在端口分配错误未解决时再添加另一个辅助 IP 地址。

**警告**  
添加辅助 IP 地址后，您无法将其删除。释放辅助 IP 地址的唯一方法是删除负载均衡器。在添加辅助 IP 地址之前，请验证负载均衡器子网中是否有足够的可用 IPv4地址。

------
#### [ Console ]

**要添加辅助 IP 地址**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择网络负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 展开**特殊情况属性**，解锁**按子网自动分配辅助 IP 地址**属性，并选择辅助 IP 地址的数量。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**要添加辅助 IP 地址**  
使用带 `secondary_ips.auto_assigned.per_subnet` 属性的 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn {{load-balancer-arn}} \
    --attributes "Key=secondary_ips.auto_assigned.per_subnet,Value={{1}}"
```

您可以使用[describe-network-interfaces](https://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-network-interfaces.html)命令获取负载均衡器网络接口 IPv4的地址。`--filters` 参数将结果范围限定为网络负载均衡器的网络接口，而 `--query` 参数进一步将结果范围限定为指定名称的负载均衡器，并仅显示指定字段。您可以包括所需的其他字段。

```
aws elbv2 describe-network-interfaces \
    --filters "Name=interface-type,Values=network_load_balancer" \
    --query "NetworkInterfaces[?contains(Description,'{{my-nlb}}')].{ID:NetworkInterfaceId,AZ:AvailabilityZone,Addresses:PrivateIpAddresses[*]}"
```

------
#### [ CloudFormation ]

**要添加辅助 IP 地址**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含该`secondary_ips.auto_assigned.per_subnet`属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-nlb
      Type: network
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "secondary_ips.auto_assigned.per_subnet"
          Value: "{{1}}"
```

------