基础设施
我们有 4 个 Web 服务器 (WEB1-4)。我们在所有这些 Web 服务器上都启用了共享配置,并将其设置为共享网络路径 (\\fs100\Config\Web - Config)。
问题
有时,某个网络服务器会停止从共享配置获取更新。我们可以通过重新启动整个网络服务器来解决这个问题(但我们并不想这么做!)。重新启动后,它会在一段时间内从共享配置获取更新,直到再次崩溃(崩溃前可能需要几小时、几天、几周的时间)。
从现在起,我将那些无法从共享配置获取更新的网络服务器称为故障服务器。那些仍能从共享配置获取更新的网络服务器将被称为正常工作的服务器。
症状 1:
当我们在故障服务器上创建新的应用程序池时,它将无法启动,并且会出现此错误:
对象标识符不代表有效对象。(来自 HRESULT 的异常:0x800710D8)
但是应用程序池将在仍在运行的网络服务器上创建并启动。
症状 2:
当我们发布应用程序的新版本 (2.0) 时,我们会将应用程序的物理路径更改为该版本的位置。无论新版本 (2.0) 是在故障服务器还是在正常运行的服务器上进行了更改,正常运行的服务器都会启动该新版本 (2.0)。故障服务器将启动以前的版本 (1.0)。
物理路径指向正确的路径,我已经检查过了命令行界面并在 IIS 管理器中。停止、重新启动或回收网站/应用程序池都无济于事,它始终会启动以前的版本 (1.0)。如果再次更改物理路径 (2.1),它仍然停留在以前的版本 (1.0)。
我们自己的结论
感觉就像 IIS 正在保存共享配置的本地缓存。由于某些(我们不知道的)原因,IIS 停止从共享配置更新其自己的本地缓存。
我们之前遇到过服务器之间时钟不同步的问题,我们认为可以连接,但它们目前正在同步运行。
我们已经查看过的资源
更新:部分解决方案
我们发现 IIS 将每个应用程序池的配置文件存储在 中C:\inetpub\temp\appPools
。在那里,我们可以找出失败的应用程序池(来自症状 2)并手动编辑物理路径。