假设以下内容:
我在 database.mywebsite.com 上设置了一个数据库,该数据库解析为IP 111.111.1.1 ,从我们网络上的本地DNS服务器运行。
我有无数的ASP,ASP.NET和WinForms应用程序使用 database.mywebsite.com 作为服务器名称的连接字符串,所有这些都是从内部网络运行的。
然后运行数据库的框死了,我切换到IP 222.222.2.2 的新框。
因此,我更新 database.mywebsite.com 的DNS以指向 222.222.2.2 。
运行它们的所有应用程序和计算机是否都缓存了旧的已解析IP地址?
我假设他们会有。
根据“的任何建议,每次切换框时都没有更改IP 不太受欢迎,因为我无法控制这种情况。我们目前正在使用盒子的机器名称,每次死亡时都会更改,所有应用程序等都必须使用新机器名称进行更新。这很疼。
答案 0 :(得分:2)
即使DNS没有在本地缓存到计算机,它也可能会在机器和名称服务器之间的DNS链路上缓存,至少暂时不会。我的理解是这种情况通常会通过IP接管处理,你只需要制作新机器111.111.1.1。
可能是serverfault的问题。
答案 1 :(得分:1)
你正在寻找DNS TTL(生存时间)我想..在我看来,应用程序可能会将IP缓存到最多TTL的值。但是我害怕某些应用程序/技术实际上可能会更长时间地缓存它(我觉得完全错误)
答案 2 :(得分:1)
每台机器都会缓存IP地址。
缓存的时间长度是TTL(生存时间)。这是你的DNS服务器上的一个设置,如果你把它设置得很低,比如说5分钟,那么你就可以显示并且运行起来相当快。有点黑客但它应该有用。
答案 3 :(得分:1)
是的,其他评论是正确的,因为控制它的是主机名database.mywebsite.com的DNS TTL。
如果在切换到辅助地址后主要地址(111.111.1.1)出现故障,您将不得不决定等待的最长时间。较低的设置可以缩短恢复时间,但也会增加DNS服务器的负载和带宽,因为客户端必须重新查询它以更频繁地刷新缓存。
您可以使用cmd提示符中的-d选项查看nslookup,以查看您要查询的DNS服务器的默认TTL时间和剩余TTL时间。
%> nslookup -d google.com
答案 4 :(得分:0)
您应该假设它们已经兑现,原因有两个:前面没有明确提到:
1-许多“现代”版本的OS系列都进行DNS缓存。 2-许多应用程序执行DNS缓存或在实时连接和/或打开新连接时检测到错误/故障。这可能包括您的数据库客户端。
此外,这可能没有很好的记录。我做了一些谷歌搜索,发现这是为MySQL:
它没有清楚地解释它在这方面的行为。
答案 5 :(得分:0)
我在网站上遇到了类似的问题,该网站禁用了应用程序池回收功能,并且连续数周运行。有时,群集SQL Server框会重新启动,出于某种原因,我的SqlConnection没有重新连接。我收到了错误:
与网络相关或特定于实例的 建立一个错误时发生错误 连接到SQL Server。服务器 没找到或无法访问。 验证实例名称是否为 正确和SQL Server是 配置为允许远程 连接。 (提供者:命名管道 提供者,错误:40 - 无法打开 连接到SQL Server)
服务器在那里 - 并且正在运行 - 事实上,如果我只是回收应用程序池,该应用程序将正常工作 - 但我不喜欢回收应用程序池!
连接池中保存的连接以某种方式使用旧的连接信息,这可能是旧的IP地址。这看起来与海报的问题非常相似,它似乎是缓存的DNS信息,因为一旦某种缓存被清除,该应用就可以正常工作。
这就是我解决它的方法 - 通过强制重新创建池中的所有连接:
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
代码示例只是简单的基础 - 它应该根据您的情况进行调整!
答案 6 :(得分:0)
DNS被缓存,但对于任何解析到错误IP地址的服务器,您可以更新服务器的HOSTS文件,并且应立即更新IP。如果您访问数据库服务器的服务器数量有限,这可能是一种解决方案。