SQL Server資料庫實現負載均衡

天府雲創發表於2017-02-10

SQL Server資料庫負載方案

----------------------------------------------------------------------------------------------------------------------------

微軟官方方案:
1、通過分庫分表、分庫磁碟IO、Share-Disk架構
2、AlwaysOn
第三方軟體服務:
1、DBTwin
2、負載均衡產品Moebius For SQL Server
3、資料庫路由器軟體ICX(提供MS SQL Server資料庫伺服器的叢集功能,可以實現資料庫伺服器的並行處理、負載均衡和熱備份、實時切換。 
硬體負載方案
1、F5 +資料池

簡介

    當今世界是一個資訊化的世界,我們的生活中無論是生活、工作、學習都離不開資訊系統的支撐。而資訊系統的背後用於儲存和處理最終結果的地方就是資料庫。因此資料庫系統就變得尤為重要,這意味著如果資料庫如果面臨問題,則意味著整個應用系統也會面臨挑戰,從而帶來嚴重的損失和後果。

    如今“大資料”這個詞已經變得非常流行,雖然這個概念如何落地不得而知。但可以確定的是,隨著物聯網、移動應用的興起,資料量相比過去會有幾何級的提升,因此資料庫所需要解決的問題不再僅僅是記錄程式正確的處理結果,還需要解決如下挑戰:

  • 當資料庫效能遇到問題時,是否能夠橫向擴充套件,通過新增伺服器的方式達到更高的吞吐量,從而充分利用現有的硬體實現更好的投資回報率。
  • 是否擁有實時同步的副本,當資料庫面臨災難時,可以短時間內通過故障轉移的方式保證資料庫的可用性。此外,當資料丟失或損壞時,能否通過所謂的實時副本(熱備)實現資料的零損失。
  • 資料庫的橫向擴充套件是否對應用程式透明,如果資料庫的橫向擴充套件需要應用程式端進行大量修改,則所帶來的後果不僅僅是高昂的開發成本,同時也會帶來很多潛在和非潛在的風險。

    面對上述挑戰一個顯而易見的辦法是將多個伺服器組成一組叢集,這樣一來就可以充分利用每一臺伺服器的資源並將客戶端負載分發到不同伺服器上,隨著應用程式負載的增加,只需要將新的伺服器新增到叢集即可。

====  ====  ====  ====  ====

    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、大資料時代下的SQL Server第三方負載均衡方案----Moebius測試 http://www.cnblogs.com/gaizai/p/3644510.html

2、資料庫叢集技術漫談 -http://www.cnblogs.com/CareySon/p/3627594.html



相關文章