Por que um servidor linux deve ser reinicializado para manipular corretamente uma mudança no resolv.conf?

8

Eu sei que isso tem que ser apenas uma falta de compreensão, mas aqui está o problema.

Nós recentemente mudamos os servidores DNS de 192.168.1.1 para .2, então eu fui em todos os 8 servidores my linux e alterei o /etc/resolv.conf para refletir a mudança. Note que eles são todos estáticos, não há DHCP envolvido.

Depois de fazer a alteração, posso testar imediatamente os resultados usando nslookup e dig, e tudo parece bem. Eu fiz uma reinicialização do /etc/init.d/networking - para reiniciar o subsistema de rede - e reiniciei o apache e o postfix em cada um dos servidores, só para ter certeza.

Alguns dias depois, recebo um relatório informando que nossos sites não estão enviando mais e-mails. Examinando os logs, descobri que o processo mod_php não conseguiu resolver as entradas do DNS para enviar mensagens. Depois de bater na minha cabeça por cerca de 30 minutos, reiniciei o servidor e tudo voltou ao normal.

No dia seguinte em um servidor diferente (usando o CentOS em vez do nosso Ubuntu normal), recebo um relatório informando que os e-mails não estão passando, e com certeza observando os logs indica que o Postfix não pode resolver nomes. Reinicializou e quase instantaneamente entrega todos os emails enfileirados.

Então, o que estou perdendo aqui? Que parte deste processo eu não entendi corretamente?

    
por Gray 31.08.2009 / 22:37

4 respostas

11

Você provavelmente foi mordido pelo nscd: link

Felicidades

    
por 31.08.2009 / 22:44
8

A maioria dos aplicativos inicializa o resolvedor uma vez, na inicialização (com res_init ), e nunca o faz novamente depois. Não é um problema para aplicativos de vida curta, como o ping, mas mais sério para daemons de longa duração.

O processo do Apache (que roda mod_php) provavelmente estava nesse caso. Reiniciar o Apache seria suficiente.

    
por 01.09.2009 / 10:00
3

O resolv.conf direciona os resolvedores para onde procurar nomes. Na maioria dos casos, este será o resolvedor libc, mas pode haver outros casos, como o vPostMaster, que usa a biblioteca de resolução de DNS do Python para pesquisas de SPF.

Então, PODERIA ser que o resolvedor esteja armazenando em cache as informações de resolv.conf para processos de execução longa, mas soou como se você reiniciasse o postfix, o que deveria ter causado a inicialização arquivo .conf.

Verifique seu /etc/nsswitch.conf para ver se ele especifica alguma coisa especial acontecendo para "hosts". Por exemplo, a linha padrão do Fedora 11 no meu laptop é:

hosts: arquivos mdns4_minimal [NOTFOUND = return] dns

Então, neste caso, ele usa mdns, assim como / etc / hosts e DNS. Nesse caso, se as alterações do DNS não estivessem sendo selecionadas, eu me perguntaria se eram os mdns que estavam causando isso.

Sean

    
por 31.08.2009 / 22:58
1

Provavelmente algum armazenamento em cache está acontecendo. Nós tivemos um problema semelhante com sendmail e apenas reiniciando o serviço.

Às vezes, é mais fácil reinicializar o servidor e limpar todos esses caches em qualquer parte do sistema do que gastar todo esse tempo identificando qual serviço está sendo armazenado em cache por muito tempo. Por outro lado, pode ser um investimento quando acontecer de novo e você sabe qual serviço reiniciar.

    
por 31.08.2009 / 22:42