2012-11-18 230 views
0

这只是一个尝试来提高sql server的性能。负载均衡SQL Server

我们拥有一台装有Sql Server 2008企业版实例的Windows Server 2008服务器。 SQL Server的二进制文件,OS文件,MDF文件,LDF文件全部驻留在单个磁盘上。

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

现在我想知道如果我可以尝试进行负载均衡的SQL Server traffic.What我的计划是一样的:

  1. 在2台独立的机器上安装SQL服务器的2实例。
  2. 将MDF,LDF文件放置在共享介质(例如SAN,RAID 5)上,这两个实例都可见,其中 对这两个实例都可见,并且将这两个实例的MDF和LDF连接到 。
  3. 从两个节点中创建一个群集,并让应用程序访问群集IP地址 。

在这种情况下,正如IIS,群集将划分2个节点之间,并由于单个MDF的流量和被访问LDF,我想有不会是任何同步问题。

我的问题是:

  1. 将这个实际上提高SQL服务器的服务表现?
  2. 请问它有什么其他含义(我们在 的代码中使用了很多交易)?

回答

5

两个或多个SQL Server实例不能共享相同的MDF/LDF文件。每个SQL服务器都需要独占访问它自己的数据库文件。所以你不能用这种方式来平衡SQL服务器。

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

选项1:主从

一种选择是建立多个SQL Server实例的主从场景。一个数据库服务器是主数据库,并且这是您写入所有数据和更改的数据库。从服务器与主服务器同步,并让Web服务器使用从服务器进行读操作。由于大多数网站通常读取的数据比写入数据多,这有助于提高数据库吞吐量。您必须更改网站的代码才能使其与单独的数据库一起工作以进行读取和写入操作。从站可位于负载均衡器后面,因此您的代码只需要支持一个写入数据库服务器和一个读取数据库服务器。读取时,负载均衡器将均匀分配所有从站的负载。

选项2:分片

在这种情况下,你分配在多个数据库服务器上的数据。一个简单的例子是跨两个数据库服务器分布的用户数据库。具有奇数用户ID(例如1,3,5等)的所有用户都存储在数据库服务器1上,并且具有偶数用户ID(例如2,4,6等)的所有用户都存储在数据库服务器2上。这具有平均而言,每个数据库服务器的优势大约需要一半的负载。这也可以很好地扩展,因为您可以添加越来越多的数据库服务器,并使用您自己的自定义模式分配越来越多的数据。您的代码必须更改为支持多个数据库服务器,但是如果您有良好的多层设计,则必须更改一个层以支持此模型。

方案3:请不要使用SQL数据库

使用非SQL数据库解决方案。这些在commong名下变得越来越流行:NoSQL。这意味着'不仅仅是SQL'。这并不意味着你根本不应该使用SQL,但它意味着:不要将它用于一切。还有很多其他数据库系统比SQL有优点(和缺点),这可能是解决您的问题的方案。好的阅读是博客文章:35+ Use Cases for Choosing Your Next NoSQL Database

您选择哪个选项取决于您的应用程序和数据库模型。您也可以同时使用这两种方案。例如。为用户数据库和订单表(在网上商店)的主从分片。如果您需要交易支持或进行大量加入操作,您在决定采取何种方案时必须考虑这一点。扩展数据库是一个相当复杂的话题,并没有解决所有问题的办法。