IIS7 网络农场 - 本地或共享内容?

Ric*_*ier 5 iis iis-7 network-share dfs web-farm

我们正在设置一个带有两台服务器的 IIS7 Web 场。每个服务器应该有自己的本地内容副本,还是应该直接从 UNC 共享中提取内容?每种方法的优缺点是什么?


我们目前有一个单独的实时服务器 WEB1,其内容本地存储在一个单独的分区上。作业定期将 WEB1 同步到备用服务器 WEB2,使用 robocopy 作为内容,使用 msdeploy 作为配置。如果 WEB1 宕机,Nagios 会通知我们,我们手动运行脚本将 IP 地址移动到 WEB2 的网络接口。两台服务器实际上都是在单独的 VMWare ESX 4 主机上运行的 VM。服务器已加入域。

我们在 WEB1 上有大约 50-60 个实时站点——主要是 ASP.NET,还有一些只是静态 HTML。大多数是低流量的“微型网站”。一些流量适中,但没有一个是巨大的。


我们想改变这一点,以便 WEB1 和 WEB2 都在积极地提供内容。这主要是为了可靠性 - 如果 WEB1 出现故障,我们不想手动干预以进行故障转移。分散负载也不错,但是现在负载还不够高,我们需要它。

我们计划配置我们的防火墙以平衡两台服务器之间的流量。它将检测服务器何时出现故障并将所有流量发送到剩余的实时服务器。我们现在计划使用粘性会话……最终我们可能会转向 SQL Server 会话状态和无状态负载平衡。

但是我们需要一种让服务器共享内容的方法。我们最初计划将所有内容移至 UNC 共享。我们的存储提供商说他们可以为我们设置一个高度可用的 SMB 共享。因此,如果我们走 UNC 路线,存储不应该是单点故障。但我们想知道这种方法的缺点:

  • 我们需要更改每个站点和虚拟目录的物理路径。还有一些项目在其 web.config 文件中具有绝对路径 - 我们也必须更新它们。

  • 我们需要为 Web 服务器创建一个域用户来访问共享,并授予该用户适当的权限。我还没有研究过这个 - 我不确定是否需要将应用程序池标识更改为此用户,或者是否有另一种方法告诉 IIS 在连接到共享时使用此帐户。

  • 如果出现 Active Directory 问题,站点将无法再访问其内容。

  • 总的来说,它看起来要复杂得多,有更多可能会损坏的活动部件。我们的存储提供商会在他们的冗余 SAN 上为我们创建一个卷。如果我理解正确,这个 SAN 卷将安装在运行在其冗余 VMWare 环境中的 VM 上;然后,此 VM 会将 SMB 共享公开给我们的 Web 服务器。


另一方面,共享内容方法的一个好处是我们只需要将代码部署到一个地方,并且内容的多个副本之间永远不会出现暂时的不一致。

这个线程非常有趣,尽管其中一些人的工作规模要大得多。

到目前为止,我只是在讨论内容,但我们还需要考虑配置。我不知道我们是否可以只对 applicationHost.config 和其他文件使用 DFS 复制,或者最好将共享配置功能与 UNC 共享上的配置一起使用。

你怎么认为?

小智 5

您的担忧是有道理的,最终您要么必须评估每项奖励及其继承的风险。

共享内容很棒;但正如您所指出的,您依赖于远程主机,并且集群存储技术并不便宜或简单。这种类型的设置有其一席之地,鉴于您当前的解决方案,我假设您并不是在寻找 99.999% 正常运行时间的解决方案。

您是否考虑过扩展脚本以在同步 Web1 > Web2 的内容期间禁用负载平衡节点(在防火墙处)?

不过,共享配置很棒,如果您的 UNC 共享不可用,它会使用本地缓存副本,并且是确保 Web 应用程序具有正确配置的好方法。

我的2c