15.18. 修剪 Replication Changelog

Directory Server changelog 维护一个接收和处理的更改列表。它包括从复制合作伙伴收到的客户端更改和更改。
默认情况下,Directory 服务器会修剪 7 天以上的 changelog 条目。但是,您可以修改它并配置:
  • nsslapd-changelogmaxage 参数中更改日志中的最大年龄。
  • nsslapd-changelogmaxentries 参数中更改日志中的记录总数。
如果您至少启用了这些设置之一,Directory 服务器默认每 5 分钟修剪更改日志(nsslapd-changelogtrim-interval)。
之后创建的所有记录和记录都会保留在更改日志中,直到拓扑中的所有服务器上成功复制为止。如果您必须从拓扑中删除供应商,如 第 15.10.2 节 “从复制拓扑中删除叶” 所述,那么目录服务器会从其它服务器上的 changelogs 中修剪此供应商的所有更新。

15.18.1. 配置复制更改

默认情况下,Directory 服务器会修剪 7 天以上的 changelog 条目。但是,您可以配置目录服务器可以删除条目的时间。您还可以将 Directory 服务器配置为在条目数量超过配置的值时自动删除条目。
注意
红帽建议设置最长期限而不是最大条目数。最长期限应与 cn=replica,cn=suffixDN,cn=mapping tree,cn=config 条目中的 nsDS5ReplicaPurgeDelay 参数中设置的复制清除延迟匹配。
在供应商中执行此步骤:
  1. 配置更改日志修剪:
    • 要设置 changelog 条目的最大年龄,请输入:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --max-age "4w"
      此命令将最长期限设置为 4 周。参数支持以下单元:
      • s (S)
      • M (S) 分钟
      • H (H) (小时)
      • d (D) 表示天
      • W (W)
    • 要设置最大条目数,请输入:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --max-entries "100000"
      此命令将 changelog 中条目的最大数量设置为 100,000。
  2. 默认情况下,Directory 服务器每 5 分钟(300 秒)修剪更改日志。要设置不同的间隔,请输入:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --trim-interval 600
    此命令将间隔设置为 10 分钟(600 秒)。

15.18.2. 手动缩小大型更改日志的大小

在某些情况下,比如没有启用复制更改日志修剪,更改日志可能会增长到较大的大小。要解决这个问题,您可以手动减少 changelog 大小。
在供应商上执行此流程。

先决条件

已启用复制。

流程

  1. 可选:显示 changelog 的大小:
    # ls -lh /var/lib/dirsrv/slapd-instance_name/changelogdb/
    total 159M
    rw------. 1 dirsrv dirsrv 159M  Nov 21 04:01 a1cf5703-697a11ed-896ed7a0-04f329b5_637b3daf000000010000.db
    rw------. 1 dirsrv dirsrv 30 Nov 21 03:58 DBVERSION
    
    本例显示 /var/lib/dirsrv/slapd-instance_name/changelogdb/ 目录仅包含 159M 的 changelog 文件。
  2. 要在缩小 changelog 大小后重置参数,请显示并记录对应参数的当前值:
    # dsconf instance_name replication get-changelog
    dn: cn=changelog5,cn=config
    cn: changelog5
    nsslapd-changelogdir: /var/lib/dirsrv/slapd-instance_name/changelogdb/
    nsslapd-changelogmaxage: 7d
    nsslapd-changelogtrim-interval: 300
    objectClass: top
    objectClass: nsChangelogConfig
    
    如果在输出中没有看到任何特定属性,Directory 服务器将使用它们的默认值。
  3. 临时减少与修剪相关的参数:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --max-age "300s" --max-entries 500 --trim-interval 60
    重要
    出于性能原因,请不要永久使用较短的间隔设置。
  4. 等待 --trim-interval 参数中设置的时间过期。
  5. 紧凑更改日志以重新拥有磁盘空间:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend compact-db --only-changelog
  6. 在临时减少它们前,将 changelog 参数重置为它们的值:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --max-age "7d" --max-entries 0 --trim-interval 300

验证

  • 显示 changelog 的大小:
    # ls -lh /var/lib/dirsrv/slapd-instance_name/changelogdb/
    
    total 14M
    rw------. 1 dirsrv dirsrv 14M Nov 21 05:08 a1cf5703-697a11ed-896ed7a0-04f329b5_637b3daf000000010000.db
    rw------. 1 dirsrv dirsrv 30 Nov 21 05:01 DBVERSION