SQL Server 2005實現負載均衡

Internet的規模每一百天就會增加一倍,客戶但願得到7天×24小時的不間斷可用性及較快的系統反應時間,而不肯多次看到某個站點「Server Too Busy」及頻繁的系統故障。 數據庫

隨着業務量的提升,以及訪問量和數據流量的快速增加,網絡各個核心部分的處理性能和計算強度也相應增大,使得單一設備根本沒法承擔。在此狀況下,若是扔掉現有設備去作大量的硬件升級,必將形成現有資源的浪費,並且下一次業務量的提高,又將致使再一次硬件升級的高額成本投入。因而,負載均衡機制應運而生。 緩存

對於負載均衡,筆者常常接觸的當屬Oracle的負載均衡機制。下面,咱們先簡單瞭解Oracle的負載均衡的實現方案。 安全

Real Application Clusters是雙機並行服務器(8i及之前版本稱做Oracle Parallel Server,OPS),用來在集羣環境下實現多機共享數據庫,以保證應用的高可用性,同時能夠自動實現並行處理及均分負載,還能實現數據庫在故障時的排錯和無斷點恢復。它能夠自動進行負載平衡、故障修復和規劃停機時間,以支持高可用性應用程序。若並行服務器中某節點失效,透明的應用程序容錯可以把用戶自動轉接到另外一節點上繼續運行,應用程序在用戶沒有察覺的狀況下繼續執行。這使週期性和非週期性發生故障的系統增大了連續可用性。進程的失效能夠徹底透明地轉移到另外一節點上去,經過適當地配置,能夠指定全部查詢都在客戶端進行緩存,這樣它們即可以在轉移後的節點上從新設置。 服務器

下面咱們重點介紹Sql Server 2005是如何實現負載均衡的。 網絡

Sql Server 2005的新特性 架構

端到端拓撲的事務性複製 負載均衡

SQL Server 2005對端到端(P2P)拓撲結構上事務性的複製增強了支持。P2P的拓撲結構支持無限的發佈服務器,它們彼此之間能夠互相交換事務。 性能

P2P拓撲是SQL Server的一個巨大進步。如今,多端點服務器能夠更改數據,而且向其餘的發佈者複製事務。這就是說,訂閱服務器再也不被限制在主要的報告環境中,能夠經過事務性負載全球共享的方式將服務器分佈開來。當用戶的數量增長的時候,只要簡單地向這個羣體中添加服務器便可。 優化

除了將負載分佈以外,這個拓撲結構還增長了可用性。若是任何一個點的服務器不可達,則池中其餘服務器就會共享這個負載,由於每一個服務器都有其餘全部服務器上可得到的所有數據集合。 進程

數據庫鏡像和快照

SQL Server 2005引入了數據庫鏡像的概念,來幫助得到高可用性。特別提醒的是,只要它正式發佈了,數據庫鏡像就能夠在SQL Server 2005上使用。然而,只有到SQL Server 2005 Service Pack 1纔會支持鏡像。

數據庫快照是SQL Server 2005中引入的另外一項特性。快照是某一個時間點上的數據庫的克隆。只要對鏡像數據庫進行了快照,就可讓用戶查詢快照。快照的生成一般只須要幾秒鐘,由於它實際上在這個過程當中並無拷貝任何數據。所以,要把負載分佈到主服務器和備用服務器上,就能夠將數據庫作鏡像,而後階段性地對備份服務器進行快照。並且還可使用快照在主服務器上進行報告。

軟件實現SQL Server 2005的負載均衡

中間層

實現數據庫的負載均衡技術,首先要有一個能夠控制鏈接數據庫的控制端。在這裏,它截斷了數據庫和程序的直接鏈接,由全部的程序來訪問這個中間層,而後再由中間層來訪問數據庫。這樣,咱們就能夠具體控制訪問某個數據庫了,而後還能夠根據數據庫的當前負載來調整每次鏈接到哪一個數據庫。好處在兩個方面:首先,它成功地將數據庫放到了內網之中,更好地保護了數據庫的安全性。若是數據庫也在公網上,1433端口是很容易被攻擊的,因此要保護數據庫與之的鏈接,就用到了中間層。它能夠將數據庫更加好地保護在內網。其次,鏈接數據庫的全部鏈接均可以控制,更方便DBA對數據的管理,看哪些鏈接更耗費數據庫資源,以便更好地優化代碼。

可是,也有兩點要注意:第一,必需要作成Windows的服務程序。Windows發展到今天,若是以一個集成的大系統來說,作成服務程序更加穩定,也更加安全,這樣作即便用戶不登陸機器,也可使用。第二,必需要使用多箇中間層。從中間層的做用能夠看出,它承接了數據庫的全部鏈接,因此,一旦出了問題,就會致使整個系統癱瘓。因此作多箇中間層是必要的,這樣,若是一個壞了能夠登陸到另外一個。

實現多據庫數據同步

中間層有了,下一步的工做是設置構建數據庫集羣。對於負載均衡,最重要的就是全部服務器的數據都是同步的。這是一個集羣所必需的,由於,若是數據不一樣步,那麼用戶從一臺服務器讀出的數據,就有別於從另外一臺服務器讀出的數據,這是不能容許的。因此必須實現一個數據庫的數據同步。這裏設置一個用於寫入的數據庫,設置兩個用於讀出的數據庫,由於據統計,通常來說,70%的數據庫操做爲讀操做。

首先,在寫入數據庫上作一個發佈服務器,主要基於SQL Server 2005的複製技術,將即將用到的表都選上。注意,在鏈接上要選用模擬用戶,而後共享時選擇sa用戶,這樣就能夠將數據共享了。

其次,在兩個讀服務器上作訂閱服務,要注意一樣的事項,這樣一個「一寫兩讀」的數據庫集羣就完成了。

數據庫的安全備份

在一個大的系統中,系統的無端障性是很重要的,可是在剛纔的系統下,若是用於寫的服務器忽然壞了,整個系統就會出現問題,因此,再作個備份是必要的。

數據庫鏡像是SQL Server 2005大力推出的,它就是要實現數據庫的安全轉移,因此須要再單獨拿出一臺機器來作備份服務器,將徹底鏡像寫入該服務器,這樣,即便寫入服務器壞了,它也能夠自動轉移到備份服務器上來,保證不影響用戶。

這實際上就至關於實現了對服務器的容災管理,可是有一點須要注意,在這種鏡像的體系中,必需要有一臺服務器做爲監視服務器,以便察看哪臺服務器壞了,用以在機器出錯以後迅速調整。

回傳數據庫的狀態

數據庫服務器均已配完,總體的機器集羣架構已經構建,接下來的工做就是配置程序。

首先,在讀和寫的服務器都放上一個監控程序,它一樣必須是Windows的服務,這樣更穩定;其次,它能夠設定成每隔30秒或者必定時間,將服務器的CPU、內存、網卡流量和當前數據庫狀態等信息發送回來。在這裏須要設置一個權值,用以衡量CPU、內存利用率等信息的各自比例。在這個系統中,建議以CPU利用率爲準。

中間層實現的負載均衡

到此爲止,全部的準備工做都已完成,包括數據庫的創建和配置,中間層的位置,下面所做的就是用軟件來實現這個負載均衡。

首先,當一個用戶有數據庫請求時,先判斷是讀仍是寫,若是是寫的話,就直接返回寫入服務器,這樣當寫服務器寫完數據之後,差很少能夠在3秒內返回其餘兩臺機器。

其次,當遇到一個讀的請求時,根據監控返回來的數據判斷,根據剛纔的權值返回一個當前最空閒的機器。須要注意的是,這時最好作一個記錄器,用以保持一段時間的數值,可讓管理員自行設定,更好地作到幾臺數據庫的壓力平衡。

最後,若是爲主的寫入服務器忽然壞掉,程序能夠自動把備份的服務器切換過來,用剛纔的備份服務器看成寫服務器,而後作一個報警系統,用以通知管理員。一樣,當監控服務器發現其餘兩臺讀服務器壞掉時,也會自動通知管理員,來處理服務器的異常狀況,這樣就能夠保證系統的穩定運行,並且易於管理和維護。

總之,用軟件和微軟SQL Server 2005的一些新技術,能夠很輕鬆地實現負載均衡,這樣不但能夠不用硬件來實現,方便管理員的操控,更有利於DBA管理數據庫,及時發現問題。

 

相關文章
相關標籤/搜索