性能调节身份管理

Red Hat Enterprise Linux 8

调整身份管理服务以便在 Red Hat Enterprise Linux 8 中提高性能

摘要

本文档提供在 Red Hat Enterprise Linux 8 中调整身份管理中常见性能设置的步骤。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息

在身份管理中,计划中的术语变化包括:

  • 使用 block list 替换 blacklist
  • 使用 allow list 替换 whitelist
  • 使用 secondary 替换 slave
  • 根据上下文,master 词语将被替换为更精确的语言:

    • 使用 IdM server 替换 IdM master
    • 使用 CA renewal server 替换 CA renewal master
    • 使用 CRL publisher server 替换 CRL master
    • 使用 multi-supplier 替换 multi-master

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。要做到这一点:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 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 会因为有更多的缓存使系统具有更好的性能。

注意

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

第 3 章 IdM 中的故障转移、负载平衡和高可用性

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

3.1. 客户端故障转移功能

  • 默认情况下,IdM 客户端中的 SSSD 服务被配置为使用 DNS 中的服务(SRV)资源记录来自动决定要连接的最佳 IdM 服务器。这个行为由 /etc/sssd/sssd.conf 文件的 ipa_server 参数中的 _srv_ 选项控制:

    [root@client ~]# cat /etc/sssd/sssd.conf
    
    [domain/example.com]
    id_provider = ipa
    ipa_server = _srv_, server.example.com
    ...

    如果 IdM 服务器离线,IdM 客户端中的 SSSD 服务会自动连接到另一个 IdM 服务器。

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

    [root@client ~]# cat /etc/sssd/sssd.conf
    
    [domain/example.com]
    id_provider = ipa
    ipa_server = server1.example.com, server2.example.com
    ...

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

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

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

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

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

第 4 章 优化副本拓扑

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

4.1. 确定正确的副本数

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

4.2. 在拓扑中连接副本

将每个副本连接到至少两个其他副本
配置额外的复制协议确保信息不仅在初始副本和您安装的第一个服务器之间复制,而且在其他副本之间复制。
将副本连接到最多四个其他副本(这并不是硬要求)

每个服务器有大量的复制协议不会带来很大的好处。接收副本一次只能由另一个副本更新,而其他复制协议则处于闲置状态。每个副本有超过四个复制协议通常意味着资源不足。

注意

本建议适用于证书复制协议和域复制协议。

每个副本有四个复制协议的限制有两个例外:

  • 如果某些副本没有在线或没有响应时,您需要使用故障切换路径。
  • 在大型部署中,您需要特定节点间的其他直接链接。

配置大量复制协议可能会对整体性能造成负面影响:当拓扑中的多个复制协议正在发送更新时,某些副本可能会在进入更新和传出更新之间在更改日志数据库文件出现高竞争。

如果您决定每个副本使用更多复制协议,请确保您没有遇到复制问题和延迟。但请注意,但距离大及存在大量中间节点时也可能造成延迟问题。

相互连接数据中心中的副本
这样可保证数据中心中的域复制。
将每个数据中心连接到至少两个其他数据中心
这样可确保数据中心间的域复制。
至少使用一对复制协议连接数据中心
如果数据中心 A 和 B 有从 A1 到 B1 的复制协议,当存在从 A2 到 B2 的复制协议时,可确保其中一个服务器停止工作时复制可在两个数据中心之间继续。

4.3. 副本拓扑示例

下图显示了基于创建可靠拓扑指南的身份管理(IdM)拓扑示例。

副本拓扑示例 1 显示四个数据中心,每个数据中心有四个服务器。服务器与复制协议连接。

图 4.1. 副本拓扑示例 1

A diagram showing 4 data centers - Geo 1 through 4. Each data center has four servers connected to each other with replication agreements. There are also replication agreements connecting two servers from Geo 1 to two servers in Geo 2. This pattern continues with two servers in Geo 2 connected to two servers in Geo 3 and two servers in Geo 3 connected to Geo 4. This connects each data center so each server is at most 3 hops away from another Geo.



副本拓扑示例 2 显示三个数据中心,每个数据中心都有不同的服务器数量。服务器与复制协议连接。

图 4.2. 副本拓扑示例 2

A diagram showing 3 data centers: Geo 1 has 5 servers each connected to the other - Geo 2 has two servers connected to each other - Geo 3 has 3 servers connected in a triangle. There are 2 connections from each Geo connecting two of its servers to 2 servers in the next Geo.

4.4. 其它资源

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

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

搜索大小限制

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

默认: 100 条目。

搜索时间限制

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

默认: 2 秒。

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

重要

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

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

以下文本描述了在命令行中调整搜索大小和时间限制:

  • 全局
  • 对于一个特定条目

流程

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

    $ ipa config-show
    
    Search time limit: 2
    Search size limit: 100
  2. 要为所有查询全局调整限制,请使用 ipa config-mod 命令并添加 --searchrecordslimit--searchtimelimit 选项。例如:

    $ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
  3. 要仅为特定查询调整限制,请在该命令中添加 --sizelimit--timelimit 选项。例如:
$ ipa user-find --sizelimit=200 --timelimit=120

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

以下文本描述了在 IdM Web UI 中调整搜索大小和时间限制:

  • 全局
  • 对于一个特定条目

流程

为所有查询在全局范围内调整限制:

  1. 登录到 IdM Web UI。
  2. IPA Server

    Screenshot of the IdM Web UI highlighting the "IPA Server" tab from the top menu

  3. IPA Server 选项卡中点 Configuration
  4. 搜索选项区域中设置所需的值。

    默认值为:

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

    Screenshot of the IdM Web UI highlighting the Save button which is below the "Configuration" title at the top of the Configuration page

保存值后,搜索条目并验证结果。

第 6 章 调整 IdM Directory 服务器性能

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

要调整目录服务器缓存数据的方式,请参阅以下步骤:

要调整 Directory 服务器的资源限值,请参阅以下步骤:

要调整对性能有最大影响的超时设置,请参阅以下步骤:

6.1. 调整条目缓存大小

重要

红帽建议您使用内置缓存自动缩放功能来优化性能。只有在需要与自动调整的值分离时才会更改这个值。

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.

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

默认值

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.example.com backend config set --cache-autosize=0
  2. 显示数据库后缀及其对应的后端。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com 后端后缀列表
    cn=changelog (changelog)
    dc=example,dc=com (userroot)
    o=ipaca (ipaca)

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --cache-memsize=2147483648 userroot
  4. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
  5. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 cache-memsize 调整为不同的值,或者重新启用缓存自动大小。

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=userroot,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-cachememsize
    nsslapd-cachememsize: 2147483648

其它资源

6.2. 调整数据库索引缓存大小

重要

红帽建议您使用内置缓存自动缩放功能来优化性能。只有在需要与自动调整的值分离时才会更改这个值。

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

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

默认值

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.example.com backend config set --cache-autosize=0 --dbcachesize=268435456
  2. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
  3. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 dbcachesize 调整为不同的值,或者重新启用缓存自动大小。

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-dbcachesize
    nsslapd-dbcachesize: 2147483648

其它资源

6.3. 重新启用数据库和条目缓存自动大小

重要

红帽建议您使用内置缓存自动缩放功能来优化性能。红帽不推荐手动设置缓存大小。

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

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

nsslapd-cache-autosize

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

默认值

10 (10% 的可用 RAM)

有效范围

0 - 100

条目 DN 位置

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

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
  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")
  3. 编辑 /etc/dirsrv/slapd-instance_name/dse.ldif 文件:

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

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

      nsslapd-cache-autosize-split: 25
  4. 将您的更改保存到 /etc/dirsrv/slapd-instance_name/dse.ldif 文件中。
  5. 启动 Directory 服务器。

    [root@server ~]# systemctl start dirsrv.target

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-cache-autosize nsslapd-cache-autosize: *10
    nsslapd-cache-autosize-split: 25

其它资源

6.4. 调整 DN 缓存大小

重要

红帽建议您使用内置缓存自动缩放功能来优化性能。只有在需要与自动调整的值分离时才会更改这个值。

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

默认值

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.example.com 后端后缀列表
    dc=example,dc=com (userroot)

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --dncache-memsize=20971520 userroot
  3. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 dncache-memsize 调整为不同的值,或者返回到默认值 10MB。

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=userroot,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-dncachememsize
    nsslapd-dncachememsize: 20971520

其它资源

6.5. 调整规范化 DN 缓存大小

重要

红帽建议您使用内置缓存自动缩放功能来优化性能。只有在需要与自动调整的值分离时才会更改这个值。

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

默认值

20971520 (20 MB)

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

  1. 确保启用了 NDN 缓存。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-ndn-cache-enabled
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ndn-cache-enabled: on

    如果缓存是 off,使用以下命令启用它。

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-ndn-cache-max-size=41943040
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 nsslapd-ndn-cache-max-size 调整为不同的值,或者重新启用缓存自动大小。

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-ndn-cache-max-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ndn-cache-max-size: 41943040

其它资源

6.6. 调整最大消息大小

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.

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

默认值

209715200 (20 MB)

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get _nsslapd-maxbersize
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxdescriptors: 209715200
  2. 修改 nsslapd-maxbersize 属性的值。这个示例将值增加到 419430400

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-maxbersize=419430400
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-maxbersize"
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 nsslapd-maxbersize 调整为不同的值,或者返回 209715200 默认值。

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-maxbersize
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxbersize: 419430400

其它资源

6.7. 调整文件描述符的最大数量

nsslapd-maxdescriptors 属性设置 Directory 服务器使用的最大、平台的相关文件描述符。文件描述符用于客户端连接、日志文件、套接字和其他资源。

如果您设置的 nsslapd-maxdescriptors 值高于操作系统允许 ns-slapd 使用的文件描述符总数,Directory 服务器会查询操作系统获取最大允许值,然后使用该值。

默认值

4096 描述符

有效范围

1 - 65535

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-maxdescriptors=8192
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-maxdescriptors"
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 nsslapd-maxdescriptors 调整为不同的值,或者返回使用 4096 默认值。

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-maxdescriptors
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-maxdescriptors: 8192

其它资源

6.8. 调整连接数据的大小

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

如果您的 IdM 环境处理大量连接,请考虑增加 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.example.com config get nsslapd-listen-backlog-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-listen-backlog-size: 128
  2. 修改 nsslapd-listen-backlog-size 属性的值。这个示例将值增加到 192

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-listen-backlog-size=192
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-listen-backlog-size"

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-listen-backlog-size
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-listen-backlog-size: 192

其它资源

6.9. 调整数据库锁定的最大数量

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

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

libdb: Lock table is out of available 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 DirectoryManagerPassword -b "cn=bdb,cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-db-locks
    nsslapd-db-locks: 50000
  2. 修改 locks 属性的值。这个示例将值加倍为 100000 个锁定。

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com backend config set --locks=100000
  3. 身份验证为 Directory Manager 以进行配置更改。

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

    [root@server ~]# systemctl restart dirsrv.target

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=bdb,cn=config,cn=ldbm database,cn=plugins,cn=config" | grep nsslapd-db-locks
    nsslapd-db-locks: 100000

其它资源

6.10. 调整输入/输出块超时

nsslapd-ioblocktimeout 属性设置在停止的 LDAP 客户端连接关闭后以毫秒为单位的时间。当 LDAP 客户端没有为读或写操作进行任何 I/O 处理时,它被视为已停止工作。

降低 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.example.com config get nsslapd-ioblocktimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-ioblocktimeout: 10000
  2. 修改 nsslapd-ioblocktimeout 属性的值。这个示例将值降低到 8000

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-ioblocktimeout=8000
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-ioblocktimeout"
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 nsslapd-ioblocktimeout 调整为不同的值,或者返回 10000 默认值。

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-ioblocktimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-idletimeout: 8000

其它资源

6.11. 调整闲置连接超时

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

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

默认值

3600(1 小时)

有效范围

0 - 2147483647

条目 DN 位置

cn=config

先决条件

  • LDAP Directory Manager 密码

流程

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-idletimeout=1800
  3. 身份验证为 Directory Manager 以进行配置更改。

    Enter password for cn=Directory Manager on ldap://server.example.com:
    Successfully replaced "nsslapd-idletimeout"
  4. 监控 IdM 目录服务器的性能。如果它没有以理想的方式改变,请重复这个过程并将 nsslapd-idletimeout 调整为不同的值,或者返回 3600 默认值。

验证步骤

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-idletimeout
    Enter password for cn=Directory Manager on ldap://server.example.com:
    nsslapd-idletimeout: 3600

其它资源

6.12. 调整复制发行超时

IdM 副本在带有另一个副本的复制会话中被独占锁定。在某些情况下,由于大型更新或网络拥塞,副本被长时间锁定,这增加了复制延迟。

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

  • 如果值设置得过低,副本会持续重播,副本将无法发送较大的更新。
  • 超时时间较长可能会提高高流量情况,如果服务器最好在较长时间内只访问副本,但大于 120 秒的值会减慢复制速度。

默认值

60

有效范围

0 - 2147483647

推荐的范围

30 - 120

先决条件

  • LDAP Directory Manager 密码

流程

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com 后端后缀列表
    cn=changelog (changelog)
    dc=example,dc=com (userroot)
    o=ipaca (ipaca)

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

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

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

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

    [root@server ~]# dsconf -D "cn=Directory Manager" ldap://server.example.com 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"
  5. 重启 Directory 服务器。

    [root@server ~]# systemctl restart dirsrv.target
  6. 监控 IdM 目录服务器的性能。如果没有以所需方式更改,请重复这个过程,将 repl-release-timeout 调整为不同的值,或者返回默认值 60 秒。

验证步骤

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

    [root@server ~]# ldapsearch -D "cn=directory manager" -w DirectoryManagerPassword -b "cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config" | grep nsds5ReplicaReleaseTimeout
    nsds5ReplicaReleaseTimeout: 90
注意

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

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

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

其它资源

  • 有关 repl-release-timeout 选项设置的 nsds5ReplicaReleaseTimeout 属性的详情,请查看 DS5ReplicaReleaseTimeout

6.13. 其它资源

第 7 章 调整 KDC 的性能

以下小节介绍了如何调整 Kerberos 密钥分发中心(KDC)的性能,后者负责对用户、主机和服务进行身份验证。

7.1. 控制常规 KDC 行为的选项

您可以通过在 /var/kerberos/krb5kdc/kdc.conf 文件的 [kdcdefaults] 部分设置以下选项来调整常规 KDC 行为。

kdc_tcp_listen_backlog

这个选项设置 KDC 守护进程的监听队列长度的大小。对于遇到大量 Kerberos 流量的一些 IdM 部署,5 的默认值可能太低,但设置这个值会降低性能。

默认值

5

有效范围

1 - 10

7.2. 调整常规 KDC 设置

这个过程调整了一般的 KDC 行为。

流程

  1. 在文本编辑器中打开 /var/kerberos/krb5kdc/kdc.conf 文件。
  2. [kdcdefaults] 部分指定任意选项及其所需值。在这个示例中,您要将 TCP 侦听功能设置为 7

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

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

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

disable_last_success

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

默认值

false

有效范围

true 或者 false

disable_lockout

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

默认值

false

有效范围

true 或者 false

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

这个过程调整每个 Kerberos 域的 KDC 行为。

流程

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

    [dbmodules]
        EXAMPLE.COM = {
            disable_last_success = true
        }
  3. 保存并关闭 /etc/krb5.conf 文件。
  4. 重启 KDC 来加载新设置。

7.5. 其它资源

第 8 章 在 IdM 服务器和客户端中调整 SSSD 以进行大型 IdM-AD 信任部署

检索用户和组信息是系统安全服务守护进程(SSSD)的一项数据密集型操作,特别是在信任大型 Active Directory(AD)域的 IdM 部署中。您可以通过调整 SSSD 从身份提供程序检索的信息和时长来提高此性能。

8.1. 为大型 IdM-AD 信任部署在 IdM 服务器中调整 SSSD

此流程对 IdM 服务器中的 SSSD 服务配置应用调整选项,以改进从大型 AD 环境检索信息时的响应时间。

先决条件

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

流程

  1. 在文本编辑器中打开 /etc/sssd/sssd.conf 配置文件。
  2. 在您的 Active Directory 域的 [domain] 部分添加以下选项。如果您还没有 AD 域的 domain 部分,请创建一个。

    [domain/ad.example.com]
    ignore_group_members = true
    subdomain_inherit = ignore_group_members
    ...
  3. 保存并关闭服务器中的 /etc/sssd/sssd.conf 文件。
  4. 重启 SSSD 服务以载入配置更改。

    [root@client ~]# systemctl restart sssd

8.2. 为大型 IdM-AD 信任部署在 IdM 客户端中调整 SSSD

此流程将调整选项应用于 IdM 客户端中的 SSSD 服务配置,以改进从大型 AD 环境检索信息的响应时间。

先决条件

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

流程

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

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

      [root@client ~]# sss_cache -E
    2. 测量使用 time 命令以 AD 用户身份登录所需的时间。在这个示例中,使用 IdM 客户端 client.example.com ,从 ad.example.com AD 域登录到与用户 ad-user 相同的主机。

      [root@client ~]# time ssh ad-user@ad.example.com@client.example.com
    3. 尽快输入密码。

      Password:
      Last login: Sat Jan 23 06:29:54 2021 from 10.0.2.15
      [ad-user@ad.example.com@client ~]$
    4. 尽快注销以显示已经过的时间。在这个示例中,一个 un-cached 登录大约需要 9 秒。

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

    [domain/ad.example.com]
    pam_id_timeout = 9
    krb5_auth_timeout = 9
    ldap_deref_threshold = 0
    ...
  4. 保存并关闭服务器中的 /etc/sssd/sssd.conf 文件。
  5. 重启 SSSD 服务以载入配置更改。

    [root@client ~]# systemctl restart sssd

8.3. 在 tmpfs 中挂载 SSSD 缓存

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

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

注意事项

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

先决条件

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

流程

  1. 通过将以下条目添加到 /etc/fstab 作为一行来创建 tmpfs 临时文件系统:

    tmpfs /var/lib/sss/db/ tmpfs size=300M,mode=0700,rootcontext=system_u:object_r:sssd_var_lib_t:s0 0 0

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

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

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

    [root@host ~]# systemctl restart sssd

8.4. 为大型 IdM-AD 信任部署在 IdM 服务器和客户端中调整 SSSD 的选项

/etc/sssd/sssd.conf 配置文件中的以下选项。

8.4.1. IdM 服务器的调优选项

ignore_group_members

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

注意

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

默认值

false

推荐的值

true

subdomain_inherit

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

默认值

none

推荐的值

subdomain_inherit = ignore_group_members

8.4.2. IdM 客户端的调优选项

pam_id_timeout

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

默认值

5

推荐的值

the number of seconds a single un-cached login takes

krb5_auth_timeout

增加 krb5_auth_timeout 可以有足够的时间在用户是大量组成员的环境中处理复杂的组信息。红帽建议把这个值设置为一个未缓存的登录所花的秒数。

默认值

6

推荐的值

the number of seconds a single un-cached login takes

ldap_deref_threshold

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

默认值

10

推荐的值

0

8.5. 其它资源