负载平衡SQL Server

Aks*_*y J 0 iis-7 nlb sql-server-2008 windows-server-2008

这只是为了提高sql server的性能.

我们有一个Windows Server 2008服务器,其中包含Sql Server 2008 Enterprise Edition的实例.SQL Server的二进制文件,操作系统文件,MDF文件,LDF文件都驻留在单个磁盘上.

过去,我们使用NLB为IIS提供负载平衡.我们有两台Windows Server 2008机器,并且在两台机器上配置了相同的网站,并且有一台单独的机器向网站提供数据.用户将访问虚拟IP地址,并根据每个节点上的当前负载,群集将分流量.

现在我想知道我是否可以尝试相同的负载平衡SQL Server流量.我的计划是:

  1. 在2台不同的计算机上安装2个SQL Server实例.
  2. 将MDF,LDF文件放在共享介质(如SAN,RAID 5)上,这两个实例都可以看到这两个实例,并在这两个实例上附加MDF和LDF.
  3. 从两个节点中创建一个群集,让应用程序访问群集IP地址.

在这种情况下,就像IIS一样,集群会在2个节点之间划分流量,并且由于正在访问单个MDF和LDF,我想不会出现任何同步问题.

我的问题是:

  1. 这实际上会提高SQL服务器的性能吗?
  2. 它会有任何其他影响(我们在代码中使用了很多事务)吗?

Mar*_*urg 6

两个或多个SQL Server实例无法共享相同的MDF/LDF文件.每个SQL服务器都需要独占访问它自己的数据库文件.因此,您无法以这种方式对SQL Server进行负载平衡.

基本上有三种选择来处理这个问题.可能还有更多,但这些是最常用的三种.

选项1:主从

一种选择是在主从属方案中设置多个SQL Server实例.一个数据库服务器是主服务器,它是您写入所有数据和更改的数据库.从设备与主设备同步,您让Web服务器使用从设备进行读取操作.由于大多数网站通常读取的数据多于写入数据,因此有助于提高数据库吞吐量.您必须更改网站的代码才能使其与单独的数据库一起使用以进行读写操作.从站可以位于负载均衡器后面,因此您的代码只需要支持一个写数据库服务器和一个读数据库服务器.读取时,负载平衡器将均匀分布在所有从站上.

选项2:分片

在此方案中,您将数据分布在多个数据库服务器上.一个简单的例子是跨两个数据库服务器分布的用户数据库.具有奇数UserID(例如,1,3,5等)的所有用户存储在数据库服务器1上,并且具有偶数UserID(例如,2,4,6等)的所有用户存储在数据库服务器2上.平均而言,每个数据库服务器占用大约一半的负载.这也可以很好地扩展,因为您可以添加越来越多的数据库服务器,并使用您自己的自定义架构越来越多地分发数据.您的代码必须更改为支持多个数据库服务器,但如果您有一个良好的多层设计,则必须更改一个层以支持此模型.

选项3:不要使用SQL数据库

使用非SQL数据库解决方案.它们在通用名称下变得越来越流行:NoSQL.这意味着'不仅仅是SQL'.这并不意味着你根本不应该使用SQL,但这意味着:不要将它用于所有事情.有许多其他数据库系统比SQL有优势(和缺点),可能是您的问题的解决方案.一篇好文章是博客文章:35+用于选择下一个NoSQL数据库的用例.

您选择哪个选项取决于您的应用程序和数据库模型.您也可以同时使用这两个场景.例如,用户数据库的分片和订单表的主从(在网上商店中).如果您需要事务支持或具有大量连接操作,则在决定采用哪种方案时必须考虑这一点.扩展数据库是一个非常复杂的主题,并没有一个解决方案可以解决所有问题.