我的情景

我的情景

Openldap(特别是版本 2.4)默认将事务历史记录存储在 ldap 数据目录中的日志文件中(so /var/lib/ldap/log.###########)。目前这些日志文件占用大量空间,永远不会自动删除,并且会无限增长。手动删除旧日志效果很好,但我想限制slapd自动保留的日志量。

我的情景

我知道这些事务日志用于在发生灾难性故障时恢复 LDAP。在我的场景中,LDAP 会通过脚本定期擦除和填充(这不用于系统登录帐户)。因此,我不需要担心恢复,如果发生故障,再次运行脚本是可以接受的。另一方面,LDAP 的常规擦除/填充包含大量事务,因此这些事务日志会很快建立起来。

日志旋转

logrotate这里有潜力,但是如果最近的事务日志被删除,那么slapd将无法启动(它会抱怨需要执行恢复)。因为我不能依赖日志名称(因为slapd保留许多小日志,随着日志文件数量的增加而增加),我想使用创建这些日志的 Berkeley DB 设置。我可以依靠访问/创建日期(最近的修改日期是最近的事务日志),但如果可能的话,我仍然更喜欢使用伯克利。

数据库配置

据说事务日志的设置是由 中的 Berkeley DB 设置控制的/var/lib/ldap/DB_CONFIGDB_CONFIGopenldap 附带的示例指定了一些事务日志设置:

set_lg_regionmax 262144
set_lg_bsize 2097152

根据伯克利的 Oracle 文档:

set_lg_regionmax: Set the size of the underlying logging area of the
Berkeley DB environment, in bytes. The log region is used to store 
filenames, and so may need to be increased in size if a large number of 
files will be opened and registered with the specified Berkeley DB 
environment's log manager.

所以这似乎只是设置跟踪事务日志文件的文件的大小。

set_lg_bsize: Set the size of the in-memory log buffer, in bytes. 

这似乎控制了分配给事务缓冲区的 RAM 量。

log.###########ldap 数据目录中的文件都是字节,10485760似乎与set_lg_bsize( 10485760 / 5 = 2097152 = set_lg_bsize) 密切对应,尽管我不确定这是否是巧合。

我对此的解释是,$lg_bsize一次将大量的交易历史记录存储在内存中。当超过此限制时,它将一些事务历史记录推送到最新的日志文件,并在当前日志达到一定大小时创建新日志。

DB_LOG_AUTOREMOVE

根据伯克利文档,可以通过DB_LOG_AUTOREMOVEDB_CONFIG.

DB_LOG_AUTOREMOVE: If set, Berkeley DB will automatically remove log 
files that are no longer needed. 

但是,当我将其添加到DB_CONFIG

set_flags DB_LOG_AUTOREMOVE

并重新启动slapd我没有注意到有什么不同。我删除了旧的事务日志并运行了我拥有的 LDAP 填充脚本,并且能够290MB在事务日志中累积。它似乎仍然根本没有限制日志。其原因可能与这句话有关:that are no longer needed

实际问题

如何slapd使用 Berkeley DB 文件配置自动删除事务日志DB_CONFIG

答案1

我找到了答案堆栈溢出- 您需要slapindex在更改 DB_CONFIG 后运行。

相关内容