SQL Server故障转移集群

时间:2021-05-16 15:58:02

在XenServer集群上给客户搭建一个应用服务,要求有负载均衡,Web服务器用Windows Server 2008 R2 + IIS,数据库Sql Server 2008 R2,并且使用SAN存储。我设计的逻辑架构如下图:

SQL Server故障转移集群

上面的架构图中包含7个VM,分别是作为转发器的LVS Director和LVS Backup、作为Web服务器装

有Windows Server 2008 R2系统的2个VM、装有Sql Server 2008 R2的2个VM以及作为SQL
Server故障转移集群域控制器

和DNS和ISCSI Target的1个VM。

客户端通过虚拟IP访问Web服务器,请求首先到达LVS Director,LVS Director根据特定的算法将请求转发到2台Web服

务器其中的一台,Web服务器根据具体情况,往SQL Server服务器读或写数据。Web服务器通过虚拟IP访问SQL
Server

服务器,其中接到请求的SQL Server服务器将读取存放在ISCSI Target中的相应数据或往ISCSI Target中写入相应的数

据,而最终数据都存放在SAN存储中。

LVS Director和LVS Backup的功能一样,它们之间通过Heartbeat来探测对方的状态,如果LVS Director出问

题,LVS Backup将接管服务,即LVS Backup将会接收到来自客户端的请求,这样其中一台转发器出现故障不会影响到

负载均衡的功能。同样,后面的Web服务器如果一台出现了故障,LVS会将请求发送到正常的那台Web服务器上。Web

服务器通过虚拟IP访问SQL Server服务器,在Web服务器看来,就像后端只有一台SQL
Server服务器一样,如果其中一

台SQL Server服务器出现故障,另一台SQL Server服务器将接受Web服务器的请求继续服务。这样一来,LVS、Web服

务器、SQL Server服务器均不存在单点故障,只要每一种服务器还有一台能正常工作,服务就不会受影响。注意到了

吧,作为域控制器、DNS、ISCSI Target的服务器只有一台,这里又引入了单点故障,但是这台VM基本上不装什么应

用,一般认为是比较稳定的,不太容易出现问题,这里用一台应该就够了。

我猜可能有童鞋又有疑问了,我们不都是在用SAN存储吗,本来就是共享的,为何要搞个ISCSI Target呢?按本人的理

解,没有一台VM作为ISCSI Target好像还真搞不了这个故障转移集群(如有误请指出)。Windows Server 2008在创建集

群时需要集群的成员有ISCSI共享盘,这些磁盘有作为仲裁磁盘的,也有作为共享数据盘的。我们的SAN存储是挂载

到XenServer上的,这些XenServer之间是共享SAN存储,但是对于XenServer的2个VM来说,它们添加磁盘就是通过你

所熟悉的“add disk”操作来完成,这样一来,他们虽然也是用到了SAN存储,但是两个VM使用了SAN存储的不同部

分的空间,在VM看来它们并没有共享什么存储。现在的做法是通过“add disk”给作为ISCSI Target的VM添加一

个1000G的磁盘,这个1000G空间来自SAN存储,然后在该VM上Microsoft ISCSI Target软件,通过这个软件将这

个1000G的磁盘作为ISCSI目标共享给两台Sql Server服务器,这样两台Sql Server服务器有了共享的ISCSI盘(作为仲裁

盘、数据盘),就可以建立故障转移集群,并且将以后web服务器产生的数据存储在这个1000G的磁盘中。