# 负载均衡器监听器

监听器定义了某一协议和端口集上的流量如何被接收和分发。它是这样一条规则："到达 `tcp/443` 的连接使用*此*算法分发到*这个*后端池，并采用*这些*会话持久化和健康检查设置。"

一个负载均衡器实例可以承载多个监听器——您希望对外暴露的每种协议/端口组合对应一个监听器。每个监听器独立评估。

## 监听器定义的内容

| 方面        | 取值                                                                                                                    |
| --------- | --------------------------------------------------------------------------------------------------------------------- |
| **协议**    | `TCP` 或 `UDP`                                                                                                         |
| **端口**    | 单个端口、以逗号分隔的列表，或 `起始-结束` 范围。关于全端口监听器，请参见[全端口监听器](/welcome/cn/elastic-compute/load-balancing/07-all-ports-listener.md)。 |
| **调度算法**  | `mh`（一致性哈希，默认）、`wrr`（加权轮询）、`lc`（最少连接）、`wIc`（加权最少连接）                                                                   |
| **会话持久化** | 关闭，或 60–3600 秒范围内的超时时间                                                                                                |
| **空闲超时**  | 静默连接在被清理前保持跟踪的时长                                                                                                      |
| **健康检查**  | 参见[健康检查](/welcome/cn/elastic-compute/load-balancing/05-health-check.md)                                               |
| **后端池**   | 一台或多台后端服务器。参见[后端服务器](/welcome/cn/elastic-compute/load-balancing/04-backend.md)                                        |

## 典型使用场景

**TCP/443 上的 Web 或 API 前端。** 最常见的模式。443 端口上的 TCP 监听器接受 TLS 加密的 HTTPS 流量，并将其转发至自行终止 TLS 的后端。负载均衡器不解析握手内容，只是选择一台后端并透传字节。

**UDP 上的 DNS、VoIP 或实时游戏。** UDP 监听器的工作方式相同，但通过 UDP——每个"连接"是由负载均衡器跟踪的 5 元组流。常用于 DNS（53）、QUIC 以及游戏/流媒体流量。

**多端口共享一个后端池。** 如果相同的后端在多个端口上接受流量（例如 API 在 8080，健康检查/监控指标在 8081），带有端口列表的单个监听器即可覆盖两者。除非调度或健康检查设置不同，否则无需为每个端口创建单独的监听器。

**主动模式协议的端口范围直通。** 使用端口范围的应用（FTP 数据传输、部分媒体协议）可通过带有端口范围的监听器提供服务。该范围内的每个端口都落到同一后端池。

***

## 协议

支持 TCP 和 UDP。负载均衡器是第四层直通模式——它不解析应用层协议，会话在后端而非负载均衡器上终止。

* **TCP** — 带有 SYN/FIN/RST 语义的完整连接跟踪。后端以真实客户端 IP 作为源地址；无需在后端进行任何配置。
* **UDP** — 基于 5 元组的流跟踪。回包通过负载均衡器路由回同一客户端。后端以真实客户端 IP 作为源地址。

HTTP/HTTPS、gRPC、WebSocket 和 QUIC 均可在 TCP 或 UDP 监听器上运行——负载均衡器透传字节，由后端处理协议。负载均衡器本身不进行 HTTP 级路由、SNI 检测或 TLS 终止。

## 端口配置

监听器端口可通过三种方式定义：

| 形式     | 示例            | 含义                       |
| ------ | ------------- | ------------------------ |
| 单个端口   | `443`         | 仅端口 443                  |
| 逗号分隔列表 | `80,443,8080` | 列出的每个端口                  |
| 范围     | `9000-9009`   | 9000 到 9009 之间的每个端口（含两端） |

对于需要单条规则覆盖某协议所有端口的工作负载，请参见[全端口监听器](/welcome/cn/elastic-compute/load-balancing/07-all-ports-listener.md)——这是一种独立的转发模式。

在同一实例内，监听器必须具有不同的（协议，端口）组合——同一协议上的同一端口不能出现在两个监听器中。

***

## 调度算法

调度器决定哪台健康的后端服务器处理每个新流。支持四种算法。

![调度算法](/files/bfrcWLHczTc3m8qZpFrr)

### 一致性哈希（`mh`）——默认

将连接的 5 元组（源 IP、源端口、目的 IP、目的端口、协议）哈希到一台后端。只要后端池未发生变化，相同的 5 元组始终落到同一后端。当后端被添加或移除时，只有最少必要的流量子集被重新分配。

**适用场景：** 会话受益于粘性到同一后端（缓存预热、内存状态），或者您希望在池发生小幅变动时仍保持稳定的流到后端映射。

### 加权轮询（`wrr`）

按顺序循环遍历健康的后端。每个新连接发往列表中的下一台。

**适用场景：** 后端容量相同，且您希望确定性的均匀轮换。`wrr` 忽略权重和当前负载。

### 最少连接（`lc`）

选择当前活跃连接数最少的后端。

**适用场景：** 请求持续时间不均——长时查询、流媒体、WebSocket——因此简单轮换会将工作堆积到一台后端，而其他后端处于空闲。

### 加权最少连接（`wIc`）

最少连接，但按每台后端的权重进行调整。权重为 3 的后端的有效容量是权重为 1 的后端的 3 倍，并按比例接受更多流量。

**适用场景：** 您的后端池是异构的——更大的虚拟机、更新的代际、混合实例类型。`wIc` 通常是最适应真实世界后端池的算法。

### 选择算法

* **默认使用 `mh`**，除非有特定原因。它提供稳定的流到后端映射，并在池随时间变化时表现良好。
* **后端容量不同时切换至 `wIc`**，以实现按容量比例的负载分配。
* **对于相同容量的后端池使用 `wrr`**，以实现可预测的轮换。
* **当同构池上的请求持续时间差异较大时使用 `lc`**。

算法仅作用于健康的后端。不健康的后端不被计为"零连接"——它们根本不被考虑。

***

## 会话持久化

会话持久化（粘性会话）使来自同一客户端的后续连接在持久化超时期间内持续落到同一后端。

| 设置              | 效果                                  |
| --------------- | ----------------------------------- |
| 关闭              | 每个新流独立调度。                           |
| 超时时间（60–3600 秒） | 客户端的第一次连接后，在超时窗口内来自该客户端的新连接将发往同一后端。 |

当客户端空闲时间超过超时时间后，粘性关联过期，下一次连接将重新进行调度。

**何时启用持久化：**

* 后端持有每会话状态（缓存、登录、进行中的上传），迁移成本高昂。
* 您的应用依赖客户端连续请求落到同一后端，且无法将该状态迁移到共享存储。

**何时不启用：**

* 无状态服务（无论哪台后端行为相同）——持久化只会削弱负载均衡的效果。
* 已使用 `mh` 时——一致性哈希已提供 5 元组粘性，无需在此基础上再叠加持久化。

## 空闲超时

每个监听器都有一个空闲超时——连接在两个方向均无数据包时保持跟踪的时长。超时后，该条目被清除；如果后续数据包到达，将无法匹配，流量必须建立新连接。

请根据您协议的预期静默期选择合适的值。短暂的请求/响应 API 可以使用较短的超时（数十秒）。长连接（WebSocket、数据库连接池、SSH）需要更长的超时——否则在消息之间的空闲期间，一条正常的连接会被清除。

***

## 请求/回复路径

客户端将数据包发送至 VIP。负载均衡器使用监听器的调度器选择一台健康的后端，并将数据包转发过去。后端的回包**直接发回给客户端**，不经过负载均衡器——只有正向路径处于负载均衡器的关键路径上。从客户端角度来看，回包来自 VIP；后端的地址始终不可见。

![监听器请求/回复路径](/files/qxPPDNfko9icgItzEayp)

## 后端池

每个监听器都有自己的后端池。同一台虚拟机可以出现在多个监听器的池中，但每次出现都有独立的权重和健康状态——如果不同监听器探测不同的端口，同一后端可能在一个监听器中健康，在另一个中不健康。

完整的配置模型请参见[后端服务器](/welcome/cn/elastic-compute/load-balancing/04-backend.md)。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.console.zenlayer.com/welcome/cn/elastic-compute/load-balancing/03-listener.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
