SQL Server負(fù)載均衡概念全解
網(wǎng)站的運(yùn)營(yíng)離不開訪問量,一個(gè)沒有人氣的網(wǎng)站是沒有什么經(jīng)營(yíng)意義的。那么對(duì)于大量的訪問者和流量的服務(wù)器分配是至關(guān)重要的。那么,負(fù)載均衡技術(shù)就是這個(gè)問題***的解決手段。現(xiàn)在,我們就為大家介紹一下關(guān)于SQL Server 的負(fù)載均衡問題。
對(duì)于數(shù)據(jù)庫(kù)負(fù)載均衡,大家最為耳熟能詳?shù)木褪荗racle RAC了。下面,我們先簡(jiǎn)單了解Oracle RAC的實(shí)現(xiàn)方法。
RAC是雙機(jī)并行服務(wù)器(8i及以前版本稱作Oracle Parallel Server,OPS),用來在集群環(huán)境下實(shí)現(xiàn)多機(jī)共享數(shù)據(jù)庫(kù),以保證應(yīng)用的高可用性,同時(shí)可以自動(dòng)實(shí)現(xiàn)并行處理及均分負(fù)載,還能實(shí)現(xiàn)數(shù)據(jù)庫(kù)在故障時(shí)的排錯(cuò)和無斷點(diǎn)恢復(fù)。它可以自動(dòng)進(jìn)行負(fù)載平衡、故障修復(fù)和規(guī)劃停機(jī)時(shí)間,以支持高可用性應(yīng)用程序。若并行服務(wù)器中某節(jié)點(diǎn)失效,透明的應(yīng)用程序容錯(cuò)能夠把用戶自動(dòng)轉(zhuǎn)接到另一節(jié)點(diǎn)上繼續(xù)運(yùn)行,應(yīng)用程序在用戶沒有察覺的情況下繼續(xù)執(zhí)行。這使周期性和非周期性發(fā)生故障的系統(tǒng)增大了連續(xù)可用性。進(jìn)程的失效可以完全透明地轉(zhuǎn)移到另一節(jié)點(diǎn)上去,通過適當(dāng)?shù)嘏渲?可以指定所有查詢都在客戶端進(jìn)行緩存,這樣它們便可以在轉(zhuǎn)移后的節(jié)點(diǎn)上重新設(shè)置。
截至到SQL Server 2008,微軟還是沒有推出負(fù)載均衡組件,只能通過SQL Server的其他技術(shù)特性或者利用第三方組件來DIY,下面列出我在做項(xiàng)目時(shí)最常用到的幾個(gè)方案。
端到端拓?fù)涞氖聞?wù)性復(fù)制
SQL Server 2005對(duì)端到端(P2P)拓?fù)浣Y(jié)構(gòu)上事務(wù)性的復(fù)制加強(qiáng)了支持。P2P的拓?fù)浣Y(jié)構(gòu)支持無限的發(fā)布服務(wù)器,它們彼此之間可以互相交換事務(wù)。
P2P拓?fù)涫荢QL Server的一個(gè)巨大進(jìn)步。現(xiàn)在,多端點(diǎn)服務(wù)器可以更改數(shù)據(jù),并且向其他的發(fā)布者復(fù)制事務(wù)。這就是說,訂閱服務(wù)器不再被限制在主要的報(bào)告環(huán)境中,可以通過事務(wù)性負(fù)載全球共享的方式將服務(wù)器分布開來。當(dāng)用戶的數(shù)量增加的時(shí)候,只要簡(jiǎn)單地向這個(gè)群體中添加服務(wù)器即可。
除了將負(fù)載分布之外,這個(gè)拓?fù)浣Y(jié)構(gòu)還增加了可用性。如果任何一個(gè)點(diǎn)的服務(wù)器不可達(dá),則池中其他服務(wù)器就會(huì)共享這個(gè)負(fù)載,因?yàn)槊總€(gè)服務(wù)器都有其他所有服務(wù)器上可獲得的全部數(shù)據(jù)集合。
注意:因?yàn)閿?shù)據(jù)的同步是異步的,也就是說各個(gè)節(jié)點(diǎn)上的數(shù)據(jù)可能會(huì)是存在差異的,所以千萬不要把它當(dāng)成真正的負(fù)載均衡。 它被設(shè)計(jì)出來是用來各個(gè)數(shù)據(jù)庫(kù)中心交換數(shù)據(jù)的,不是用來真正的做負(fù)載均衡的。
鏡像+快照
鏡像和快照是SQL Server 2005的另外兩個(gè)新特性,鏡像的主要用途是高可用性,正常情況下鏡像數(shù)據(jù)庫(kù)是不可用的,就這么閑著顯然是太浪費(fèi)了,可以對(duì)鏡像數(shù)據(jù)庫(kù)做個(gè)快照,然后把一些對(duì)于數(shù)據(jù)實(shí)時(shí)性要求不高的查詢轉(zhuǎn)移過來,這樣似乎也能分擔(dān)主庫(kù)的一些壓力。
把這個(gè)方案也叫負(fù)載均衡方案實(shí)在是勉為其難(我也是隨大溜按照別人的思路歸納的),因?yàn)榭煺詹荒芙⒌奶l繁,所以它的數(shù)據(jù)延時(shí)要比復(fù)制還要長(zhǎng),以小時(shí)記,因此轉(zhuǎn)移過來的查詢只能是一些報(bào)表之類的查詢。
Moebius for SQL Server
這個(gè)方案是一個(gè)第三方軟件,是從微軟出來的幾個(gè)人做的,說他們是微軟出來的并不是說他們的技術(shù)多厲害,而是他們利用SQL Server的一些內(nèi)部接口把集群做的非常透明, 無論是應(yīng)用程序的調(diào)用還是開發(fā)/管理人員的使用都和面對(duì)一個(gè)數(shù)據(jù)庫(kù)一樣。
他們的實(shí)現(xiàn)原理是這樣的:和鏡像一樣,每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)都有自己的數(shù)據(jù),也就是無共享磁盤架構(gòu)。他們稱之為“中間件"的程序宿主在數(shù)據(jù)庫(kù)的內(nèi)部,每個(gè)節(jié)點(diǎn)數(shù)據(jù)庫(kù)上寫入數(shù)據(jù)導(dǎo)致數(shù)據(jù)變化時(shí),SQL Server會(huì)激活“中間件",“中間件"把變化的數(shù)據(jù)同步到其他的節(jié)點(diǎn)上。其他節(jié)點(diǎn)發(fā)生變化也是一樣。因?yàn)?ldquo;中間件"宿主在數(shù)據(jù)庫(kù)內(nèi), 所以它能夠把每個(gè)同步的Session和SQL Server的Session綁定到一起,也就是使用戶的執(zhí)行和數(shù)據(jù)的同步成為一個(gè)原子操作,從而保證數(shù)據(jù)在每時(shí)每刻都是一致的。
因此查詢可以隨便到每個(gè)機(jī)器上去查,從而做到了真正的負(fù)載均衡。
另外還包括什么高可用性和虛擬IP什么的,和Oracle RAC的比較像,我也沒有仔細(xì)研究。我覺得這屬于附屬功能了,關(guān)鍵點(diǎn)還是保證多個(gè)數(shù)據(jù)庫(kù)如何能一致。