我在 IIS 上部署了一个 WCF 服务,并使用 SQL Server 2008 作为后端。
我的问题是:如何在 IIS 和 SQL Server 上创建集群(负载平衡/故障转移),以及在执行此操作之前需要注意什么?(例如,我是否必须将会话从内存移动到 SQL 服务器等)
另外,我如何确保两个 SQL 服务器始终都有镜像数据,以及两个 SQL 服务器是否实时共享锁(行、页、表)信息?
这是我第一次做这种事。这叫网络农业吗?
答案1
我猜 IIS 和 SQL 位于不同的服务器上:
IIS:您可以使用 Microsoft NLB 功能在 2 个或更多服务器之间分散负载。它们可以是 Windows 的 Web 版本。它包含在 Windows 中。您将拥有客户端将连接到的虚拟 IP。服务器将“共享”此 IP 并将客户端分散到不同的服务器。多播/单播取决于网络、网卡数量和服务器内通信。NLB 不了解应用程序,如果您关闭 IIS,如果您有亲和力,用户将会丢失。如果从 IP 的角度来看服务器已关闭,NLB 只会删除它。您必须在 IIS 元数据库(负载均衡器功能)中进行更改,如下所述: http://technet.microsoft.com/en-us/library/cc757659(WS.10).aspx 从许可证的角度来看,它包含在 Windows 中,无需更多费用。
从 WCF 的角度来看:客户端将连接到 X Web 服务器之一。当此服务器工作时,您可以在同一台服务器上维护它们(通过关联)。关联基于客户端 IP 和虚拟 IP 之间的哈希值。如果服务器发生故障,客户端将被分派到其他服务器。如果您使用 http 会话/身份验证,则必须将会话存储在服务器之外,例如在数据库中。否则,当服务器发生故障时,客户端会话将丢失。
SQL:您有不同的选择:使用 SQL 机制复制数据库,或使用 Microsoft MSCS(集群)。最后一个意味着 Windows 企业版和外部共享存储,这意味着高成本(但仍然是 SQL 标准版)。使用 SQL 纯层,您可以镜像数据库。每台服务器都有一个本地存储,主服务器动态发送事务到备用服务器(同步或异步)。当您的 Web 服务器连接时,服务器会通过 SQL 本机客户端和/或 ADO.Net 告诉他,如果出现问题,备用服务器可用。因此,如果出现问题,您的 Web 服务器会自动切换到备用服务器。所有这些都适用于标准 SQL 版本。数据库需要处于完全恢复模式。它是每个数据库的,所以如果您的 WCF 使用多个数据库,并且只有一个坏了,那么您就会遇到问题,因为一个数据库现在在备用服务器上处于活动状态,但所有其他数据库仍在主服务器上。
更多信息请点击这里: http://technet.microsoft.com/en-us/library/cc917680.aspx
答案2
我有 6 台服务器 iis,并且还获得了 WCF 服务。
我使用 ARR(应用程序请求路由),它是 IIS 模块扩展,用于将请求路由到我的 Web 场。它运行得很好。
我也像 Mathieu tell 一样将 NLB 用于我的 WCF 服务。
对于我的 SQL 服务器,我使用 Hyper-V,为我的 SQL 服务器配备两个 VM,带有 SQL 群集和 Windows 故障转移群集和实时迁移。
我会用法语回答,所以如果有人可以翻译我将不胜感激。
您所要做的就是访问集群服务器。该服务器将在两个 SQL 服务器之间保持“心跳”。两个 SQL 服务器位于不同的机器上,但是它们共享相同的网络部分(SAN、NAS 或其他)。每次打开一个菜单,内容就自动出现。当“心跳”中断时,其他服务器会释放内存,并在几秒钟内耗尽基础数据,而您的服务则恢复正常,这就是“故障转移集群”。当服务器传输过程开始时,您可能会丢失一些 ping。这将断开您与数据库的所有当前连接。只有当您的“UP”达到 99% 时,才能添加实时迁移。您需要两台 Hyper-V 服务器(主机)来连接您的两台 SQL 服务器(位于另一台主机上),您需要在两台虚拟机之间进行实时迁移,否则您需要迁移到一台主机(托管 SQL 的服务器),您可以将主机上的 SQL 机器实时迁移至其他机器。记忆会将边缘转移到另一侧,并且您不会失去连接。您的故障转移功能始终有效,如果您的计算机是控制本地 SQL 服务的虚拟计算机,或者其他阻止您恢复的计算机,则可能会丢失一些 ping,但您的服务会非常快速地恢复。
我知道这会帮助你,但我会用法语,但用英语我肯定会失败。
答案3
是的,集群 Web 服务器通常被称为 Web 场(请注意,该术语没有与之关联的任何 SQL 数据库,只有 Web 服务器)。
人们通常会在网络服务器前面使用负载平衡器。