身份管理性能调优


Red Hat Enterprise Linux 10

优化 IdM 服务,如目录服务器、KDC 和 SSSD,以提高性能

Red Hat Customer Content Services

摘要

红帽调整身份管理(IdM),以便在大多数部署中表现良好。然而,在特定场景中,调优 IdM 组件(如复制协议、目录服务器、Kerberos 密钥分发中心(KDC)或系统安全服务守护进程(SSSD))非常有用。

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 在顶部导航栏中点 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您对改进的建议。包括文档相关部分的链接。
  5. 点对话框底部的 Create

第 1 章 调优 IdM 时的重要注意事项

对身份管理组件服务进行微调,以适用于大多数部署的最佳方式。作为系统管理员,您可能想要调整 IdM 服务的性能,以适应特定环境的需求。

重要注意事项

  • 每个 IdM 部署可能有不同的硬件、软件、联网、数据、工作负载和其他因素,因此每个部署都可能有其唯一性。适合一个环境的调整可能并不适合于另一个环境。
  • 性能升级是一个迭代的实验过程。一次只调整一个变量,并监控其对您的环境的影响。在通过一个变量达到预期的结果后,调整下一个变量,同时继续监控之前调整的性能。

第 2 章 硬件建议

对于性能调整,RAM 是最重要的硬件。请确定您的系统有足够可用 RAM。典型的 RAM 要求是:

  • 对于 10,000 个用户和 100 个组:至少 4 GB RAM 和 4 GB 交换(swap)空间
  • 对于 100,000 个用户和 50,000 个组:至少 16 GB RAM 和 4 GB swap 空间

对于较大的部署,增加 RAM 比增加磁盘空间效率更高,因为大部分数据都存储在缓存中。通常,对于大型部署,添加更多 RAM 会因为有更多的缓存使系统具有更好的性能。在虚拟环境中,必须禁用内存膨胀,或者必须为客户机 IdM 服务器保留完整的 RAM。

注意

基本用户条目或带有证书的简单主机条目大约是 5-​10 kB 大小。

第 3 章 IdM 服务器性能建议

为确保稳定的性能,身份管理(IdM)对可同时添加或注册到 IdM 服务器的用户和客户端的最大数量强制实施限制。

Expand
表 3.1. IdM 操作的限制
操作描述Number

客户端注册

在注册开始失败前,您可以同时注册到 IdM 服务器的最大 IdM 客户端数。

130

添加用户

在无法添加用户前,您可以使用来自不同 IdM 客户端的 ipa user-add 命令同时添加的最大用户数。

您可以使用 IdM API batch 命令同时添加更多用户。我们建议以 100 个用户为一批添加用户。

325

客户端身份验证

身份验证开始失败前可以同时验证的 IdM 客户端的最大数。

800

将成员添加到用户组

推荐的您可以在组中添加的成员数,而不超过向组添加新成员的时间。IdM 有一个两秒规则,来作为将成员添加到组中的正常时间段。您可以添加更多成员,但操作的时间将逐渐延长。

1500

身份管理(IdM)为 IdM 客户端提供了内置的故障转移机制,为 IdM 服务器提供了负载平衡和高可用性功能。

4.1. 客户端故障转移功能

默认情况下,IdM 客户端中的 SSSD 服务被配置为使用 DNS 服务(SRV)资源记录,以便客户端可以自动决定要连接的最佳 IdM 服务器。

4.1.1. 主和备份服务器配置

服务器解析行为由 /etc/sssd/sssd.conf 文件的 ipa_server 参数中的 _srv_ 选项控制:

/etc/sssd/sssd.conf 示例

[domain/<idm_domain_name>]
id_provider = ipa
ipa_server = _srv_, <primary_idm_server1>, <primary_idm_server2>
ipa_backup_server = <backup_idm_server1>, <backup_idm_server2>
...
Copy to Clipboard Toggle word wrap

指定 _srv_ 选项后,SSSD 检索按首选顺序排序的 IdM 服务器的列表。如果主服务器离线,IdM 客户端上的 SSSD 服务会自动连接到另一个可用的 IdM 服务器。

主服务器在 ipa_server 参数中指定。SSSD 尝试首先连接到主服务器,只有在没有主服务器可用时才切换到备份服务器。

备份服务器不支持 _srv_ 选项。

注意

SSSD 从 DNS 服务器查询 SRV 记录。默认情况下,在尝试查询另一个 DNS 服务器前,SSSD 会等待 6 秒,以得到 DNS 解析器的回复。如果所有 DNS 服务器都不可访问,域将继续在离线模式下运行。您可以使用 dns_resolver_timeout 选项增加客户端等待 DNS 解析器回复的时间。

如果您希望因为性能原因绕过 DNS 查找,请从 ipa_server 参数中删除 _srv_ 条目,并指定客户端应该连接的 IdM 服务器,按首选顺序排列:

/etc/sssd/sssd.conf 示例

[domain/<idm_domain_name>]
id_provider = ipa
ipa_server = <primary_idm_server1>, <primary_idm_server2>
ipa_backup_server = <backup_idm_server1>, <backup_idm_server2>
...
Copy to Clipboard Toggle word wrap

4.2. IdM 服务器和服务的故障转移行为

SSSD 故障转移机制独立对待 IdM 服务器及其服务。如果服务器的主机名解析成功,SSSD 视机器为在线,并尝试连接到该机器上需要的服务。如果与服务的连接失败,SSSD 会只将该特定服务视为离线,而不是整个机器或其上的其他服务。

如果主机名解析失败,SSSD 会将整个机器视为离线,且不会尝试连接到该机器上的任何服务。

当所有主服务器都不可用时,SSSD 会尝试连接到配置的备份服务器。当连接到备份服务器时,SSSD 会定期尝试重新连接到其中一个主服务器,并在主服务器可用时立即连接。这些尝试之间的间隔由 failover_primary_timeout 选项控制,其默认为 31 秒。

如果所有 IdM 服务器都无法访问,SSSD 会切换到离线模式。在此状态中,SSSD 每 30 秒重试一次连接,直到服务器可用为止。

4.2.1. 服务器端负载平衡和服务可用性

您可以通过安装多个 IdM 副本在 IdM 中实现负载平衡和高可用性:

  • 如果您的网络分布在不同的地理位置,可以通过为每个数据中心配置多个 IdM 副本来缩短 IdM 客户端和最快的服务器间的路径。
  • 红帽支持最多有 60 个副本的环境。
  • IdM 复制机制提供主动/主动服务可用性:所有 IdM 副本的服务都同时可用。
注意

红帽建议不要将 IdM 和其他负载均衡或高可用性(HA)软件结合使用。

许多第三方高可用性解决方案假定使用主动/被动模式,并可能导致 IdM 服务出现不必要的中断。其他解决方案使用虚拟 IP 或每个集群服务使用一个主机名。所有这些方法通常不适用于 IdM 所提供的服务。另外,它们与 Kerberos 的集成效果也不好,从而降低了部署的整体安全性和稳定性。

第 5 章 优化副本拓扑

一个良好的副本拓扑可以对工作负载进行分散,并减少复制延迟。按照以下步骤优化副本拓扑布局:

5.1. 决定拓扑中合适数量的 IdM 副本的指南

规划 IdM 拓扑,以使匹配机构的要求,并确保最佳性能和服务可用性。

在每个数据中心中设置至少两个副本
在每个数据中心中至少部署两个副本,以确保一个服务器出现故障,副本可以接管并处理请求。
为您的客户端设置足够数量的服务器
一个 IdM 服务器可为 2000 - 3000 个客户端提供服务。这假设客户端每天会多次查询服务器,但不会每分钟都查询一次。如果您期望频繁查询,请计划更多服务器。
设置足够数量的证书颁发机构(CA)副本
只有安装了 CA 角色的副本才能复制证书数据。如果使用 IdM CA,请确保您的环境至少有两个带有证书复制协议的 CA 副本。
在单个 IdM 域中设置最多 60 个副本
红帽支持最多有 60 个副本的环境。

5.2. 从 IdM 服务器卸载 IdM CA 服务

如果您的拓扑中有超过四个身份管理(IdM)副本,并且由于冗余证书复制而遇到性能问题,请从 IdM 副本中删除冗余 CA 服务实例。要做到这一点,您必须首先完全停用受影响的 IdM 副本,然后在其上重新安装没有 CA 服务的 IdM 。

注意

虽然您可以将 CA 角色 添加 到 IdM 副本中,但 IdM 没有提供一种从 IdM 副本中只 删除 CA 角色的方法:ipa-ca-install 命令没有 --uninstall 选项。

先决条件

  • 您已在拓扑中超过四个 IdM 服务器上安装了 IdM CA 服务。

流程

  1. 识别冗余 CA 服务,并按照在托管此服务的 IdM 副本上 卸载 IdM 服务器 中的流程操作。
  2. 在同一台主机上,请按照 安装 IdM 服务器:带有集成 DNS,没有 CA 中的流程操作。

第 6 章 调整搜索大小和时间限制

有些查询(比如请求 IdM 用户列表)可能会返回大量条目。通过调优这些搜索操作,您可以在运行 ipa *-find 命令时提高服务器的总体性能,例如 ipa user-find,并在 Web UI 中显示相应的列表。

搜索大小限制

定义从客户端 CLI 发送发送到服务器的请求或从访问 IdM Web UI 的浏览器返回的最大条目数。

默认: 100 条目。

搜索时间限制

定义服务器等待搜索运行的最长时间(以秒为单位)。搜索达到这个限制后,服务器将停止搜索并返回该时间里发现的条目。

默认: 2 秒。

如果您将值设为 -1,IdM 在搜索时不会应用任何限制。

重要

如果设置的搜索大小或时间限制太大,则可能会对服务器性能造成负面影响。

6.1. 在命令行中调整搜索大小和时间限制

您可以在全局范围内或为特定条目调整搜索大小和时间限制,以优化搜索性能和响应速度。

流程

  1. 要在 CLI 中显示当前搜索时间和大小限制,请使用 ipa config-show 命令:

    $ ipa config-show
    
    Search time limit: 2
    Search size limit: 100
    Copy to Clipboard Toggle word wrap
  2. 要在全局范围内调整对所有查询的限制,运行 ipa config-mod 命令并使用 --searchrecordslimit--searchtimelimit 选项。例如:

    $ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
    Copy to Clipboard Toggle word wrap
  3. 要为一个特定查询临时调整限制,请在命令中添加 --sizelimit--timelimit 选项。例如:

    $ ipa user-find --sizelimit=200 --timelimit=120
    Copy to Clipboard Toggle word wrap

6.2. 在 Web UI 中调整搜索大小和时间限制

您可以使用 IdM Web UI 调整全局搜索大小和时间限制,以优化搜索性能和响应速度。

流程

  1. 登录到 IdM Web UI。
  2. IPA Server
  3. IPA Server 选项卡中点 Configuration
  4. 搜索选项区域中设置所需的值。

    默认值为:

    • 搜索大小限制: 100 个条目
    • 搜索时间限值: 2 秒
  5. 点页面顶部的 Save

第 7 章 调整 IdM 目录服务器性能

您可以通过调整 LDAP 属性来控制目录服务器的资源和行为来调整身份管理数据库的性能。

您可以微调以下内容:

  • 调整目录服务器 缓存数据 的方式。
  • 调整目录服务器 的资源限值
  • 调整对性能有最大影响的 超时
  • 使用 LDIF 文件中的自定义目录服务器设置安装 IdM 服务器或副本。

7.1. 调整 IdM 目录服务器中的条目缓存大小

重要

不要更改此设置,除非您有强烈需要应用自定义值。IdM 目录服务器使用内置缓存自动大小功能来优化性能。

nsslapd-cachememsize 属性指定条目缓存的可用内存空间大小(以字节为单位)。此属性是控制目录服务器使用的物理 RAM 最重要的值之一。

如果条目缓存大小太小,您可能在 Directory Server 错误日志中看到以下错误: /var/log/dirsrv/slapd- <instance_name>/errors 日志文件:

REASON: entry too large (83886080 bytes) for the import buffer size (67108864 bytes).  Try increasing nsslapd-cachememsize.
Copy to Clipboard Toggle word wrap

红帽建议在内存中适合条目缓存和数据库索引条目缓存。

Expand
表 7.1. nsslapd-cachememsize attribute values

默认值

209715200 (200 MiB)

有效范围

500000 - 18446744073709551615 (500 kB - (264-1))

条目 DN 位置

cn=<database_name>,cn=ldbm database,cn=plugins,cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 禁用自动缓存调整。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend config set --cache-autosize=0
    Copy to Clipboard Toggle word wrap
  2. 显示数据库后缀及其对应的后端。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend suffix list
    cn=changelog (changelog)
    dc=example,dc=com (userroot)
    o=ipaca (ipaca)
    Copy to Clipboard Toggle word wrap

    这个命令显示每个后缀旁的后端数据库名称。在下一步中使用后缀的数据库名称。

  3. 为数据库设置条目缓存大小。这个示例将 userroot 数据库的条目缓存设置为 2GB。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend suffix set --cache-memsize=2147483648 userroot
    Copy to Clipboard Toggle word wrap
  4. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
    Copy to Clipboard Toggle word wrap
  5. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 cache-memsize 调整为不同的值,或者重新启用缓存自动大小。

验证

  • 显示 nsslapd-cachememsize 属性的值,并将其设置为您所需的值。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=userroot,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-cachememsize
    nsslapd-cachememsize: 2147483648
    Copy to Clipboard Toggle word wrap
重要

不要更改此设置,除非您有强烈需要应用自定义值。IdM 目录服务器使用内置缓存自动大小功能来优化性能。

nsslapd-dbcachesize 属性控制数据库索引使用的内存量。这个缓存大小对 Directory 服务器性能的影响比条目缓存大小的影响要小,但如果设置条目缓存大小后有可用的 RAM,红帽建议增加分配给数据库缓存的内存量。

数据库缓存限制为 1.5 GB RAM,因为更高的值并不会提高性能。

Expand
表 7.2. nsslapd-dbcachesize 属性值

默认值

10000000 (10 MB)

有效范围

500000 - 1610611911 (500 kB - 1.5GB)

条目 DN 位置

cn=config,cn=ldbm database,cn=plugins,cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 禁用自动缓存调整,并设置数据库缓存大小。这个示例将数据库缓存设置为 256MB。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend config set --cache-autosize=0 --dbcachesize=268435456
    Copy to Clipboard Toggle word wrap
  2. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
    Copy to Clipboard Toggle word wrap
  3. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 dbcachesize 调整为不同的值,或者重新启用缓存自动大小。

验证

  • 显示 nsslapd-dbcachesize 属性的值,并将其设置为您所需的值。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-dbcachesize
    nsslapd-dbcachesize: 2147483648
    Copy to Clipboard Toggle word wrap
重要

对优化的性能使用内置缓存自动调整大小功能。不要手动设置缓存大小。

默认情况下,IdM Directory 服务器会自动决定数据库缓存和条目缓存的最佳大小。自动的设置会忽略一部分可用 RAM,并在实例启动时根据服务器的硬件资源优化这两个缓存的大小。

使用这个流程取消自定义数据库缓存和条目缓存值,并将缓存自动大小功能恢复到默认值。

Expand
表 7.3. nsslapd-cache-autosize 属性值

nsslapd-cache-autosize

这个设置控制为自动分配数据库和条目缓存而分配的可用 RAM 量。0 代表禁用自动大小。

默认值

10 (10% 的可用 RAM)

有效范围

0 - 100

条目 DN 位置

cn=config,cn=ldbm database,cn=plugins,cn=config

Expand
表 7.4. nsslapd-cache-autosize-split 属性值

nsslapd-cache-autosize-split

这个值设定由 nsslapd-cache-autosize 决定用于数据库缓存的可用内存百分比。剩余百分比用于条目缓存。

默认值

25 (25% 用于数据库缓存,60% 用于条目缓存 )

有效范围

0 - 100

条目 DN 位置

cn=config,cn=ldbm database,cn=plugins,cn=config

先决条件

  • 之前您已经禁用了数据库和条目缓存自动扩展。

流程

  1. 停止 Directory 服务器实例。

    [root@server ~]# systemctl stop dirsrv.target
    Copy to Clipboard Toggle word wrap
  2. 在进行任何进一步修改前,备份 /etc/dirsrv/slapd-<instance_name> /dse.ldif 文件。

    [root@server ~]# cp /etc/dirsrv/slapd-<instance_name>/dse.ldif \ /etc/dirsrv/slapd-<instance_name>/dse.ldif.bak.$(date "+%F_%H-%M-%S")
    Copy to Clipboard Toggle word wrap
  3. 编辑 /etc/dirsrv/slapd-<instance_name&gt; /dse.ldif 文件:

    1. 设置用于数据库的可用系统 RAM 百分比,恢复默认的 10% 可用 RAM。

      nsslapd-cache-autosize: 10
      Copy to Clipboard Toggle word wrap
    2. 将可用系统 RAM 中数据库缓存使用的百分比设置为默认的 25%:

      nsslapd-cache-autosize-split: 25
      Copy to Clipboard Toggle word wrap
  4. 将更改保存到 /etc/dirsrv/slapd-<instance_name>/dse.ldif 文件。
  5. 启动 Directory 服务器。

    [root@server ~]# systemctl start dirsrv.target
    Copy to Clipboard Toggle word wrap

验证

  • 显示 nsslapd-cache-autosizensslapd-cache-autosize-split 属性的值,并验证它们已设置为您所需的值。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-cache-autosize nsslapd-cache-autosize: *10
    nsslapd-cache-autosize-split: 25
    Copy to Clipboard Toggle word wrap

7.4. 调整 IdM 目录服务器中的 DN 缓存大小

重要

不要更改此设置,除非您有强烈需要应用自定义值。IdM 目录服务器使用内置缓存自动大小功能来优化性能。

nsslapd-dncachememsize 属性指定可辨识名称(DN)缓存的可用内存空间大小(以字节为单位)。DN 缓存与数据库的条目缓存类似,但其表只存储条目 ID 和条目 DN,这样可加快查找 renamemoddn 操作。

Expand
表 7.5. nsslapd-dncachememsize 属性值

默认值

10485760 (10 MB)

有效范围

500000 - 18446744073709551615 (500 kB - (264-1))

条目 DN 位置

cn=database-name,cn=ldbm database,cn=plugins,cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 可选:显示数据库后缀及其相应的数据库名称。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend suffix list
    dc=example,dc=com (userroot)
    Copy to Clipboard Toggle word wrap

    这个命令显示每个后缀旁的后端数据库名称。在下一步中使用后缀的数据库名称。

  2. 为数据库设置 DN 缓存大小。这个示例将 DN 缓存设置为 20MB。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend suffix set --dncache-memsize=20971520 userroot
    Copy to Clipboard Toggle word wrap
  3. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 dncache-memsize 调整为不同的值,或者重新调整默认值 10 MB。

验证

  • 显示 nsslapd-dncachememsize 属性的新值,并将其设置为您所需的值。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=userroot,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-dncachememsize
    nsslapd-dncachememsize: 20971520
    Copy to Clipboard Toggle word wrap
重要

不要更改此设置,除非您有强烈需要应用自定义值。IdM 目录服务器使用内置缓存自动大小功能来优化性能。

nsslapd-ndn-cache-max-size 属性控制存储规范化可分辨名称(NDN)的缓存的大小(以字节为单位)。增加这个值将在内存中保留更频繁使用的 DN。

Expand
表 7.6. nsslapd-ndn-cache-max-size attribute values

默认值

20971520 (20 MB)

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 确保启用了 NDN 缓存。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-ndn-cache-enabled
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ndn-cache-enabled: on
    Copy to Clipboard Toggle word wrap

    如果缓存关闭,使用以下命令启用它。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-ndn-cache-enabled=on
    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-ndn-cache-enabled"
    Copy to Clipboard Toggle word wrap
  2. 检索 nsslapd-ndn-cache-max-size 参数的当前值,并在需要恢复任何调整前记录它。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-ndn-cache-max-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ndn-cache-max-size: 20971520
    Copy to Clipboard Toggle word wrap
  3. 修改 nsslapd-ndn-cache-max-size 属性的值。这个示例将值增加到 41943040 (40 MB)。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-ndn-cache-max-size=41943040
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 nsslapd-ndn-cache-max-size 调整为不同的值,或者重新启用缓存自动大小。

验证

  • 显示 nsslapd-ndn-cache-max-size 属性的新值,并将其设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-ndn-cache-max-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ndn-cache-max-size: 41943040
    Copy to Clipboard Toggle word wrap

7.6. 调整 IdM 目录服务器中的最大消息大小

nsslapd-maxbersize 属性以字节为单位设定传入消息或 LDAP 请求的最大值。限制请求大小可防止某种形式拒绝服务攻击。

如果最大消息大小太小,您可能在 Directory Server 错误日志中看到以下错误: /var/log/dirsrv/slapd- <instance_name> /errors

Incoming BER Element was too long, max allowable is 2097152 bytes. Change the nsslapd-maxbersize attribute in cn=config to increase.
Copy to Clipboard Toggle word wrap

限制适用于 LDAP 请求的总大小。例如,如果请求要添加条目,并且请求中的条目大于配置的值或默认值,则拒绝添加请求。但是,这个限制不适用于复制进程。在更改此属性前请小心。

Expand
表 7.7. nsslapd-maxbersize 属性值

默认值

2097152 (2 MB)

有效范围

0 - 2147483647 (0 到 2 GB)

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-maxbersize 参数的当前值,并在需要恢复任何调整前记录它。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-maxbersize
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxbersize: 2097152
    Copy to Clipboard Toggle word wrap
  2. 修改 nsslapd-maxbersize 属性的值。这个示例将值增加到 4194304,4 MB。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-maxbersize=4194304
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-maxbersize"
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 nsslapd-maxbersize 调整为不同的值,或者重新使用默认的 2097152

验证

  • 显示 nsslapd-maxbersize 属性的值,并将其设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-maxbersize
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxbersize: 4194304
    Copy to Clipboard Toggle word wrap

可以为 /etc/systemd/system.conf 文件中的 DefaultLimitNOFILE 参数定义一个值。具有 root 特权的管理员可使用 setrlimit 命令为 ns-slapd 进程的 DefaultLimitNOFILE 参数设置一个较低的值。然后,这个值优先于 /etc/systemd/system.conf 中的值,并被身份管理(IdM)目录服务器(DS)作为 nsslapd-maxdescriptors 属性的值所接受。

nsslapd-maxdescriptors 属性设置 IdM LDAP 使用的最大的、独立于平台的文件描述符数。文件描述符用于客户端连接、日志文件、套接字和其他资源。

如果没有在 /etc/systemd/system.conf 中或通过 setrlimit 定义任何值,则 IdM DS 会将 nsslapd-maxdescriptors 属性设置为 1048576。

如果 IdM DS 管理员稍后决定为 nsslapd-maxdescriptors 手动设置一个新值,则 IdM DS 会将新值与 setrlimit/etc/systemd/system.conf 中本地定义的值进行比较,结果如下:

  • 如果 nsslapd-maxdescriptors 的新值大于本地定义的值,则服务器会拒绝新值设置,并继续将本地限制值强制为高水位值。
  • 如果新值低于本地定义的值,则将使用新值。

此流程描述了如何为 nsslapd-maxdescriptors 设置新值。

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-maxdescriptors 参数的当前值,并在需要恢复任何调整前记录它。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-maxdescriptors
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxdescriptors: 4096
    Copy to Clipboard Toggle word wrap
  2. 修改 nsslapd-maxdescriptors 属性的值。这个示例将值增加到 8192

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-maxdescriptors=8192
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-maxdescriptors"
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤并将 nsslapd-maxdescriptors 调整为不同的值,或者重新使用默认的 4096

验证

  • 显示 nsslapd-maxdescriptors 属性的值,并验证它已设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-maxdescriptors
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxdescriptors: 8192
    Copy to Clipboard Toggle word wrap

7.8. 调整 IdM 目录服务器中的连接积压大小

侦听服务设定可用于接收进入的连接的套接字的数量。nsslapd-listen-backlog-size 值代表,在拒绝连接前 sockfd socket 队列的最大长度。

如果您的 IdM 环境处理大量连接,请考虑增加 nsslapd-listen-backlog-size 的值。

Expand
表 7.8. nsslapd-listen-backlog-size 属性值

默认值

128 个队列插槽

有效范围

0 - 9223372036854775807

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-listen-backlog-size 参数的当前值,并在进行任何调整前记录它,以备需要恢复时使用。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-listen-backlog-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-listen-backlog-size: 128
    Copy to Clipboard Toggle word wrap
  2. 修改 nsslapd-listen-backlog-size 属性的值。这个示例将值增加到 192

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-listen-backlog-size=192
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-listen-backlog-size"
    Copy to Clipboard Toggle word wrap

验证

  • 显示 nsslapd-listen-backlog-size 属性的值,并验证它已设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-listen-backlog-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-listen-backlog-size: 192
    Copy to Clipboard Toggle word wrap

锁定机制控制目录服务器进程可以同时运行多少个副本,nsslapd-db-locks 参数设置最大锁定数。

如果您在 /var/log/dirsrv/slapd- <instance_name> /errors 日志文件中看到以下出错信息,请增加 最大锁定数:

libdb: Lock table is out of available locks
Copy to Clipboard Toggle word wrap
Expand
表 7.9. nsslapd-db-locks 属性值

默认值

50000 个锁定

有效范围

0 - 2147483647

条目 DN 位置

cn=bdb,cn=config,cn=ldbm database,cn=plugins,cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-db-locks 参数的当前值,并在需要恢复任何调整前记录它。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=bdb,cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-db-locks
    nsslapd-db-locks: 50000
    Copy to Clipboard Toggle word wrap
  2. 修改 locks 属性的值。这个示例将值加倍到 100000 个锁定。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend config set --locks=100000
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully updated database configuration
    Copy to Clipboard Toggle word wrap
  4. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
    Copy to Clipboard Toggle word wrap

验证

  • 显示 nsslapd-db-locks 属性的值,并将其设置为您所需的值。

    [root@server ~]# ldapsearch -D "cn=directory manager" -w <directory_manager_password> -b "cn=bdb,cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-db-locks
    nsslapd-db-locks: 100000
    Copy to Clipboard Toggle word wrap

默认在 RHEL 上启用透明巨页(THP) Linux 内存管理功能。THP 功能可能会降低 IdM 目录服务器(DS)性能,因为 DS 具有稀疏的内存访问模式。

如何禁用该功能,请参阅 Red Hat Directory Server 13 文档中的 禁用 Transparent Huge Pages 功能

nsslapd-ioblocktimeout 属性代表一个时间(以毫秒为单位),在经过这个时间后到停滞的 LDAP 客户端的连接将关闭。当 LDAP 客户端没有为读或写操作进行任何 I/O 处理时,它被视为已停止工作。

降低 nsslapd-ioblocktimeout 属性的值可以更早地释放连接。

Expand
表 7.10. nsslapd-ioblocktimeout 属性值

默认值

10000 毫秒

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-ioblocktimeout 参数的当前值,并在需要恢复任何调整前记录它。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-ioblocktimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ioblocktimeout: 10000
    Copy to Clipboard Toggle word wrap
  2. 修改 nsslapd-ioblocktimeout 属性的值。这个示例将值降低为 8000

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-ioblocktimeout=8000
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on _ldap://server.example.com_:
    Successfully replaced "nsslapd-ioblocktimeout"
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 nsslapd-ioblocktimeout 调整为不同的值,或者重新使用默认的 10000

验证

  • 显示 nsslapd-ioblocktimeout 属性的值,并将其设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-ioblocktimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-idletimeout: 8000
    Copy to Clipboard Toggle word wrap

7.12. 在 IdM 目录服务器中调整闲置连接超时

nsslapd-idletimeout 属性以秒为单位设置闲置 LDAP 客户端连接被 IdM 服务器关闭的时间长度(以秒为单位)。0 表示服务器永远不会关闭闲置连接。

红帽建议调整这个值,以便过时的连接关闭,但活跃的连接不会永久关闭。

Expand
表 7.11. nsslapd-idletimeout 属性值

默认值

3600(1 小时)

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索 nsslapd-idletimeout 参数的当前值,并在需要恢复任何调整前记录它。提示时输入 Directory Manager 密码。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-idletimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-idletimeout: 3600
    Copy to Clipboard Toggle word wrap
  2. 修改 nsslapd-idletimeout 属性的值。这个示例将值降低为 1800 (30 分钟)。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config replace nsslapd-idletimeout=1800
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-idletimeout"
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 nsslapd-idletimeout 调整为不同的值,或者重新使用默认的 3600

验证

  • 显示 nsslapd-idletimeout 属性的值,并将其设置为您所需的值。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> config get nsslapd-idletimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-idletimeout: 3600
    Copy to Clipboard Toggle word wrap

7.13. 调整复制发行超时

IdM 副本在带有另一个副本的复制会话中被锁定。在一些环境中,因为大型更新或网络拥塞导致副本长时间锁定,这会增加复制延迟。

您可以通过调整 repl-release-timeout 参数在固定时间后发布副本。红帽建议将此值设置为 30120 之间:

  • 如果值设置过低,则副本会持续重新分配另一个,并且副本无法发送较大的更新。
  • 较长的超时可以改进高流量的情况。在高流量的情况中,一个服务器可以在较长的时间内独家访问一个副本是最佳的,但如果高于 120 秒则会减慢复制速度。
Expand
表 7.12. repl-release-timeout 属性值

默认值

60

有效范围

0 - 2147483647

推荐的范围

30 - 120

先决条件

  • LDAP Directory Manager 密码

流程

  1. 显示数据库后缀及其对应的后端。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> backend suffix list
    cn=changelog (changelog)
    dc=example,dc=com (userroot)
    o=ipaca (ipaca)
    Copy to Clipboard Toggle word wrap

    这个命令会在后缀旁的显示后端数据库名称。在下一步中使用后缀名称。

  2. 修改主 userroot 数据库的 repl-release-timeout 属性的值。这个示例将值增加到 90 秒。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> replication set --suffix="dc=example,dc=com" --repl-release-timeout=90
    Copy to Clipboard Toggle word wrap
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "repl-release-timeout"
    Copy to Clipboard Toggle word wrap
  4. 可选:如果您的 IdM 环境使用 IdM 证书颁发机构(CA),则您可以修改 CA 数据库的 repl-release-timeout 属性的值。这个示例将值增加到 90 秒。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://<server_fqdn> replication set *--suffix="o=ipaca" --repl-release-timeout=90*
    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "repl-release-timeout"
    Copy to Clipboard Toggle word wrap
  5. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
    Copy to Clipboard Toggle word wrap
  6. 监控 IdM 目录服务器的性能。如果没有改进,请重复此步骤,并将 repl-release-timeout 调整为不同的值,或者返回默认值 60 秒。

验证

  • 显示 nsds5ReplicaReleaseTimeout 属性的值,并验证它已设置为您的所需值。

    [root@server ~]# ldapsearch -D "cn=Directory Manager" -w <directory_manager_password> -b "cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config" | grep nsds5ReplicaReleaseTimeout
    nsds5ReplicaReleaseTimeout: 90
    Copy to Clipboard Toggle word wrap
注意

本例中后缀的可辨识名称为 dc=example,dc=com,但等号(=)和逗号(,)必须在 ldapsearch 命令中进行转义。

使用以下转义字符将后缀 DN 转换为 cn=dc\3Dexample\2Cdc\3Dcom

  • \3D 替换 =
  • \2C 替换 ,

第 8 章 调整 KDC 的性能

要优化 Kerberos 密钥分发中心(KDC)的性能,它负责验证用户、主机和服务,根据您的部署的流量模式调整密钥参数。

8.1. 调整 KDC 侦听队列的长度

您可以通过在 /var/kerberos/krb5kdc/kdc.conf 文件的 [kdcdefaults] 部分中设置 kdc_tcp_listen_backlog 选项来调整 KDC 守护进程的监听队列长度的大小。对于某些有大量 Kerberos 流量的 IdM 部署,默认值 5 可能太低,但如果设置的值太高会降低性能。

Expand

默认值

5

有效范围

1 - 10

流程

  1. 在文本编辑器中打开 /var/kerberos/krb5kdc/kdc.conf 文件。
  2. 将 TCP 侦听功能设置为所需值,如 7

    [kdcdefaults]
     ...
     kdc_tcp_listen_backlog = 7
    Copy to Clipboard Toggle word wrap
  3. 保存并关闭 /var/kerberos/krb5kdc/kdc.conf 文件。
  4. 重启 KDC 来加载新设置。

8.2. 每个域控制 KDC 行为的选项

为了跟踪每个 Kerberos 域的锁定和解锁用户帐户,KDC 会在每个成功和身份验证失败后写入其数据库。通过调整 /etc/krb5.conf 文件的 [dbmodules] 部分中的以下选项,您可以最大程度减少 KDC 写入信息的频率来提高性能。

disable_last_success

如果设置为 true,这个选项会阻止 KDC 更新到需要预身份验证的主条目的 Last successful authentication 字段。

Expand

默认值

false

有效范围

truefalse

disable_lockout

如果设置为 true,这个选项会阻止 KDC 更新到需要预身份验证的主条目的 Last failed authenticationFailed password attempts 字段。设置此标志可能会提高性能,但禁用帐户锁定可能会被视为安全风险。

Expand

默认值

false

有效范围

truefalse

8.3. 根据每个域(realm)调整 KDC 设置

通过修改 /etc/krb5.conf 文件来调整特定 Kerberos 域的 KDC 设置。

流程

  1. 在文本编辑器中打开 /etc/krb5.conf 文件。
  2. [dbmodules] 部分中指定任意选项及其所需值,并在相应的 Kerberos 域中指定。在本例中,您要为 < kerberos_realm> 设置 disable_last_ success 变量,如 EXAMPLE.COM。

    [dbmodules]
        <kerberos_realm> = {
            disable_last_success = true
        }
    Copy to Clipboard Toggle word wrap
  3. 保存并关闭 /etc/krb5.conf 文件。
  4. 重启 KDC 来加载新设置。

8.4. 调整 krb5kdc 进程的数量

您可以手动调整密钥分发中心(KDC)开始处理进入的连接的进程数。

默认情况下,IdM 安装程序检测到 CPU 内核数,并在 /etc/sysconfig/krb5kdc 文件中输入值。例如,该文件可能包含以下条目:

KRB5KDC_ARGS='-w 2'
[...]
Copy to Clipboard Toggle word wrap

在这个示例中,KRB5KDC_ARGS 参数设为 -w 2,KDC 会启动两个独立的进程来处理来自主进程的进入连接。您可能想要调整这个值,特别是在虚拟环境中,您可以根据您的要求轻松添加或删除虚拟 CPU 的数量。为了防止性能问题,甚至 IdM 服务器因为端口 88 上的不断增加 TCP/IP 队列而变得没有响应,请通过手动将 KRB5KDC_ARGS 参数设置为更高值来模拟更多进程。

流程

  1. 在文本编辑器中打开 /etc/sysconfig/krb5kdc 文件。
  2. 指定 KRB5KDC_ARGS 参数的值。在本例中,您要将进程数设置为 10:

    KRB5KDC_ARGS='-w 10'
    [...]
    Copy to Clipboard Toggle word wrap
  3. 保存并关闭 /etc/sysconfig/krb5kdc 文件。
  4. 重新载入 systemd 配置:

    # systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  5. 重启 krb5kdc 服务:

    # systemctl restart krb5kdc.service
    Copy to Clipboard Toggle word wrap
    注意

    您可以使用 IdM Healthcheck 工具来验证 KDC 是否已被配置为使用最佳数量的 worker 进程。请参阅使用 IdM Healthcheck 验证 KDC worker 进程的最佳数量

第 9 章 为大型 IdM-AD 信任部署调整 SSSD 性能

对于系统安全服务守护进程 (SSSD),检索用户和组群信息会涉及大量数据操作,特别是在带有信任到大型 Active Directory (AD) 域的 IdM 部署中。提高此性能的方法是,调整 SSSD 从身份提供程序检索哪些信息,以及进行多久。

将调优选项应用到 IdM 服务器中 SSSD 服务的配置,以便在从大型 AD 环境检索信息时改进其响应时间。

先决条件

  • 您需要 root 权限来编辑 /etc/sssd/sssd.conf 配置文件。

流程

  1. 在文本编辑器中打开 /etc/sssd/sssd.conf 配置文件。
  2. 将以下选项添加到您身份管理(IdM)域的 [domain] 部分:

    [domain/<idm_domain_name>]
    ignore_group_members = true
    subdomain_inherit = ignore_group_members
    ...
    Copy to Clipboard Toggle word wrap
    注意

    subdomain_inherit 选项中列出的设置适用于主(IdM)域和可信 AD 域。

  3. 保存并关闭服务器上的 /etc/sssd/sssd.conf 文件。
  4. 重启 SSSD 服务以载入配置更改。

    [root@client ~]# systemctl restart sssd
    Copy to Clipboard Toggle word wrap

IdM 客户端无法直接从 Active Directory(AD)接收用户和组的信息,因此 IdM 服务器使用 ipa-extdom 插件接收 AD 用户和组的信息,并将这些信息转发到请求的客户端。

ipa-extdom 插件向 SSSD 发送有关 AD 用户的数据的请求。如果信息不在 SSSD 缓存中,SSSD 会从 AD 域控制器(DC)请求数据。您可以调整 config 超时值,它定义 ipa-extdom 插件在插件取消连接前等待 SSSD 的回复,并将超时错误返回给调用者。默认值为 10000 毫秒(10 秒)。

以下示例将配置超时调整为 20 秒(20000 毫秒)。

警告

调整配置超时时要非常谨慎:

  • 如果您设置了太小的值(如 500 毫秒),SSSD 可能没有足够的时间来回复,请求始终会返回超时。
  • 如果您设置了太大的值,如 30000 毫秒(30 秒),则单个请求可能会阻止到 SSSD 的连接。因为一个线程一次只能连接到 SSSD,所以来自插件的所有其他请求都必须等待。
  • 如果 IdM 客户端发送了多个请求,它们可以阻止为 IdM 服务器上的 Directory 服务器配置的所有可用 worker。因此,服务器可能无法在一段时间内回复任何类型的请求。

只在以下情况下更改配置超时:

  • 在请求 AD 用户和组的信息时,如果 IdM 客户端会在达到自己的搜索超时前频繁收到超时错误,这代表配置超时值太小
  • 如果 IdM 服务器上的 Directory Server 经常会锁定,pstack 程序报告有很多或所有 worker 线程在处理 ipa-extdom 请求,这代表这个值 太大

先决条件

  • LDAP Directory Manager 密码

流程

  • 使用以下命令将配置超时调整为 20000 毫秒:

    # ldapmodify -D "cn=Directory Manager" -W
    dn: cn=ipa_extdom_extop,cn=plugins,cn=config
    changetype: modify
    replace: ipaExtdomMaxNssTimeout
    ipaExtdomMaxNssTimeout: 20000
    Copy to Clipboard Toggle word wrap

IdM 客户端无法直接从 Active Directory(AD)接收用户和组的信息,因此 IdM 服务器使用 ipa-extdom 插件接收 AD 用户和组的信息,并将这些信息转发到请求的客户端。

您可以调整 ipa-extdom 插件的最大缓冲区大小,它调整 SSSD 可以存储它接收数据的缓冲区的大小。如果缓冲区太小,SSSD 会返回 ERANGE 错误,并且插件会以更大的缓冲区重试请求。默认缓冲区大小为 134217728 字节(128 MB)。

以下示例将最大缓冲区大小调整为 256 MB(268435456 字节)。

先决条件

  • LDAP Directory Manager 密码

流程

  • 使用以下命令将最大缓冲区大小设置为 268435456 字节:

    # ldapmodify -D "cn=Directory Manager" -W
    dn: cn=ipa_extdom_extop,cn=plugins,cn=config
    changetype: modify
    replace: ipaExtdomMaxNssBufSize
    ipaExtdomMaxNssBufSize: 268435456
    Copy to Clipboard Toggle word wrap

因为 IdM 客户端无法直接从活动目录(AD)接收用户和组的信息,所以 IdM 服务器使用 ipa-extdom 插件接收 AD 用户和组的信息,然后将此信息转发到请求的客户端。

默认情况下,ipa-extdom 插件被配置为使用最多 80% 的 LDAP worker 线程来处理 IdM 客户端的请求。如果 IdM 客户端上的 SSSD 服务请求了大量有关 AD 信任用户和组的信息,如果其使用大多数 LDAP 线程,则此操作可以停止 LDAP 服务。如果您遇到这些问题,您可能会在 AD 域的 SSSD 日志文件中看到类似的错误: /var/log/sssd/sssd__<your-ad-domain-name.com>_.log

(2022-05-22  5:00:13): [be[ad.example.com]] [ipa_s2n_get_user_done] (0x0040): s2n exop request failed.
(2022-05-22  5:00:13): [be[ad.example.com]] [ipa_s2n_get_user_done] (0x0040): s2n exop request failed.
(2022-05-22  5:00:13): [be[ad.example.com]] [ipa_s2n_exop_done] (0x0040): ldap_extended_operation result: Server is busy(51), Too many extdom instances running.
Copy to Clipboard Toggle word wrap

您可以通过为 ipaExtdomMaxInstances 选项设置值来调整 ipa-extdom 实例的最大数,它必须是大于 0 的整数,且小于 worker 线程总数。

先决条件

  • LDAP Directory Manager 密码

流程

  1. 检索总 worker 线程数:

    # ldapsearch -xLLLD cn=Directory\ Manager -W -b cn=config -s base nsslapd-threadnumber
    Enter LDAP Password:
    dn: cn=config
    nsslapd-threadnumber: 16
    Copy to Clipboard Toggle word wrap

    这意味着 ipaExtdomMaxInstances 的当前值是 13。

  2. 调整实例的最大数。这个示例将值改为 14:

    # ldapmodify -D "cn=Directory Manager" -W
    dn: cn=ipa_extdom_extop,cn=plugins,cn=config
    changetype: modify
    replace: ipaExtdomMaxInstances
    ipaExtdomMaxInstances: 14
    Copy to Clipboard Toggle word wrap
  3. 检索 ipaExtdomMaxInstances 的当前值:

    # ldapsearch -xLLLD "cn=Directory Manager" -W -b "cn=ipa_extdom_extop,cn=plugins,cn=config" |grep ipaextdommaxinstances
    Enter LDAP Password:
    
    ipaextdommaxinstances: 14
    Copy to Clipboard Toggle word wrap
  4. 监控 IdM 目录服务器的性能,如果不改进,请重复这个过程并调整 ipaExtdomMaxInstances 变量的值。

在 IdM 客户端中对 SSSD 服务配置应用调整选项,以便在从大型 AD 环境检索信息时改进其响应时间。

先决条件

  • 您需要 root 权限来编辑 /etc/sssd/sssd.conf 配置文件。

流程

  1. 确定单个未缓存登录所需的秒数。

    1. 清除 IdM 客户端上的 SSSD 缓存。

      [root@client_hostname ~]# sss_cache -E
      Copy to Clipboard Toggle word wrap
    2. 使用 time 命令测量 AD 用户的登录时间。在 IdM 客户端中,通过登录到同一主机以 AD 用户进行身份验证。

      [root@client_hostname ~]# time ssh <ad_username>@<ad_domain>@<client_fqdn>
      Copy to Clipboard Toggle word wrap
    3. 尽快输入密码。

      Password:
      Last login: Sat Jan 23 06:29:54 2021 from 10.0.2.15
      [ad_username@ad_domain@client_fqdn ~]$
      Copy to Clipboard Toggle word wrap
    4. 尽快注销以显示已经过的时间。在本例中,单个未缓存的登录大约需要 9 秒。

      [ad_username@ad_domain@client_fqdn /]$ exit
      logout
      Connection to client.example.com closed.
      
      real 0m8.755s
      user    0m0.017s
      sys     0m0.013s
      Copy to Clipboard Toggle word wrap
  2. 在文本编辑器中打开 /etc/sssd/sssd.conf 配置文件。
  3. 在您的 Active Directory 域的 [domain] 部分添加以下选项。将 pam_id_timeoutkrb5_auth_timeout 选项设置为未缓存登录所需的秒数。如果您还没有 AD 域的 domain 部分,请创建一个。

    [domain/<idm_domain>/<ad_domain>]
    krb5_auth_timeout = 9
    ldap_deref_threshold = 0
    ...
    Copy to Clipboard Toggle word wrap
  4. [pam] 部分添加以下选项:

    [pam]
    pam_id_timeout = 9
    Copy to Clipboard Toggle word wrap
  5. 保存并关闭服务器上的 /etc/sssd/sssd.conf 文件。
  6. 重启 SSSD 服务以载入配置更改。

    [root@client_hostname ~]# systemctl restart sssd
    Copy to Clipboard Toggle word wrap

9.6. 在 tmpfs 中挂载 SSSD 缓存

系统安全服务守护进程(SSSD)持续将 LDAP 对象写入其缓存中。这些内部 SSSD 事务将数据写入磁盘,它的速度比从 Random-Access Memory(RAM)进行读取和写入要慢。

要提高此性能,请在 RAM 中挂载 SSSD 缓存。

开始前,请考虑以下事项:

  • 如果 SSSD 缓存位于 RAM,则缓存的信息不会在重启后保留。
  • 在 IdM 服务器上执行此更改是安全的,因为 IdM 服务器中的 SSSD 实例不会丢失与同一主机上 Directory 服务器的连接。
  • 如果您在 IdM 客户端中执行此调整,且丢失了与 IdM 服务器的连接,则用户重启后将无法进行身份验证,直到重新建立连接为止。

先决条件

  • 您需要 root 权限来编辑 /etc/fstab 配置文件。

流程

  1. 创建 tmpfs 临时文件系统:

    1. 确认 SSSD 用户拥有 config.ldb 文件:

      # ls -al /var/lib/sss/db/config.ldb
      -rw-------. 1 *sssd sssd* 1286144 Jun  8 16:41 /var/lib/sss/db/config.ldb
      Copy to Clipboard Toggle word wrap
    2. 将以下条目添加到 /etc/fstab 文件中作为一行:

      tmpfs /var/lib/sss/db/ tmpfs size=300M,mode=0700,uid=sssd,gid=sssd,rootcontext=system_u:object_r:sssd_var_lib_t:s0 0 0
      Copy to Clipboard Toggle word wrap

    这个示例创建了一个 300MB 缓存。根据您的 IdM 和 AD 目录大小调整 size 参数,每个 10,000 LDAP 条目大约为 100 MBs。

  2. 挂载新的 SSSD 缓存目录。

    [root@host ~]# mount /var/lib/sss/db/
    Copy to Clipboard Toggle word wrap
  3. 重启 SSSD 以反应这个配置更改。

    [root@host ~]# systemctl restart sssd
    Copy to Clipboard Toggle word wrap

当您有大型 IdM-AD 信任部署时,您可以使用 /etc/sssd/sssd.conf 配置文件中的 SSSD 的性能调整 IdM 服务器和客户端中的性能。

9.7.1. IdM 服务器的调整选项

ignore_group_members

在验证和授权用户时,了解用户所属的组而不是属于组的所有用户是非常重要地。当将 ignore_group_members 设为 true 时,SSSD 只检索关于组对象本身而不是其成员的信息,从而显著提高性能。

注意

id user@ad-domain.com 命令仍然会返回正确的组列表,但 getent group ad-group@ad-domain.com 会返回一个空列表。

Expand

默认值

false

推荐的值

true

注意

当部署涉及带有 compat 树的 IdM 服务器时,您不应该将这个选项设置为 true

subdomain_inherit

使用 subdomain_inherit 选项,您可以将 ignore_group_members 设置应用到可信 AD 域的配置。subdomain_inherit 选项中列出的设置适用于主(IdM)域以及 AD 子域。

Expand

默认值

none

推荐的值

subdomain_inherit = ignore_group_members

9.7.2. IdM 客户端的调优选项

pam_id_timeout

此参数控制 PAM 会话的结果被缓存多长时间,以避免在身份查找期间到身份提供程序的过多往返。在 IdM 服务器和 IdM 客户端中填充复杂组成员资格的环境中,默认值 5 秒可能不足。红帽建议将 pam_id_timeout 设置为一个未缓存的单个登录所需的秒数。

Expand

默认值

5

推荐的值

单个未缓存登录所需的秒数

krb5_auth_timeout

对于存在用户是大量组的成员的环境,增加 krb5_auth_timeout 可以允许更多的时间来处理复杂的组信息。红帽建议把这个值设置为一个未缓存的登录所花的秒数。

Expand

默认值

6

推荐的值

单个未缓存登录所需的秒数

ldap_deref_threshold

解引用查找是在单个 LDAP 调用中获取所有组成员的方法。ldap_deref_threshold 值指定内部缓存中必须缺少的组成员数,以触发无引用查找。如果缺少的成员较少,则会单独查找。在大型环境中,解引用查找可能需要很长时间,并降低性能。要禁用解引用查找,将此选项设置为 0

Expand

默认值

10

推荐的值

0

第 10 章 调优 WSGI 进程

如果您因为长时间运行的 API 进程而看到请求失败,则这些 API 进程可以从调优中受益。

默认情况下,IPA 为 64 位系统上的 API 服务分配 4 个 Web 服务器网关接口(WSGI)进程。出于内存保留目的,实施 4 个进程的默认限制。增加 WSGI 进程数允许接受更多请求,代价是更高的 CPU 使用和内存消耗。默认情况下,IPA 对每个 WSGI 进程的 IPA 使用大约 100 到 110MB 的驻留内存。在将此调优到 16 个进程(这是推荐的限制)后,驻留内存大约为 1.3GB。

10.1. 流程

  • 修改 /etc/httpd/conf.d/ipa.conf 文件中的进程值:

    WSGIDaemonProcess ipa processes=<4> threads=1 maximum-requests=500 \
    Copy to Clipboard Toggle word wrap

任何长时间运行的 API 端点都可以从调优中受益。这个调优决定由用户做出。

例如,OpenStack 安装由包含多个服务的多个控制器组成。每个服务都请求一个证书,以便所有内部通信都通过传输层安全(TLS)发生。安装或刷新控制器或计算节点时,可以请求或刷新这些证书。在涉及多个控制器或计算节点的场景中,请求证书的量可能会变得非常大。这些请求是自动的,因此它们几乎同时发生。增加 WSGI 线程数允许安装完成。

10.2. 为改进的 IPA 服务器性能优化 CPU 使用率

在大量证书颁发任务过程中遇到性能限制时,调优 CPU 和 Web 服务器网关接口(WSGI)进程数可以显著增强 IPA 服务器处理同时请求的能力。

如果服务器配置了 4 个 CPU 和 70 个客户端,每个客户端请求 7 个证书(总共 490 个证书),会发生服务器超时,因为请求数量超过服务器的处理量。

将 CPU 数增加到 8 个,并将 WSGI 进程数匹配到 8 个,会将证书处理量增加到 630 个证书,比 4 个 CPU 配置增加了 28%,尽管 CPU 数增加了 100%。将 CPU 数量进一步增加到 16 个,显示仅使用 8 个 WSGI 进程没有增加额外的性能。但是,通过将 WSGI 进程数增加到 16 个,服务器处理了 110 个客户端的 770 证书,与 8 个 CPU 设置相比,反映了 22% 的提升。

平均而言,CPU 数增加一倍会导致证书颁发量增加 25% ,只要相应地调优 WSGI 进程。这强调了在一起扩展 CPU 和 WSGI 进程的需要,以防止瓶颈并优化服务器性能。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat