调优 Red Hat Satellite 的性能
向红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。
您可以通过在 Bugzilla 中记录一个 ticket 来提交反馈:
- 导航到 Bugzilla 网站。
-
在 Component 字段中,使用
Documentation。 - 在 Description 字段中,输入您要改进的建议。包括文档相关部分的链接。
- 点 Submit Bug。
第 1 章 性能调优简介 复制链接链接已复制到粘贴板!
本文档提供了有关调整红帽卫星的性能和可扩展性的指导。尽管已经提供了很多护理,以使内容适用于覆盖各种用例,但如果尚未涵盖某些用例,请随时获得红帽支持,以获取未记录的用例。
第 2 章 性能调优快速入门 复制链接链接已复制到粘贴板!
您可以使用安装例程的调优标志,根据卫星中内置的调优配置文件,根据预期的受管主机数和硬件分配来调优卫星服务器。有关更多信息,请参阅在 连接的网络环境中 安装卫星服务器 中的使用预定义配置集调整卫星服务器 。
根据卫星管理的受管主机数量,提供四个大小。您可以在 /usr/share/foreman-installer/config/foreman.hiera/tuning/sizes 中包含的配置文件中找到特定的调优设置。
| Name | 受管主机数量 | 推荐 RAM | 推荐内核 |
|---|---|---|---|
| default | 0 – 5000 | 20 GiB | 4 |
| 中 | 5000 – 10000 | 32 GiB | 8 |
| 大 | 10000 – 20000 | 64 GiB | 16 |
| extra-large | 20000 – 60000 | 128 GiB | 32 |
| extra-extra-large | 60000+ | 256 GiB+ | 48+ |
流程
-
选择安装大小:
默认的、mium、大、extra-large或extra-extra-large。默认值为default。 运行
satellite-installer:# satellite-installer --tuning "My_Installation_Size"- 可选:运行健康检查。更多信息请参阅 第 5.1 节 “应用配置”。
- 可选:使用 Puma Tuning 部分直接调整 Ruby app 服务器。更多信息请参阅 第 5.2 节 “Puma Tunings”。
第 3 章 调优系统要求 复制链接链接已复制到粘贴板!
您可以在连接网络环境 中准备 安装卫星服务器 中的硬件和软件要求。
第 4 章 确定硬件和操作系统配置 复制链接链接已复制到粘贴板!
- CPU
- 可供卫星使用的物理内核越多,任务可以实现更高的吞吐量。Puppet 和 PostgreSQL 等部分卫星组件是 CPU 密集型应用,可以真正受益于较高的可用 CPU 内核数量。
- 内存
- 运行卫星的系统中可用的内存量更高,更好的是卫星操作的响应时间。由于卫星将 PostgreSQL 用作数据库解决方案,因此任何额外的内存结合都会提供因为内存中数据保留而增加的应用程序的响应时间。
- 磁盘
- 由于卫星在存储库同步而进行大量 IOPS,软件包数据检索,对内容主机的订阅记录进行高频率数据库更新,建议在高速度 SSD 中安装卫星,从而避免了因为磁盘读取或写入而造成性能瓶颈。卫星要求磁盘 IO 为每秒读取操作的平均吞吐量,每秒需要 2 个 IO 低 2 个或以上 60pm80MB。低于这个值会对 Satellite 操作有严重影响。与 HDD 相比,PostgreSQL 等 Satellite 组件因使用 SSD 而受益。
- Network
- 卫星服务器和胶囊之间的通信会受到网络性能的影响。需要具有最小 jitter 和低延迟的decent 网络,以启用卫星服务器和胶囊同步等空闲操作(至少确保它不会导致连接重置等)。
- 服务器电源管理
- 默认情况下,您的服务器可能配置为节省电源。虽然这是保持检查最大功率消耗的好方法,但它也有降低卫星能实现的性能的副作用。对于运行 Satellite 的服务器,建议设置 BIOS 以便使系统在性能模式下运行,以提高卫星可以实现的最大性能级别。
4.1. 基准测试磁盘性能 复制链接链接已复制到粘贴板!
我们正努力更新 satellite-maintain,仅在用户内部快速存储基准产生低于我们推荐的吞吐量时警告用户。
另外,在更新的基准脚本中,您可以运行(可能集成到 satellite-maintain )以获得更准确的实际存储信息。
-
您可能需要临时减少 RAM,才能运行 I/O 基准。例如,如果您的卫星服务器具有 256 GiB RAM,则测试需要 512 GiB 的存储运行。作为临时解决方案,您可以在系统引导过程中在 grub 中添加
mem=20G内核选项,以临时减少 RAM 的大小。该基准在指定目录中创建 RAM 大小两次,并对其执行一系列存储 I/O 测试。文件的大小可确保测试不仅测试文件系统缓存。如果您基准测试了其他文件系统(例如 PostgreSQL 存储等较小的卷),您可能需要减小 RAM 大小(如上述步骤)。 - 如果您使用不同的存储解决方案,如 SAN 或 iSCSI,您可以期望获得不同的性能。
- 红帽建议您在执行此脚本前停止所有服务,系统将提示您执行此操作。
此测试不使用直接 I/O,并像正常操作一样使用文件缓存。
您可以找到我们的脚本 存储 -bench 的第一个版本。要执行它,请只将脚本下载到 Satellite 中,使其可执行并运行:
# ./storage-benchmark /var/lib/pulp
如脚本中的 README 块中所述,通常要在测试中看到平均 100MB/sec 或更高版本:
- 基于本地 SSD 存储应当提供 600MB/sec 或更高版本的值。
- spinning 磁盘应提供 100准备时间-确保200MB/sec 或更高版本范围内的值。
如果您在下面看到值,请创建一个支持问题单以获取帮助。
如需更多信息,请参阅 磁盘对卫星操作的影响。
4.2. 启用调优配置集 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 8 在安装过程中默认启用 tuned 守护进程。在裸机上,红帽建议在卫星服务器和胶囊上运行 throughput-performance tuned 配置集。在虚拟机上,红帽建议运行 virtual-guest 配置集。
流程
检查
tuned是否在运行:# systemctl status tuned如果
tuned没有运行,请启用它:# systemctl enable --now tuned可选:查看可用
tuned配置集列表:# tuned-adm list根据您的场景启用
tuned配置集:# tuned-adm profile "My_Tuned_Profile"
4.3. 禁用 Transparent Hugepage 复制链接链接已复制到粘贴板!
透明 Hugepage 是一种由 Linux 内核使用的内存管理技术,可使用更大的大小来减少使用 Translation Lookaside Buffer (TLB)的开销。由于数据库具有 Sparse Memory Access 模式而不是 Contiguous Memory access 模式,数据库工作负载在启用 Transparent Hugepage 时通常性能不佳。要提高 PostgreSQL 和 Redis 性能,请禁用 Transparent Hugepage。在数据库在不同服务器上运行的部署中,只有 Satellite Server 上使用透明的 Hugepage 有一个小的好处。
有关如何禁用 Transparent Hugepage 的更多信息,请参阅 如何在 Red Hat Enterprise Linux 上禁用透明巨页(THP)。
第 5 章 为性能配置 Satellite 复制链接链接已复制到粘贴板!
卫星随附了多个组件,它们互相通信。您可以独立调整这些组件,以为您的场景实现最大可能的性能。
您会看到在 Red Hat Enterprise Linux 7 和 Red Hat Enterprise Linux 8 中安装 Satellite 之间的显著性能差异。
5.1. 应用配置 复制链接链接已复制到粘贴板!
在以下部分中,我们建议不同的可调项以及如何应用它们。请首先测试在非生产环境中更改这些更改,并提供有效的备份以及适当的中断窗口,如需要在大多数情况下重启 Satellite。
在应用任何更改前设置监控是很好的做法,因为您可以评估更改的影响。我们的测试环境可能远远超出了您看到的内容,虽然我们很难模拟现实环境。
更改 systemd 服务文件
如果您更改了一些 systemd 服务文件,您需要通知 systemd 守护进程重新载入配置:
# systemctl daemon-reload
重启 Satellite 服务:
# satellite-maintain service restart
更改配置文件
如果您更改了配置文件,如 /etc/foreman-installer/custom-hiera.yaml,则重新运行安装程序以应用您的更改:
# satellite-installer
使用附加选项运行安装程序
如果您需要重新运行安装程序,并添加了一些新选项:
# satellite-installer new options
检查设置的基本功能
可选: 在任何更改后,运行此快速 Satellite 健康检查:
# satellite-maintain health check
5.2. Puma Tunings 复制链接链接已复制到粘贴板!
Puma 是一个 ruby 应用服务器,用于为客户端提供 Foreman 相关请求。对于任何应当处理大量客户端或频繁操作的 Satellite 配置,务必要相应地调整 Puma。
5.2.1. Puma Threads 复制链接链接已复制到粘贴板!
Puma 线程数量(每个 Puma worker)使用两个值进行配置: threads_min 和 threads_max。
threads_min 值决定了每个 worker 启动时都会生成的线程数。然后,随着并发请求进入和需要更多线程,worker 将生成更多 worker,最多为 threads_max 限制。
我们建议将 thread_min 设置为与 less Puma 线程数量相同的 threads_max 值,从而导致卫星服务器上的内存用量较高。
例如,我们使用并发注册测试比较这两个设置:
| 带有 8 个 CPU 的 Satellite 虚拟机, 40 GiB RAM | 带有 8 个 CPU 的 Satellite 虚拟机, 40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
与 threads_min=0 相比,将最小 Puma 线程设置为 16 会导致内存用量少 12%。
5.2.2. Puma Workers 和 Threads Auto-Tuning 复制链接链接已复制到粘贴板!
如果没有为 satellite-installer 提供任何 Puma worker 和 thread 值,或者您的 Satellite 配置中不存在它们,则 satellite-installer 配置平衡的 worker。它遵循以下公式:
min(CPU_COUNT * 1.5, RAM_IN_GB - 1.5)
在大多数情况下,这应该很有效,但某些使用模式调整需要限制专用于 Puma 的资源数量(因此,其他 Satellite 组件可以使用这些)或任何其他原因。每个 Puma worker 都消耗大约 1 GiB RAM。
查看您当前的卫星服务器设置
# cat /etc/systemd/system/foreman.service.d/installer.conf
查看当前活跃的 Puma worker
# systemctl status foreman
5.2.3. 手动调整 Puma worker 和线程数 复制链接链接已复制到粘贴板!
如果您决定不依赖于 第 5.2.2 节 “Puma Workers 和 Threads Auto-Tuning”,您可以为这些可调项应用自定义号。在以下示例中,我们使用 2 个 worker、5 和 5 个线程:
# satellite-installer \
--foreman-foreman-service-puma-workers=2 \
--foreman-foreman-service-puma-threads-min=5 \
--foreman-foreman-service-puma-threads-max=5
将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.2.4. Puma Workers 和 Threads Recommendations 复制链接链接已复制到粘贴板!
要为不同的调优配置文件推荐线程和 worker 配置,我们使用不同的调优配置文件在 Satellite 上进行 Puma 调优测试。此测试中使用的主测试是并发注册,其组合包括不同的 worker 和线程数量。我们的建议仅基于并发注册性能,因此可能无法反映您的确切用例。例如,如果您的设置非常面向发布和提升内容,您可能想限制 Puma 消耗的资源,并取代 Pulp 和 PostgreSQL。
| Name | 受管主机数量 | RAM | 内核 | 推荐的 Puma Threads (min 和 max) | 推荐的 Puma Workers |
|---|---|---|---|---|---|
| default | 0 – 5000 | 20 GiB | 4 | 16 | 4 – 6 |
| 中 | 5000 – 10000 | 32 GiB | 8 | 16 | 8 – 12 |
| 大 | 10000 – 20000 | 64 GiB | 16 | 16 | 12 – 18 |
| extra-large | 20000 – 60000 | 128 GiB | 32 | 16 | 16 – 24 |
| extra-extra-large | 60000+ | 256 GiB+ | 48+ | 16 | 20 – 26 |
对工作程序进行调优是,在一些情况下,我们可以提高 52% 的性能。虽然安装程序默认使用 5 分钟/最大线程,但我们建议在上表中使用所有调优配置文件的 16 个线程。这是因为,与 4 个线程设置相比,与设置 4 个线程相比,我们看到的 16 个线程性能增加了 23%(14%,84% 的 10%)。
要查明这些建议,我们使用了并发注册测试案例,这是一个非常具体的用例。它在卫星上可能会有所不同,它可能具有更平衡的用例(不仅仅是注册)。另外,保留默认 5 分钟/最大线程是很好的选择。
以下是导致我们提出这些建议的一些测量信息:
| 4 个 worker、4 个线程 | 4 个 worker、8 个线程 | 4 个 worker、16 个线程 | 4 个 worker, 32 个线程 | |
|---|---|---|---|---|
| 改进 | 0% | 14% | 23% | 10% |
在默认设置(4 个 CPU)上使用 4 个关闭 worker - 与 2 个 worker 相比,与 2 个 worker 相比,与 5 个 worker 相比,与 8 个 worker 的性能更高,但 8% 的性能降低 8 个 worker - 参见下表:
| 2 个 worker、16 个线程 | 4 个 worker、16 个线程 | 6 个 worker、16 个线程 | 8 个 worker、16 个线程 | |
|---|---|---|---|---|
| 改进 | 0% | 26% | 22% | -8% |
在 Medium setup (8 CPU)中使用 8049-的 worker - 请参考下表:
| 2 个 worker、16 个线程 | 4 个 worker、16 个线程 | 8 个 worker、16 个线程 | 12 个 worker、16 个线程 | 16 个 worker、16 个线程 | |
|---|---|---|---|---|---|
| 改进 | 0% | 51% | 52% | 52% | 42% |
使用 32 个 CPU 设置上的 16 个关闭程序(这是在 90 GiB RAM 计算机上测试,且内存关闭为因系统开始交换)的一个因子,对于我们测试的超大的线程数量较高,所以我们测试的并发级别较高,因此不建议它。
| 4 个 worker、16 个线程 | 8 个 worker、16 个线程 | 16 个 worker、16 个线程 | 24 个 worker、16 个线程 | 32 个 worker、16 个线程 | 48 个 worker、16 个线程 | |
|---|---|---|---|---|---|---|
| 改进 | 0% | 37% | 44% | 52% | 太多故障 | 太多故障 |
5.2.5. 配置 Puma Workers 复制链接链接已复制到粘贴板!
如果有足够的 CPU,增加更多 worker 会增加性能。例如,我们已将 Satellite 设置与 8 和 16 个 CPU 进行比较:
| 带有 8 个 CPU 的 Satellite 虚拟机, 40 GiB RAM | 带有 16 个 CPU 的 Satellite VM, 40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
在 8 CPU 设置中,将 worker 数从 2 改为 16,可将并发注册时间提高 36%。在 16 个 CPU 设置中,同样的更改会导致 55% 的改进。
增加更多 worker 可以帮助处理总注册并发卫星。在我们的测量中,使用 2 个 worker 设置可以处理多达 480 个并发注册,但增加了更多的 worker。
手动调整
您可以将 worker 数量设置为 2,将线程数量设置为 5:
# satellite-installer \
--foreman-foreman-service-puma-threads-max=5
--foreman-foreman-service-puma-threads-min=5 \
--foreman-foreman-service-puma-workers=2 \
5.2.6. 配置 Puma Threads 复制链接链接已复制到粘贴板!
更多线程允许更短的时间并行注册主机。例如,我们比较了这两个设置:
| 带有 8 个 CPU 的 Satellite 虚拟机, 40 GiB RAM | 带有 8 个 CPU 的 Satellite 虚拟机, 40 GiB RAM |
|---|---|
|
|
|
|
|
|
|
|
|
在高度并发注册方案中,使用更多 worker 和相同线程总数可产生大约 11% 的速度。此外,添加更多工作程序不会消耗更多 CPU 和 RAM,但会获得更好的性能。
5.2.7. 配置 Puma DB Pool 复制链接链接已复制到粘贴板!
$db_pool 的有效值自动设置为等于 $foreman::foreman_service_puma_threads_max。它是 $foreman::db_pool 和 $foreman::foreman_service_puma_max 的最大值,但两者的默认值为 5,因此对最多 5 数量的增加都会自动增加数据库连接池。
如果您遇到 ActiveRecord::ConnectionTimeoutError: 在 5.000 秒内从池中获取连接(等待的 5.006 秒),则所有池连接都在 错误,您可能需要提高这个值。
/var/log/foreman/production.log 中使用
查看当前的 db_pool 设置
# grep pool /etc/foreman/database.yml
pool: 5
5.2.8. 手动调优 db_pool 复制链接链接已复制到粘贴板!
如果您决定不依赖于自动配置的值,您可以应用类似如下的自定义号:
# satellite-installer --foreman-db-pool 10
将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.3. Apache HTTPD 性能调优 复制链接链接已复制到粘贴板!
Apache httpd 形成卫星的核心部分,充当处理通过卫星 Web UI 或公开 API 发出请求的 Web 服务器。为增加操作的并发性,httpd 形成了第一个调优点,有助于提高 Satellite 的性能。
5.3.1. 配置 Apache httpd 可以启动多少个进程 复制链接链接已复制到粘贴板!
默认情况下,HTTPD 使用预派生请求处理机制。借助预派生处理请求的模型,httpd 会启动一个新的进程来处理客户端的传入连接。
当 Apache 的请求数超过可启动以处理传入连接的子进程的最大数量时,httpd 将引发 HTTP 503 服务 Unavailable Error。amidst httpd 从进程之外进行处理,传入的连接也会导致您的卫星一侧出现多个组件故障,因为 httpd 进程可用性上的 Pulp 等组件依赖 Pulp。
您可以根据预期的峰值负载调整 HTTPD prefork 的配置,以处理更多并发请求。
对可能要处理 150 个并发内容主机注册的服务器修改示例(请参阅如何使用 custom-hiera.yaml 文件);这会修改配置文件 /etc/httpd/conf.modules.d/prefork.conf:
您可以修改 /etc/foreman-installer/custom-hiera.yaml :
apache::mod::prefork::serverlimit: 582
apache::mod::prefork::maxclients: 582
apache::mod::prefork::startservers: 10
将 ServerLimit 参数设置为 raise MaxClients 值。
如需更多信息,请参阅 httpd 文档中的 ServerLimit Directive。
设置 MaxClients 参数,以限制 httpd 可以启动以处理传入请求的子进程的最大数量。
如需更多信息,请参阅 httpd 文档中的 MaxRequestWorkers Directive。
5.3.2. 为 Apache HTTPD 配置 Open Files 限制 复制链接链接已复制到粘贴板!
通过调整后,Apache httpd 可以在服务器上轻松打开很多文件描述符,这可能会超过大多数 Linux 系统的默认限制。为了避免因为在系统中超过最大打开文件限制而出现的任何问题,请创建以下文件和目录并设置下例中指定的文件内容:
流程
在
/etc/systemd/system/httpd.service.d/limits.conf中设置最大打开文件限制:[Service] LimitNOFILE=640000- 将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.3.3. 调优 Apache Ice Child 过程 复制链接链接已复制到粘贴板!
默认情况下,httpd 使用事件请求处理机制。当 httpd 的请求数超过可以启动来处理进入连接的最大子进程数时,httpd 会引发 HTTP 503 Service Unavailable 错误。amidst httpd 无法处理进程,进入的连接也可以导致 Satellite 服务的多个组件失败,因为 httpd 进程的可用性某些组件。
您可以调整 httpd 事件的配置,以根据您的预期的峰值负载处理更多并发请求。
在 custom-hiera.yaml 中配置这些数字会锁定它们。如果您使用 satellite-installer --tuning=My_Tuning_Option 更改这些数字,您的 custom-hiera.yaml 将覆盖此设置。只有在您有特殊需要时才设置您的数字。
流程
通过更改或添加以下行来修改 '/etc/foreman-installer/custom-hiera.yaml' 中的并发请求数:
apache::mod::event::serverlimit: 64 apache::mod::event::maxrequestworkers: 1024 apache::mod::event::maxrequestsperchild: 4000示例与在 Satellite 服务器中运行
satellite-installer --tuning=medium或更高版本相同。- 将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.4. qdrouterd 和 qpid Tuning 复制链接链接已复制到粘贴板!
5.4.1. 计算 qdrouterd 的最大打开文件限制 复制链接链接已复制到粘贴板!
在使用带有大量内容主机的 katello-agent 基础架构的部署中,可能需要增加 qdrouterd 的最大打开文件。
计算 qdrouterd 中打开文件的限值 :(N x 3)+ 100,其中 N 是内容主机数。每个内容主机可能最多消耗路由器和 100 文件描述符来运行路由器本身。
以下设置允许卫星扩展至 10.000 内容主机。
流程
在
/etc/foreman-installer/custom-hiera.yaml中设置最大打开文件限制:qpid::router::open_file_limit: "My_Value"默认值为
150100。- 将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.4.2. 计算 qpidd 的最大打开文件限制 复制链接链接已复制到粘贴板!
在使用带有大量内容主机的 katello-agent 基础架构的部署中,可能需要增加 qpidd 的最大打开文件。
计算 qpidd 中打开文件的限制 :(N x 4)+ 500,其中 N 是内容主机数。对于 Broker 操作(qpidd)操作需要单个内容主机最多消耗四个文件描述符和 500 个文件描述符。
流程
在
/etc/foreman-installer/custom-hiera.yaml中设置最大打开文件限制:qpid::open_file_limit: "My_Value"默认值为
65536。- 将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
5.4.3. 配置最大同步输入输出请求 复制链接链接已复制到粘贴板!
在使用带有大量内容主机的 katello-agent 基础架构的部署中,可能需要增加允许的最大并发 AIO 请求。您可以通过增加内核参数 fs.aio-max-nr 来增加允许的并发 AIO 请求的最大数量。
流程
将
fs.aio-max-nr的值设置为/etc/sysctl.d中的文件所需的最大值:fs.aio-max-nr=My_Maximum_Concurrent_AIO_Requests确保这个数量大于 33 倍,这是您计划注册到 Satellite 的最大内容主机数。
应用更改:
# sysctl -p- 可选:重启 Satellite 服务器以确保应用此更改。
5.4.4. 存储注意事项 复制链接链接已复制到粘贴板!
在规划安装(用于广泛使用 katello-agent )时,请确保提前为 /var/lib/qpidd 提供足够的存储空间。在卫星服务器上,/var/lib/qpidd 需要每个内容主机需要 2MiB 磁盘空间。
5.4.5. 配置 QPID mgmt-pub-interval Parameter 复制链接链接已复制到粘贴板!
您可以在 Red Hat Enterprise Linux 7 中看到日志(使用 journalctl 命令访问它)的以下错误:
satellite.example.com qpidd[92464]: [Broker] error Channel exception: not-attached: Channel 2 is not attached(/builddir/build/BUILD/qpid-cpp-0.30/src/qpid/amqp_0_10/SessionHandler.cpp: 39
satellite.example.com qpidd[92464]: [Protocol] error Connectionqpid.10.1.10.1:5671-10.1.10.1:53790 timed out: closing
此时会出现此错误消息,因为 qpid 维护队列、会话和连接默认为每十秒的管理对象。具有相同 ID 的同一对象创建、删除并再次创建。旧管理对象还没有清除,这就是为什么 qpid 抛出此错误的原因。
流程
在
/etc/foreman-installer/custom-hiera.yaml中设置mgmt-pub-interval参数:qpid::mgmt_pub_interval: 5将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
如需更多信息,请参阅 BZ 1335694。
5.5. Dynflow Tuning 复制链接链接已复制到粘贴板!
Dynflow 是工作流管理系统和任务编排器,它是卫星插件,用于以顺序执行方式执行卫星的不同任务。当很多客户端在卫星中检查并运行多个任务时,Dynflow 会从添加的调优中取一些帮助,指定启动多少 executors。
有关与 Dynflow 相关的调整的更多信息,请参阅 https://satellite.example.com/foreman_tasks/sidekiq。
增加 Sidekiq 工作程序的数量
Satellite 包含一个名为 dynflow-sidekiq 的 Dynflow 服务,它执行由 Dynflow 调度的任务。Sidekiq 工作程序可以分组到不同的队列中,以确保某一类型的大量任务不会阻止其他类型的任务。
红帽建议增加 sidekiq worker 的数量,以扩展 Foreman 任务以实现批量并发任务,如多个内容视图发布和促销、内容同步和与胶囊服务器同步等。有两个可用选项:
- 您可以增加 worker 使用的线程数量(worker 的并发)。由于 Ruby 实现线程并发实现,这对超过五个的值的影响有限。
- 您可以增加推荐的 worker 数量。
流程
将 worker 数量从一个 worker 增加到三,同时剩余五个线程/并发:
# satellite-installer --foreman-dynflow-worker-instances 3 # optionally, add --foreman-dynflow-worker-concurrency 5可选:检查是否有三个 worker 服务:
# systemctl -a | grep dynflow-sidekiq@worker-[0-9] dynflow-sidekiq@worker-1.service loaded active running Foreman jobs daemon - worker-1 on sidekiq dynflow-sidekiq@worker-2.service loaded active running Foreman jobs daemon - worker-2 on sidekiq dynflow-sidekiq@worker-3.service loaded active running Foreman jobs daemon - worker-3 on sidekiq
5.6. 基于拉取的 REX 传输调整 复制链接链接已复制到粘贴板!
Satellite 具有基于拉取的传输模式用于远程执行。此传输模式使用 MQTT 作为其消息传递协议,并包括在每个主机上运行的 MQTT 客户端。如需更多信息,请参阅管理 主机 中的 远程执行的 传输模式 。
5.6.1. 为基于 Pull REX 传输增加主机限制 复制链接链接已复制到粘贴板!
您可以调整 mosquitto MQTT 服务器,并增加与之连接的主机数量。
流程
在 Satellite Server 或 Capsule Server 上启用基于拉取的远程执行:
# satellite-installer --foreman-proxy-plugin-remote-execution-script-mode pull-mqtt请注意,您的 Satellite 服务器或胶囊式服务器只能使用一个传输模式,可以是 SSH 或 MQTT。
创建配置文件以增加 MQTT 服务接受的默认主机数:
cat >/etc/systemd/system/mosquitto.service.d/limits.conf <<EOF [Service] LimitNOFILE=5000 EOF本例设置了限制,以允许
mosquitto服务处理 5000 主机。运行以下命令以应用您的更改:
# systemctl daemon-reload # systemctl restart mosquitto.service
5.6.2. 降低基于 Pull REX 传输的性能影响 复制链接链接已复制到粘贴板!
当使用 Script provider 为远程执行作业配置 Satellite 服务器时,胶囊服务器通过 MQTT 向客户端发送有关新作业的通知。此通知不包括客户端应该执行的实际工作负载。客户端收到有关新远程执行作业的通知后,它会查询胶囊服务器以获取其实际工作负载。在作业期间,客户端定期将作业输出发送到胶囊服务器,进一步增加对胶囊服务器的请求数量。
这些对胶囊服务器的请求与 MQTT 协议允许的高并发性一起可能会导致胶囊服务器上的可用连接耗尽。有些请求可能会失败,使远程执行作业的一些子任务无响应。这还取决于实际的作业工作负载,因为一些作业会给 Satellite 服务器造成额外的负载,从而在客户端注册到 Satellite 服务器时使其争用资源。
要避免这种情况,请使用以下参数配置 Satellite 服务器和 Capsule 服务器:
- MQTT Time To Live - 在考虑作业未发送前,给主机获取该作业的时间间隔(以秒为单位)
- MQTT Resend Interval - 应重新指向主机通知的时间间隔(以秒为单位),直到作业被获取或取消。
- MQTT Rate Limit - 允许同时运行的作业数量。您可以通过调整速率限制来限制远程执行的并发性,这意味着您要给 Satellite 带来更多负载。
流程
- 在 Satellite 服务器上调整 MQTT 参数:
# satellite-installer \
--foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit My_MQTT_Rate_Limit \
--foreman-proxy-plugin-remote-execution-script-mqtt-resend-interval My_MQTT_Resend_Interval \
--foreman-proxy-plugin-remote-execution-script-mqtt-ttl My_MQTT_Time_To_Live
Capsule 服务器日志位于 /var/log/foreman-proxy/proxy.log 中。胶囊服务器使用 Webrick HTTP 服务器(不包括 httpd 或 Puma),因此无法简单地提高其容量。
根据工作负载,主机数量、可用资源和应用调整,您可能会达到 Bug 2244811,这会导致 Capsule 消耗太多内存并最终被终止,从而使其余作业失败。目前,没有通用的临时解决方案。
5.7. PostgreSQL Tuning 复制链接链接已复制到粘贴板!
PostgreSQL 是一种基于 SQL 的主数据库,供卫星用于在卫星执行的各种任务之间存储持久上下文。数据库会看到大量使用量通常正在致力于为卫星提供所需的数据,以实现其顺利运行。这使得 PostgreSQL 大量使用的流程,如果 tuned 在 Satellite 的整体操作响应中可获得很多好处。
PostgreSQL 作者建议在运行 PostgreSQL 的服务器上禁用 Transparent Hugepage。更多信息请参阅 第 4.3 节 “禁用 Transparent Hugepage”。
您可以将一组调优应用到 PostgreSQL,以改进其响应时间,这将修改 postgresql.conf 文件。
流程
附加
/etc/foreman-installer/custom-hiera.yaml以调整 PostgreSQL:postgresql::server::config_entries: max_connections: 1000 shared_buffers: 2GB work_mem: 8MB autovacuum_vacuum_cost_limit: 2000您可以使用它来有效地微调卫星实例,无论调节配置文件是什么。
- 将您的更改应用到卫星服务器。更多信息请参阅 第 5.1 节 “应用配置”。
在上面的调优配置中,我们更改了一组特定的键:
-
max_connections: 键定义运行 PostgreSQL 进程可接受的最大连接数。 -
shared_buffers:共享缓冲区定义供 PostgreSQL 中所有活动连接使用的内存,以存储不同数据库操作的数据。这个值的最佳值会因 Satellite 对操作的频率而不同,每个系统内存总量的 2 GiB 最多为 25%。 -
work_mem: work_mem 是每个进程为 PostgreSQL 分配的内存,用于存储由进程执行的操作的中间结果。将此值设置为 8 MB,对于 Satellite 上的大多数密集型操作来说,该数值应该足够多。 -
autovacuum_vacuum_cost_limit:键定义自动清空过程中清空操作的成本限制值,从而清理数据库关系中的死信。成本限制定义了可在单个运行过程中由流程处理的元数。红帽建议根据 Satellite 在 PostgreSQL 服务器进程 中 推送的一般负载将值设置为2000,因为它适用于中、大、超大、和 extra-extra-large 配置集。
如需更多信息,请参阅 BZ1867311: Upgrade failed when checkpoint_segments postgres 参数配置。
5.7.1. 基准测试原始 DB 性能 复制链接链接已复制到粘贴板!
要获得在 Candlepin、Foreman 和 Pulp check postgres-size-report 脚本( satellite-support git 存储库中)的磁盘空间中顶级表大小的列表。
pgbench 工具(注意,您可能需要将 PostgreSQL 数据目录 /var/lib/pgsql 目录调整为 100 GiB,或需要运行基准)来测量系统上的 PostgreSQL 性能。使用 dnf install postgresql-contrib 安装它。如需更多信息,请参阅 github.com/RedHatSatellite/satellite-support。
PostgreSQL 数据目录选择文件系统可能也很重要。
- 不会在生产环境中进行任何测试,且无需有效的备份。
- 在开始测试前,请查看数据库文件有多大。使用真正小数据库进行测试不会产生任何有意义的结果。例如,如果 DB 仅为 20 GiB,并且缓冲区池为 32 GiB,则连接数量不会显示大量连接的问题,因为数据将被完全缓冲。
5.8. Redis Tuning 复制链接链接已复制到粘贴板!
Redis 是一个内存中数据存储。它供卫星中的多个服务使用。Dynflow 和 Pulp 任务使用它来跟踪其任务。鉴于卫星使用 Redis 的方式,其内存消耗应该是稳定的。
Redis 作者建议在运行 Redis 的服务器上禁用 Transparent Hugepage。有关详情请参考 第 4.3 节 “禁用 Transparent Hugepage”。
5.9. 胶囊配置调优 复制链接链接已复制到粘贴板!
胶囊旨在卸载卫星负载的一部分,并提供对将内容分发到客户端的不同网络的访问,但也可用于执行远程执行作业。他们无法帮助其广泛使用 Satellite API 作为主机注册或软件包配置文件更新。
5.9.1. 胶囊性能测试 复制链接链接已复制到粘贴板!
我们已在多个胶囊配置中计算多个测试情况:
| Capsule HW 配置 | CPU | RAM |
|---|---|---|
| minimal | 4 | 12 GiB |
| 大 | 8 | 24 GiB |
| 额外的大 | 16 | 46 GiB |
内容交付用例
在下载测试中,我们同时下载了 2000 个软件包(100、200、)上的 40MB 存储库。1000 个主机,我们在每次翻倍的胶囊服务器资源时,平均下载时间约为 50%。有关更精确的数字,请查看下表。
| 并发下载主机 | 最小(4 个 CPU 和 12 GiB RAM) → Large (8 个 CPU 和 24 GiB RAM) | large (8 CPU 和 24 GiB RAM) → Extra Large (16 CPU 和 46 GiB RAM) | 最小(4 个 CPU 和 12 GiB RAM) → Extra Large (16 CPU 和 46 GiB RAM) |
|---|---|---|---|
| 平均提高 | 大约 50%(例如,平均 9 秒与.每个软件包的 4.4 秒(每个软件包) | 大约 40%(例如,平均 4.4 秒与.每个软件包 2.5 秒) | 大约 70%(例如,平均 9 秒与.每个软件包 2.5 秒) |
当从卫星服务器与胶囊服务器下载性能与从胶囊服务器下载性能时,我们只看到大约 5% 的速度,但随着胶囊服务器的主要好处,将更接近地将内容更接近地分布客户(或不同网络客户端)以及处理负载卫星服务器的一部分。在一些较小的硬件配置(8 个 CPU 和 24 GiB)中,卫星服务器无法从 500 个并发客户端处理下载,而具有相同硬件配置的胶囊服务器也可以超过 1000,甚至可能会更多。
并发注册用例
对于并发注册,瓶颈通常是 CPU 速度,但所有配置都能够在不交换的情况下处理高并发性。用于胶囊的硬件资源仅对注册性能的影响最少。例如,与具有 4 个 CPU 和 12 GiB RAM 的胶囊服务器相比,16 个 CPU 和 46 GiB RAM 的胶囊服务器最多可提高 9% 的注册速度。在非常高并发的期间,您可能会在胶囊服务器到 Satellite 服务器通信中遇到超时。您可以使用 /etc/foreman-installer/custom-hiera.yaml 中的以下可调整来增加默认超时:
apache::mod::proxy::proxy_timeout: 600
远程执行用例
我们已通过 SSH 和 Ansible 后端在 500、2000 和 4000 主机上执行的远程执行作业。除最小配置(4 个 CPU 和 12 GiB 内存)外,所有配置都能够处理所有 4000 主机上的所有测试。
内容同步用例
在同步测试中,我们同步了 Red Hat Enterprise Linux 6、7、8 BaseOS 和 8 AppStream,在胶囊配置之间没有看到显著差异。这与同步更多内容视图并并行进行不同。