私の状況

私の状況

Openldap(特にバージョン2.4)は、デフォルトでldapデータディレクトリ(so /var/lib/ldap/log.###########)のログファイルにトランザクション履歴を保存します。現在、これらのログファイルは多くのスペースを占有し、自動的に削除されず、無限に大きくなります。古いログを手動で削除すると問題はありませんが、slapd自動的にアーカイブされるログの量を制限したいと思います。

私の状況

私はこれらのトランザクションログが深刻なエラーが発生したときにLDAPを回復するために使用されることを理解しています。私のシナリオでは、LDAPはスクリプトを介して定期的に消去され、入力されます(システムログインアカウントには使用されません)。したがって、回復について心配する必要はなく、エラーが発生した場合はスクリプトを再実行してもかまいません。一方、定期的なLDAP削除/ポップには多数のトランザクションが含まれているため、これらのトランザクションログはすばやく積み重ねられます。

ログの回転

logrotateこれには可能性がありますが、最新のトランザクションログが削除されてもslapd開始されません(回復を実行する必要があると文句を言います)。ログ名に依存することはできないので(slapd小さいログがたくさん保存され、ログファイルの数が増えるにつれて大きくなるため)、これらのログを生成するBerkeley DB設定を使用したいと思います。アクセス/生成日に依存できますが(最も最近の変更日は最新のトランザクションログです)、可能であればまだBerkeleyを使用することをお勧めします。

データベース構成

トランザクションログ設定は、.NETのBerkeley DB設定によって制御されます/var/lib/ldap/DB_CONFIGDB_CONFIGopenldapに含まれる例では、いくつかのトランザクションログ設定を指定しています。

set_lg_regionmax 262144
set_lg_bsize 2097152

Berkeleyの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_bsize10485760 / 5 = 2097152 = set_lg_bsize

これに関する私の説明は、$lg_bsize一度に大量の取引履歴がメモリに保存されることです。この制限を超えると、一部のトランザクション履歴が最新のログファイルにプッシュされ、現在のログが特定のサイズに達すると新しいログが生成されます。

DB_LOG_AUTOREMOVE

Berkeleyの文書によると、DB_LOG_AUTOREMOVEこれはDB_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

実際の問題

slapdBerkeley DBファイル設定を使用してトランザクションログを自動的に削除する方法はDB_CONFIG

答え1

私は答えを見つけましたスタックオーバーフロー- DB_CONFIGを変更した後に実行する必要がありますslapindex

関連情報