我认为您对此有错误的方法,而不是使用热备用,您应该使用负载平衡和集群来提供可用性。
我的建议是在两台服务器上运行 Web 应用程序并使用 IP 负载均衡器在两台服务器之间分配请求。如果其中一个服务器变得不可用,用户请求将不再被路由到该服务器,用户将不会真正注意到发生了中断。您应该尝试在公司基础架构中使用现有的负载均衡器。
如果您有两个以上可用的服务器,我还建议您查看 Windows Server 中包含的一项功能 Windows 网络负载平衡 (NLB),请在http://technet.microsoft.com/en-us/上阅读有关 NLB 的更多信息库/cc725691.aspx。但是由于 NLB 和故障转移集群在同一台服务器上不受支持,因此如果您只有两台服务器,我不建议您这样做。
对于数据库,我建议您使用 2 节点主动-被动数据库集群,而不是部署两个单独的 SQL 实例并在它们之间进行复制。在集群配置中,SQL Server 在单个服务器上运行,但如果该服务器出现问题,SQL Server 会自动切换到另一台服务器。在http://sql.starwindsoftware.com/sql-server-clustering-technology上阅读有关 SQL Server 群集的更多信息。
实施集群解决方案将需要两台服务器之间的某种共享磁盘,因为两台服务器都可以是活动实例,它们必须能够写入相同的磁盘。如果您的组织有可用的 SAN,那么这是共享磁盘的首选。
但是现在后台服务出现了问题。如果它们不能被修改,你只需要想出一些机制来在服务器出现故障时移动它们。如果服务器受到监控,您可以让技术人员启动一个脚本,在另一台服务器上启动服务。手动操作永远不可靠,但如果你不能重写它们,你就没有太多选择。
如果您有两台服务器,我建议:
HW IP Load Balancer
|
-----------------------------
| |
SERVER A SERVER B
ASP.NET web app ASP.NET web app
SQL Server (active) SQL Server (passive)
Bg services (not running) Bg services (running)
我推荐四台服务器:
HW IP LB or Windows NLB
|
-----------------------------
| |
SERVER A SERVER B
ASP.NET web app ASP.NET web app
| |
-----------------------------
|
-----------------------------
| |
SERVER C SERVER D
SQL Server (active) SQL Server (passive)
Bg services (not running) Bg services (running)