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_CONFIG
。DB_CONFIG
openldapに含まれる例では、いくつかのトランザクションログ設定を指定しています。
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_bsize
10485760 / 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
実際の問題
slapd
Berkeley DBファイル設定を使用してトランザクションログを自動的に削除する方法はDB_CONFIG
?
答え1
私は答えを見つけましたスタックオーバーフロー- DB_CONFIGを変更した後に実行する必要がありますslapindex
。