2012-11-18 278 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

您選擇哪個選項取決於您的應用程序和數據庫模型。您也可以同時使用這兩種方案。例如。爲用戶數據庫和訂單表(在網上商店)的主從分片。如果您需要交易支持或進行大量加入操作,您在決定採取何種方案時必須考慮這一點。擴展數據庫是一個相當複雜的話題,並沒有解決所有問題的辦法。