搜索

第 8 章 路由优化

download PDF

8.1. 扩展 OpenShift Container Platform HAProxy 路由器

8.1.1. 基准性能

OpenShift Container Platform 路由器 是所有用于 OpenShift Container Platform 服务的外部流量的入站点。

当根据每秒处理的 HTTP 请求来评估单个 HAProxy 路由器性能时,其性能取决于多个因素。特别是:

  • HTTP keep-alive/close 模式,
  • 路由类型
  • 对 TLS 会话恢复客户端的支持
  • 每个目标路由的并行连接数
  • 目标路由数
  • 后端服务器页面大小
  • 底层基础结构(网络/SDN 解决方案、CPU 等)

具体环境中的性能会有所不同,我们的实验室在一个有 4 个 vCPU/16GB RAM,一个单独的 HAProxy 路由器处理 100 个路由来提供后端的 1kB 静态页面的公共云实例中进行测试,其每秒的交易数如下。

在 HTTP 的 keep-alive 模式下:

EncryptionROUTER_THREADS unsetROUTER_THREADS=4

none

23681

24327

edge

14981

22768

passthrough

34358

34331

re-encrypt

13288

24605

在 HTTP 关闭(无 keep-alive)情境中:

EncryptionROUTER_THREADS unsetROUTER_THREADS=4

none

3245

4527

edge

1910

3043

passthrough

3408

3922

re-encrypt

1333

2239

TLS 会话恢复用于加密路由。使用 HTTP keep-alive 设置,单个 HAProxy 路由器可在页面大小小到 8 kB 时充满 1 Gbit NIC。

当在使用现代处理器的裸机中运行时,性能可以期望达到以上公共云实例测试性能的大约两倍。这个开销是由公有云的虚拟化层造成的,基于私有云虚拟化的环境也会有类似的开销。下表是有关在路由器后面的应用程序数量的指导信息:

应用程序数量应用程序类型

5-10

静态文件/web 服务器或者缓存代理

100-1000

生成动态内容的应用程序

取决于所使用的技术,HAProxy 通常可支持 5 到 1000 个程序的路由。路由器性能可能会受其后面的应用程序的能力和性能的限制,如使用的语言,静态内容或动态内容。

应该使用 路由器分片 为应用程序提供更多路由,并帮助水平扩展路由层。

8.1.2. 性能优化

8.1.2.1. 设置连接的最大数量

HAProxy 可扩展性最重要的可调整参数之一是 maxconn 参数,该参数将每个进程的最大并发连接数设置为给定数字。通过编辑 OpenShift Container Platform HAProxy 路由器部署配置文件中的 ROUTER_MAX_CONNECTIONS 环境变量来调整此参数。

注意

连接包括 frontend 和 internal 后端。这表示两个连接。务必将 ROUTER_MAX_CONNECTIONS 设置为两倍,超过您要创建的连接数。

8.1.2.2. CPU 和中断关联性

在 OpenShift Container Platform 中,HAProxy 路由器以单一进程的形式运行。OpenShift Container Platform HAProxy 路由器通常在具有较少但频率较高的内核的系统上更好地执行,而不是在大量频率较高的对称多进程(SMP)系统中执行。

将 HAProxy 进程固定到一个 CPU 内核,而对另一个 CPU 内核的网络中断往往会提高网络性能。在相同的非统一内存访问(NUMA)节点上具有进程和中断,有助于通过确保共享的 L3 缓存来避免内存访问。但是,公共云环境中通常无法进行这种级别的控制。在裸机主机上,irqbalance 会自动处理外围组件互连(PCI)本地化,以及用于中断请求行(IRQ)的 NUMA 关联性。在云环境中,此类信息通常不提供给操作系统。

CPU 固定通过 taskset 或使用 HAProxy 的 cpu-map 参数来执行。此指令采用两个参数:进程 ID 和 CPU 内核 ID。例如,要将 HAProxy 进程 1 固定到 CPU 内核 0,请将以下行添加到 HAProxy 配置文件的全局部分:

    cpu-map 1 0

要修改 HAProxy 配置文件,请参阅部署 Customized HAProxy Router

8.1.2.3. 增加线程数

HAProxy 路由器在 OpenShift Container Platform 中支持多线程。在多个 CPU 内核系统上,增加线程数量可帮助性能,特别是在路由器终止 SSL 时。

要指定 HAProxy 路由器的线程数量,请参阅启用 HAProxy 线程路由器环境变量

8.1.2.4. 增加缓冲的影响

OpenShift Container Platform HAProxy 路由器请求缓冲区配置限制了传入的请求和来自应用程序响应中的标头大小。可以增加 HAProxy 参数 tune.bufsize 以允许处理更大的标头,并允许具有非常大 Cookie 的应用程序正常工作,如许多公共云提供商提供的负载均衡器接受的应用程序。但是,这会影响内存使用总量,特别是在打开大量连接时。使用大量打开连接时,内存用量就与这个可调参数增长几乎成比例。

8.1.2.5. HAProxy Reloads 的优化

较长的连接(如 WebSocket 连接)与较长的客户端/服务器 HAProxy 超时和短暂的 HAProxy 重新加载间隔相结合,可能会导致许多 HAProxy 进程实例化。这些进程必须处理旧的连接,这些连接在 HAProxy 配置重新加载之前启动。大量这些进程不可取,因为它会对系统造成不必要的负载,并可能导致问题,如内存不足的情况。

影响此行为的路由器环境变量是 ROUTER_DEFAULT_TUNNEL_TIMEOUTROUTER_DEFAULT_CLIENT_TIMEOUTROUTER_DEFAULT_SERVER_TIMEOUT 以及 RELOAD_INTERVAL

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.