程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005實現負載均衡

SQL Server 2005實現負載均衡

編輯:關於SqlServer
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管理數據庫,及時發現問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved