Skip to content

Commit 4acf54e

Browse files
author
wangyazhou
committed
添加负载均衡实现原理文章
1 parent 6854de6 commit 4acf54e

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

.obsidian/app.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"readableLineLength": false,
77
"pdfExportSettings": {
88
"includeName": true,
9-
"pageSize": "Letter",
9+
"pageSize": "A4",
1010
"landscape": false,
1111
"margin": "0",
1212
"downscalePercent": 100

network/负载均衡与代理技术.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ TLS 卸载(TLS Termination)是指将 TLS 加密/解密、证书管理等操
9999

100100
- **减轻后端负载**:后端服务器无需处理加密/解密操作,可以专注于业务逻辑处理。
101101
- **减少运维负担**:负载均衡器集中管理 SSL 证书的配置和更新,避免每个后端服务器单独管理证书。
102-
- **提升请求效率**:负载均衡器通常具备硬件加速能力,并经过优化,能更高效地处理 TLS 连接(详见本书第二章 2.5.2 节)
102+
- **提升请求效率**:负载均衡器通常具备硬件加速能力,并经过优化,能更高效地处理 TLS 连接。
103103

104104
### 5 安全和 DDoS 防御
105105

@@ -190,7 +190,8 @@ TLS 卸载(TLS Termination)是指将 TLS 加密/解密、证书管理等操
190190

191191
LVS 的基本原理可以用一句话概述,通过修改 MAC 层、IP 层、TCP 层的数据包,实现一部分交换机和网关的功能,将流量转发至真正的服务器上。这三种数据包修改方式分别对应 LVS 提供的三种工作模式,接下来将详细介绍它们的工作原理。
192192

193-
## [#](https://www.thebyte.com.cn/balance/balance4.html#_4-4-1-%E7%9B%B4%E6%8E%A5%E8%B7%AF%E7%94%B1%E6%A8%A1%E5%BC%8F)4.4.1 直接路由模式
193+
194+
### 1 直接路由模式
194195
LVS 的直接路由模式实际是一种链路层转发技术。
195196

196197
链路层负转发的原理是,负载均衡器(LVS)收到请求后,修改数据帧的目标 MAC 地址,再由交换机转发至某个“后端服务器”。
@@ -199,11 +200,11 @@ LVS 的直接路由模式实际是一种链路层转发技术。
199200

200201
例如,若某个 VIP 地址为 1.1.1.1,可以通过以下命令将该 IP 绑定到后端服务器的 lo 接口:
201202

202-
```
203+
```bash
203204
$ ip addr add 1.1.1.1/32 dev lo
204205
```
205206

206-
在直接路由模式中,请求通过负载均衡器转发至后端服务器,而后端服务器的响应无需再经过负载均衡器,请求、转发和响应之间形成“三角关系”,因此该模式也被称为“三角传输模式”,如图 4-9 所示。
207+
在直接路由模式中,请求通过负载均衡器转发至后端服务器,而后端服务器的响应无需再经过负载均衡器,请求、转发和响应之间形成“三角关系”,因此该模式也被称为“三角传输模式”
207208

208209
![[balancer4-dsr-ZMeH2uRR.svg]]
209210
直接路由模式优点在于,它特别适合响应流量远大于请求流量的场景。例如,在典型的 HTTP 请求/响应模式中,请求流量可能仅占总流量的 10%,而响应流量占 90%。通过三角传输模式,负载均衡器只需处理 1/10 的总流量。这种设计不仅显著降低了带宽成本,还提升了负载均衡器的可靠性(流量越少、负载越轻、越不容易出现问题)。
@@ -213,15 +214,15 @@ $ ip addr add 1.1.1.1/32 dev lo
213214
- **监控功能受限**:由于响应流量直接返回客户端,负载均衡器无法监控完整的 TCP 连接状态,这可能影响防火墙策略的实施。例如,负载均衡器只能捕获 TCP 连接的 SYN 包,而无法跟踪后续的 ACK 包。
214215
- **网络架构要求高**:负载均衡器与后端服务器之间通过链路层通信,因此要求两者位于同一子网内,这对网络拓扑设计提出了较高的要求。
215216

216-
## [#](https://www.thebyte.com.cn/balance/balance4.html#_4-4-2-%E9%9A%A7%E9%81%93%E6%A8%A1%E5%BC%8F)4.4.2 隧道模式
217+
### 2 隧道模式
217218

218219
在直接路由模式中,请求通过修改链路层的 MAC 地址转发;而在网络层,当然也可以通过修改 IP 数据包实现请求转发。LVS 的隧道模式和 NAT 模式都属于网络层负载均衡,两者的区别是修改 IP 数据包的方式不同。
219220

220221
隧道模式的基本原理是,LVS 创建一个新的 IP 数据包,将原始 IP 数据包作为“负载”(payload)嵌入其中。新数据包随后被三层交换机路由到后端服务器,后者通过拆包机制移除额外的头部,恢复原始 IP 数据包并进行处理。
221222

222223
举一个具体例子,假设客户端(IP 203.0.113.5)向 VIP (1.1.1.1) 发送的数据包如下:
223224

224-
```
225+
```json
225226
{
226227
Source IP: 203.0.113.5,
227228
Destination IP: 1.1.1.1,
@@ -231,7 +232,7 @@ $ ip addr add 1.1.1.1/32 dev lo
231232

232233
负载均衡器收到数据包后,根据调度算法选择一台后端服务器(172.12.1.3),并对数据包进行封装处理。
233234

234-
```
235+
```json
235236
{
236237
Source IP: 172.12.1.2,
237238
Destination IP: 172.12.1.3,
@@ -245,11 +246,11 @@ $ ip addr add 1.1.1.1/32 dev lo
245246

246247
将一个 IP 数据包封装在另一个 IP 数据包内,并配合相应的解包机制,这是典型的 IP 隧道技术。在 Linux 中,IPIP 隧道实现了字面意义上的“IP in IP”。由于隧道模式工作在网络层,绕过了直接路由模式的限制,因此 LVS 隧道模式可以跨越子网进行通信。
247248

248-
如图 4-10 所示,由于源数据包信息完全保留,隧道模式因此也继承了三角传输的特性。
249+
如图所示,由于源数据包信息完全保留,隧道模式因此也继承了三角传输的特性。
249250
![[balancer4-tunnel-DGY5TldN.svg]]
250251
隧道模式可以视为直接路由模式的升级版,支持跨网通信。不过,由于涉及数据包的封装与解封,后端服务器必须支持相应的隧道技术(如 IPIP 或 GRE)。其次,隧道模式继承了三角传输的特性,因此后端服务器也需要处理虚拟 IP(VIP)与 lo 接口的关系。
251252

252-
## [#](https://www.thebyte.com.cn/balance/balance4.html#_4-4-3-%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2%E6%A8%A1%E5%BC%8F)4.4.3 网络地址转换模式
253+
### 3 网络地址转换模式
253254

254255
另一种对 IP 数据包的修改方式是**直接修改原始 IP 数据包的目标地址,将其替换为后端服务器的地址**。这种方式被称为“网络地址转换”(NAT)模式,其请求和响应的流程如图 4-11 所示。
255256

@@ -269,11 +270,11 @@ $ ip addr add 1.1.1.1/32 dev lo
269270

270271
从上述可见,网络地址转换(NAT)模式下,负载均衡器代表整个服务集群接收和响应请求。因此,当流量压力较大时,系统的瓶颈就很容易体现在负载均衡器上。
271272

272-
## [#](https://www.thebyte.com.cn/balance/balance4.html#_4-4-4-%E4%B8%BB%E5%A4%87%E6%A8%A1%E5%BC%8F)4.4.4 主备模式
273+
### 4 主备模式
273274

274275
到目前为止,我们讨论的都是单个负载均衡器的工作模式。那么,如果负载均衡器出现故障呢?这将影响所有经过该负载均衡器的连接。为了避免因负载均衡器故障导致服务中断,负载均衡器通常以高可用模式进行部署。
275276

276-
图 4-12 展示了最常见的主备模式,其核心在于每台节点上运行 Keepalived 软件,该软件实现了 VRRP(Virtual Router Redundancy Protocol)协议,虚拟出一个对外提供服务的 IP 地址(VIP)。默认情况下,VIP 绑定在主节点(Master)上,由主节点处理所有流量请求。备用节点(Backup)则持续监控主节点的状态,当主节点发生故障时,备用节点会迅速接管 VIP,确保服务不中断。
277+
如图展示了最常见的主备模式,其核心在于每台节点上运行 Keepalived 软件,该软件实现了 VRRP(Virtual Router Redundancy Protocol)协议,虚拟出一个对外提供服务的 IP 地址(VIP)。默认情况下,VIP 绑定在主节点(Master)上,由主节点处理所有流量请求。备用节点(Backup)则持续监控主节点的状态,当主节点发生故障时,备用节点会迅速接管 VIP,确保服务不中断。
277278

278279
![[lvs-ha-DO2CUxU4.svg]]
279280

@@ -282,14 +283,14 @@ $ ip addr add 1.1.1.1/32 dev lo
282283
- 在正常运行时,50% 的资源处于闲置状态,备用服务器始终处于空转状态,导致资源利用率低下。
283284
- 现代分布式系统更加注重高容错性。理想情况下,即使多个实例同时发生故障,服务仍应能持续运行。然而,在主备模式下,一旦主节点和备用节点同时发生故障,服务将完全中断。
284285

285-
## [#](https://www.thebyte.com.cn/balance/balance4.html#_4-4-5-%E5%9F%BA%E4%BA%8E%E9%9B%86%E7%BE%A4%E5%92%8C%E4%B8%80%E8%87%B4%E6%80%A7%E5%93%88%E5%B8%8C%E7%9A%84%E5%AE%B9%E9%94%99%E5%92%8C%E5%8F%AF%E6%89%A9%E5%B1%95%E6%A8%A1%E5%BC%8F)4.4.5 基于集群和一致性哈希的容错和可扩展模式
286+
### 5 基于集群和一致性哈希的容错和可扩展模式
286287

287288
近些年,业界开始设计全新四层负载均衡系统,其设计目标是:
288289

289290
- 避免传统主备模式的缺点。
290291
- 从依赖厂商的商业硬件方案,转向基于标准服务器和网卡的通用软件解决方案。
291292

292-
如图 4-13 所示,这种设计被称为“基于集群和一致性哈希的容错和可扩展性”(Fault Tolerance and Scaling via Clustering and Distributed Consistent Hashing)。其工作原理如下:
293+
如图所示,这种设计被称为“基于集群和一致性哈希的容错和可扩展性”(Fault Tolerance and Scaling via Clustering and Distributed Consistent Hashing)。其工作原理如下:
293294

294295
- N 个边缘路由器使用相同的 BGP 权重通告所有 Anycast VIP[^1],确保同一流(flow)的所有数据包都通过相同的边缘路由器。
295296
- N 个四层负载均衡器使用相同的 BGP 权重向边缘路由器通告 VIP,确保同一流的数据包始终经过相同的四层负载均衡器。

0 commit comments

Comments
 (0)