如果我们的SQL Server要保证高可用性,那么可以采用故障转移群集。最简单的故障转移群集是两台服务器,一台做活动的服务器,另一台做备用服务器,这就是AP模式的Cluster。另外一个模式就是AA模式,也就是两台服务器都是运行SQL Server实例。
SQL Server不像Oracle一样有RAC,所以不可能说两台服务器同时运行同一个实例,想要两台服务器都使用起来的话,那么只有各自运行一个实例。
那么我们企业里面要做Cluster的时候,到底应该做AP模式的还是做AA模式的呢?
AP模式是在两台服务器上安装一个数据库实例,只有一台服务器负责该数据库实例的全部运算和操作,另外一台服务器闲置。当活动的服务器发生故障时,系统自动启动另一台服务器的实例,实现故障转移。AP模式的最大缺点就是资源利用率低,只有一台服务器在被使用。
AA模式是在两台服务器上安装两个数据库实例,每台服务器分别运行一个数据库实例。当某一台服务器发生故障时系统将把发生故障的服务器上的数据库实例切换到另一台服务器上运行,也就是说另一台服务器上同时运行两个实例,当服务器恢复正常后再手动将一个数据库实例切换回另一台服务器。AA模式保证了两台服务器资源都被利用。
关于1个数据库实例中2个数据库和2个数据库实例中各1个数据库的区别:
1. 1个数据库实例中的2个数据库都必须运行在同一台服务器上,所以如果2个数据库都具有大量的运算占用大量的资源,则可能造成数据库服务器压力过大,运行缓慢;而2个实例中各1个数据库则可以将每个实例部署在不同的服务器上,各自使用各自服务器的资源,相互没有影响。
2. 1个实例中2个数据库的相互访问比较简单,可以对2个数据库进行事务操作;而2个实例中的数据库要相互访问则需要通过链接服务器或者其他方式来访问,如果要在2个实例中进行事务操作则需要启用分布式事务MSDTC,使用分布式事务将会使事务时间变长,事务出现错误的可能更大,甚至出现各种灵异的错误,所以一般不推荐使用分布式事务。
所以,如果我们在有足够资源(也就是很有钱的意思)的情况下,而且想简单一点,那么我们就做AP模式。毕竟AA模式比AP模式更复杂,更难于管理。如果我们想充分利用服务器资源,服务器有限,而且多个数据库之间不存在分布式事务的话,那么用AA模式是一个不错的选择。
以以前的经验来看,最好不要使用分布式事务,会遇到各种各样灵异的问题。