正在考虑为 IIS 上的 Windows 托管网站实现负载平衡,但想知道这样做涉及的问题。网站是 ASP.NET - 混合了自定义身份验证和 ASP.NET 身份验证。例如:
- 文件:存储在网络共享上是显而易见的选择,但我预计它会对文件服务器提出大量要求,使网站变慢,并可能导致“已达到网络 BIOS 命令限制”问题,或速度变慢其他数据流量
- session 状态:最好存储在 SQL 数据库中,以防止响应来自不同服务器时出现问题?这该怎么做?我认为是 web.config 设置?
- 服务器停机时间:当服务器停机(崩溃、硬件故障等)或更新时,网站是否还能正常运行?
- DNS:因为它是负载平衡的,我假设站点需要两个 IP 地址?使用 Microsoft DNS
关于文件,它们是否可以轻松地在服务器之间同步?最多可能有 8MB 的文件(有时更大)。 DFS 是 future 可能考虑的一个选项,但是否有其他技术(除了 robocopy)可以使用?
最佳答案
文件:指向网络共享解决了一些问题并引入了其他问题,例如单点故障。对文件共享进行集群可以稍微缓解这种情况,但您仍然只有一份数据副本。我更喜欢无共享方法,其中内容对于每个网络服务器都是本地的,从而消除了 SPOF 并在提供内容时将网络从等式中移除。我目前正在使用 robocopy 来执行此操作,而不是 DFS - 不喜欢 AD 绑定(bind),对分区网络基础结构中服务器放置的限制。 Robocopy 也不理想。
session 状态 - 同意,ASPState SQL 数据库。不过,在我考虑这个问题时,请确保在 web.config 中为所有服务器设置一个通用的机器 key 。
放下<sessionState
allowCustomSqlDatabase="true"
cookieName="yourcookiname"
mode="SQLServer"
cookieless="false"
sqlConnectionString="connnstringname"
sqlCommandTimeout="10"
timeout="30"/>
和
<connectionStrings>
<add name="connstringname" connectionString="Data Source=sqlservername;Initial Catalog=DTLAspState;Persist Security Info=True;User ID=userid;Password=password" providerName="System.Data.SqlClient"/>
</connectionStrings>
进入 web.config。 最后,运行 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -S sqlservername -E -ssadd -sstype p
- 服务器停机 - 当单个服务器停机时,网站仍可正常运行。当然,这取决于您的网络服务器 - 确保它没有使用“ping”作为唯一指标来确定它是否应该向该网络服务器发送请求。
- DNS - 单项。遗憾的是 HTTP 不支持 SRV 记录。
关于iis - IIS 7 上的负载均衡网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777921/