Pergunta

Suponha o seguinte:

Eu tenho um banco de dados configurado no database.mywebsite.com , que resolve para o IP 111.111.1.1 , correndo de um servidor DNS local em nossa rede.

Eu tenho inúmeras aplicações ASP, ASP.NET e WinForms que usam uma seqüência de conexão utilizando database.mywebsite.com como o nome do servidor, todos rodando a partir da rede interna.

Em seguida, a caixa de executar as matrizes do banco de dados, e eu mudar para uma nova caixa com um IP de 222.222.2.2 .

Então, eu atualizar o DNS para database.mywebsite.com para apontar para 222.222.2.2 .

Será que todas as aplicações e computadores que executam eles têm em cache o endereço IP resolvido velho?

Estou assumindo que eles terão.

Todas as sugestões ao longo das linhas de "Não tem alterar o seu IP cada vez que ligar a caixa" não são muito bem-vindos, eu não posso controlar este aspecto da situação, infelizmente. No momento, estamos usando o nome da máquina do caixa, que muda a cada vez que morre e todos os aplicativos etc. tem que ser atualizado com o novo nome da máquina. Dói.

Foi útil?

Solução

Mesmo se o DNS não está em cache local para a máquina, ele provavelmente vai ser armazenada em cache em algum lugar ao longo da cadeia DNS entre a máquina e os servidores de nome, pelo menos por um tempo curto. O meu entendimento é esta situação normalmente ser tratado com aquisição IP onde você acabou de fazer a nova máquina 111.111.1.1.

Provavelmente uma pergunta para serverfault.

Outras dicas

Você está procurando DNS TTL (Time To Live) Eu acho que .. Em minhas aplicações de opinião pode armazenar em cache os IP para, no máximo, o valor do TTL. Receio, porém, que algumas aplicações / tecnologias pode realmente cache-lo mais longo (agian na minha opinião completamente errado)

Cada máquina irá armazenar em cache o endereço IP.

A duração do tempo que é armazenado em cache é o TTL (Time To Live). Esta é uma configuração em seu servidor DNS, se você defini-la muito baixa dizer 5 minutos, então você mostrar ser instalado e funcionando razoavelmente quikly. Um pouco de um truque, mas ele deve funcionar.

Sim, os outros comentários são correto em que o que controla este é o conjunto de TTL de DNS para o nome do host database.mywebsite.com.

Você terá que decidir qual é a quantidade máxima de tempo que você está disposto a esperar para se você tem uma falha em seu endereço principal (111.111.1.1) depois de fazer a mudança para o endereço secundário. Configurações mais baixas irá dar-lhe um tempo mais rápido de recuperação, mas também irá aumentar a carga e largura de banda para o servidor DNS porque os clientes terão de re consulta-lo para atualizar seu cache mais vezes.

Você pode usar nslookup usando a opção -d do seu prompt cmd para ver o que seus tempos de TTL padrão e remanescentes vezes TTL são para o servidor DNS que você está consultando.

%> nslookup -d google.com

Você deve assumir que eles são trocados por duas razões não claramente mencionado antes:

1- Muitas versões "modernas" de famílias OS fazer o cache de DNS. 2- Muitas aplicações fazer cache DNS ou têm detecção de erros / falhas pobre em conexões ao vivo e / ou abertura de novas conexões. Isso, possivelmente, incluir o seu cliente de banco de dados.

Além disso, este é provavelmente não é bem documentada. Fiz algumas googling, e encontrei este para o MySQL:

http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connecting-connection-string.html#connector-net-programming-connecting-errors

Ele não explica claramente o seu comportamento nesse sentido.

Eu tive um problema semelhante com um web site que desativa o pool de aplicativos reciclagem de recursos e executado por semanas a fio. Às vezes, uma caixa de SQL Server em cluster iria reiniciar e por algum motivo, meu SqlConnection de não voltar a ligar. Eu estava recebendo o erro:

específica instância-

A relacionadas com a rede ou Ocorreu um erro ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não era acessível. Verifique se o nome da instância é corrigir e que o SQL Server é configurado para permitir remoto conexões. (provedor: Named Pipes Provider, erro: 40 - Não foi possível abrir um conexão com o SQL Server)

O servidor estava lá - e correr - na verdade, se eu apenas reciclado da piscina aplicativo, o aplicativo iria funcionar bem! - mas eu não gosto de reciclagem de pools de aplicativos

As conexões que estavam sendo realizadas no pool de conexão foram de alguma forma usando informações de conexão de idade, e que poderia ter sido endereços IP antigos. Isto é o que parece tão semelhante à pergunta do cartaz, que parece ser armazenado em cache informações de DNS, porque assim que algum tipo de cache é limpo, o aplicativo funciona bem.

Isto é como eu resolver isso - ao forçar todas as conexões na piscina para ser recriada:

Try
    ' Example: SqlDependency, but this could also be any SqlConnection.Open call
    Dim result As Boolean = SqlClient.SqlDependency.Start(ConnStr)
Catch sqlex As SqlClient.SqlException
    SqlClient.SqlConnection.ClearAllPools()
End Try

O exemplo de código é apenas o cozido-down básico - que deve ser mexido para sua situação

O DNS fica armazenada em cache, mas para qualquer servidor que resolve para o endereço IP errado, você pode atualizar o arquivo HOSTS do servidor eo ip deve ser atualizado imediatamente. Esta poderia ser uma solução se você tem uma quantidade limitada de servidores que acessam o servidor de banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top