Corrupcão do backend bdb do LDAP

Estava eu, feliz e contente usando meu servidor LDAP quando descobri que vários usuários não tinham o / no final do caminho até seu maildir. O courier-mta não se importava com isso e entregava naturalmente as mensagens nos maildirs, o postfix se importa, ele usa o / no final do path para decidir se deve entregar em mailbox ou maildir, resultado, após a migracão 2800 dos meus usuários não estavam recebendo e-mails.

Como havia colocado o postfix para fazer soft_bounce - ou seja, manter as mensagens no spool para nova tentativa de entrega, mesmo as que dariam erro fatal - isso não seria um problema, bastaria corrigir os 2800 usuários e na próxima execucão da fila as mensagens chegariam. (até o momento apenas 1% desses usuários tinham sofrido com o problema, a maioria ainda nem tinha se dado conta)

Fiz então um dump do ldap para um ldif e com um pouco de perl montei um arquivo ldif contendo todas as instrucões para modificar os 2800 usuários... eis que, 500 usuários depois o sistema para de responder. tento novamente, retirando os usuários que tinham sido modificados com sucesso do arquivo e nada... uso o slapcat para fazer um novo dump e ver se havia algum estrago... nada, fazia o dump de alguns usuários e travava. Buscas variavam de muito lentas a eternas... o backend bdb havia sido corrompido.

Pesquisando na internet descobri que o backend bdb, apesar de muito mais consistente (HAH!) e eficiente, permitindo alteracões em paralelo (ldbm usa lock global e as operacões são serializadas) precisa ser muito bem afinado para se obter o máximo de integridade. Como meu volume no LDAP é essencialmente consultas, não havia grande vantagem em migrar para BDB, então decidi recriar minha base em LDBM e depois estudar o caso do BDB com calma e descobrir o que aconteceu. Recriado em LDBM, apliquei o mesmo arquivo de modificacões e tudo transcorreu perfeitamene.

Fica aqui o recado, se alguém quiser usar bdb, estudem bem os manuais do backend, e sempre facam um backup com slapcat antes de aplicar modificacões em massa a uma base ldap, se algo der errado pode ser muito difícil voltar atrás se você não tiver um backup textual íntegro e atual. E eu não falo de corrupcão de banco, porque isso foi a excecão, a regra geralmente é orelhada mesmo. Proteja-se de suas orelhas, sempre.

  3 comments for “Corrupcão do backend bdb do LDAP

  1. 04/01/2006 at 20:16

    Boa dica Maçan!
    Eu estou em um novo trabalho e migrando todos os usuários (cerca de 3.000 contas) também para LDAP, usando também postfix, proftpd, samba e os sistemas internos (php, java, outros...).
    Mas voltando ao assunto, estamos vira e mexe fazendo mudanças em massa usando um sistema paralelo para testes -- o que recomendo também junto com o backup.
    Abraços.

  2. 05/04/2007 at 11:00

    Boa! Já metive problemas com corrompimentos constantes de BDB (seguro???), após passar a utilizar ldbm cessaram os corrompimentos de bases de clientes.

    Why Linux? Because a like it!

  3. 20/04/2007 at 13:35

    Gostei muito do seu artigo e gostaria de saber se você sabe quais são esses ajustes ao BDB para que não corrompa constantemente, ou ainda, como você poderia migrar para o LDBM?
    Abraços

Comente de volta!