【问题标题】:Gotchas: Upgrading from single servers to web farms陷阱:从单一服务器升级到网络场
【发布时间】:2008-11-22 18:13:25
【问题描述】:

我们公司目前运行两台 Windows 2003 服务器(一台 Web 服务器和一台 MSSQL 8 数据库服务器)。我们计划在网络场设置中添加另外几台服务器以实现冗余/可用性目的。我们的网站主要是 ASP.NET,我们确实有一些 PHP 网站,但这些网站主要是静态的,没有 DB。

经历过这个过程的人是否有任何我应该注意的问题或其他要点?在这种情况下,使用 Windows Server 2008 是否会提供任何额外的优势(所以我可以说服我的老板升级:)?

谢谢。

【问题讨论】:

    标签: asp.net windows-server-2003 web-farm


    【解决方案1】:

    如果您有动态负载平衡(即我的第一个请求发送到服务器 X,但我的下一个请求可能发送到服务器 Y 或 Z),您会发现 In-Proc Sessions 不起作用。因此,您将需要粘性会话(您的负载均衡器将始终将我(=我的会话)发送到服务器 X)或进程外会话(即存储在 SQL Server 中)。

    【讨论】:

      【解决方案2】:

      就像迈克尔说的那样,您需要照顾好您的会话。理想情况下,使其精益并存储在流程之外。根据您使用缓存的方式,您将面临类似的缓存挑战,并且如果您只使用 asp 缓存,您可能有兴趣寻找更强大的缓存技术。

      不要忘记 web.config 中的机器密钥和验证等内容。 machineKeys 需要在您的服务器中保持一致。

      阅读 IIS7,你应该能够挑选出几个很好的例子来向你的老板炫耀。

      网络农场可以为您带来不容忽视的部署机遇和挑战。

      没有对上述设置的具体经验,但对这种一般动作没有经验。我建议分阶段采用这种方法。也就是说,先迁移到 Windows 2008,然后再进行农场。

      【讨论】:

      • 机器键+1。当它们不相等时,这是难以调试和非常微妙的错误的可靠来源。
      【解决方案3】:

      另外需要注意的是您的部署计划。可悲的是,部署计划似乎被忽视和/或低估了。请记住,您要部署到多个节点,并且要考虑如何以合乎逻辑的方式进行部署和测试。

      例如,假设您的场中有四个节点。您是否将两个从集群中拉出并更新和测试,然后换出另外两个重复?确定您当前的部署过程是否符合您提供的答案。仅仅因为您拥有 X 倍的服务器数量并不意味着您想要或需要做 X 倍的工作量。

      暂时回顾一下对话的缓存部分。您绝对应该看看分布式缓存解决方案。如果您正在预缓存数据并使用带有缓存删除的回调,如果您不小心,您真的可以对数据库造成冲击。此外,许多分布式缓存解决方案也提供了某种程度的会话状态管理。我一直非常喜欢 Microsoft 的 Velocity 项目,尽管它只是第二个 CTP 版本,还没有准备好投入生产。

      【讨论】:

        【解决方案4】:

        除了其他人所说的之外,您可能还想考虑研究 Richard Campbell 的(属于 .NET Rocks!)产品:

        http://www.strangeloopnetworks.com/

        【讨论】:

        • 我们已经评估了该设备并给我们留下了深刻的印象。 Richard 不仅有一个站点应用程序设备,还有一个 Web 服务设备。可能在下一次预算审查中,我们将至少推进他们的一项产品。
        【解决方案5】:

        我们使用 ASP.NET 状态服务器来处理会话。这是 Windows Server 2003/2008 中免费提供的。

        然后我们必须确保机器密钥相同(您的 web.config 文件中的设置)。

        然后我手动使每个站点脱机(使用 app.offline 或任何调用的魔术文件)。或者,您可以使用 IIS 并关闭站点并“打开”离线站点。

        就是这样。您可能会担心分布式缓存,但这是非常核心的东西。您可以从使用 ASP.NET 的默认输出缓存中获得很多好处。如果您要进行分布式缓存,我会从那里开始,然后再深入研究复杂性(以及某些产品的成本)。

        哦,我们使用的是 F5 负载平衡器,它不会执行粘性会话,因此我们需要维护我们的会话......这就是我们使用 ASP.NET 状态服务器的原因。

        【讨论】:

          【解决方案6】:

          除了其他发帖人描述的 Session 问题之外,另一个问题是应用程序是否正在写入本地文件系统。如果应用程序假定文件位于本地 PC 上,则扩展到网络场会破坏应用程序。例如,上传的文件可能可用或不可用,具体取决于命中的服务器。将路径更改为指向共享驱动器应该可以解决此问题。

          【讨论】:

            猜你喜欢
            • 2012-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-08
            • 1970-01-01
            • 2014-10-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多