我们有一个 VPS(Windows 2008 R2+IIS7.5),带有一个 asp.net mvc 3 应用程序。
主要问题是:当 Windows 需要重新启动时如何处理问题?(安装 Windows 更新或其他任何操作后)。目标是让网站 24/7 全天候运行,但首先可以向用户显示一条消息。(我们很快就会回来,类似于 app_offline.htm)
我们的应用程序使用 SQL,并且还写入/读取一些未存储在 SQL 中的文件(上传的照片、文档)。
你有什么建议吗?
- 使用 ARR 进行负载平衡?(使用 1+2 台服务器,但是如果前端服务器需要重新启动怎么办?)
- Windows 故障转移群集?
- SQL 故障转移群集?
- 如何处理已上传的文件?
我真的不知道什么是最好的(也是最简单的)解决方案。
答案1
一般来说,要实现高可用性,您需要拥有多台服务器。通常,您需要在负载平衡设置后面有 2 台或更多台服务器,以便在发生中断或维护时将负载分配到另一台服务器。
显然,SQL 和文件存储需要位于不同的后端服务器或集群上。最简单的 HA 设置如下:
A Load Balancer (Possibly redundant)
|
Two Web Servers
| | |
| Clustered SQL Server (Unless a single point of failure is ok)
|
File Servers using DFS-R (Unless a single point of failure is ok)
答案2
haproxy
我们的 Web 服务器前面有一个负载均衡器。我们有一个关闭脚本,它会向 haproxy 实例发送命令,将服务器从池中移出(它有点糟糕,因为它使用 .net SSH 客户端登录到 haproxy 机器并运行命令管道socat stdio /etc/haproxy/haproxysock
- 但它有效)。当服务器重新上线时,它会运行另一个命令将服务器放回池中。
这意味着最终用户永远不知道服务器何时启动或关闭,因为总会有第二个 Web 服务器来弥补不足。
如果我们真的遇到灾难性故障,如果池为空或者每个服务器都发生故障,我们会向 haproxy 服务器发送自定义消息“哎呀,我们很快就会回来”。
至于设备的其余部分,我遵从布伦特的回答。DFS-R 非常棒(并且也适用于异地故障转移)。我们不做 SQL 群集,但我们做 SQL 镜像,它几乎同样好。
答案3
如果资源不是问题,并且您的目标是尽可能接近正常运行时间五个 9 / 高可用性 (HA)同时仍能重新启动。我建议使用服务器虚拟化解决方案,包括主机之间的共享存储。在下面的图中,我使用 iSCSI 和 VMware 以及存储网络。网络使用热备用路由器协议 (HSRP)(由 Cisco 专有,但还有其他协议)。在此配置中以及对于您的情况,VMotion 是可选的。SRDF 和其他数据复制/群集允许在所有级别实现完全冗余。该图过于简单,没有说明 LUN 或考虑是否有 FC 结构而不是 iSCSI。
此外,从经验来看,许多数据中心在技术上投入了大量的时间和资源,但却忽视了正确的电力分配。电力很容易毁掉一天的工作。考虑冗余电源、PDU、面板和商用电源的对称性。UPS 也至关重要。
答案4
我认为最简单的解决方案是看看 Azure,它不仅可以让您专注于开发,而且正常运行时间很长(当它停机时他们会给您补偿)。 SQL 不在同一台服务器上,您可以将上传的文件存储在 blob 存储中。
也许这不是你想要的路线,但我已经使用它大约一年半了,并且非常满意:)
哦,如果您有 MSDN 订阅、Bizspark 或网站 spark,它几乎是免费的(当然取决于您网站的流量)。