내 상황

내 상황

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_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.

관련 정보