SQL Server第三方负载均衡方案 ----Moebius测试
二.背景(Contexts)
前幾天在SQL Server MVP宋大俠(宋沄劍)的一篇文章"數(shù)據(jù)庫(kù)集群技術(shù)漫談”中看到了格瑞趨勢(shì)在SQL Server上的負(fù)載均衡產(chǎn)品Moebius,搞數(shù)據(jù)庫(kù)的都知道:在Oracle上有RAC,MySQL也有對(duì)應(yīng)的方案(可參考:MySQL搭建Amoeba系列),而SQL Server上直到SQL Server 2012版本的AlwaysOn到來(lái),微軟都沒(méi)有提供一個(gè)負(fù)載均衡方案,我從宋大俠那里找來(lái)一個(gè)Moebius的測(cè)試版本進(jìn)行一下測(cè)試,下面是我測(cè)試的過(guò)程。
三.架構(gòu)原理(Architecture)
?
?
(Figure1:Moebius for SQL Server邏輯架構(gòu)圖)
四.測(cè)試環(huán)境(Environment)
操作系統(tǒng):Windows Server 2008 R2
數(shù)據(jù)庫(kù)版本:SQL Server 2012
服務(wù)器A:10.0.0.1
服務(wù)器B:10.0.0.2
虛擬IP:10.0.0.15
五.安裝Moebius(Install)
Moebius的安裝非常簡(jiǎn)便,在裝有SQL Server引擎的服務(wù)器上直接點(diǎn)擊安裝包進(jìn)行安裝,安裝過(guò)程中一直下一步即可。在此就不再多說(shuō)。
在此交待一下我的測(cè)試環(huán)境,是兩臺(tái)虛擬機(jī),IP分別為10.0.0.1和10.0.0.2,操作系統(tǒng)和SQL Server的版本分別為Windows Server 2012和SQL Server 2012。安裝完成后在Management Studio管理工具中右擊數(shù)據(jù)庫(kù),在彈出菜單中即可找到Moebius的菜單,如Figure2所示。
?
(Figure2:Moebius for SQL Server 2012)
安裝完成后,打開(kāi)配置管理器界面,如Figure3所示。
(Figure3:Moebius for SQL Server 2012)
分別將10.0.0.1和10.0.0.2這兩臺(tái)服務(wù)器加入集群,這里可以注意到,Moebius是以數(shù)據(jù)庫(kù)為粒度的,相比實(shí)例而言,該種粒度會(huì)更加靈活,如Figure4所示。
(Figure4:設(shè)置數(shù)據(jù)庫(kù))
將10.0.0.1和10.0.0.2兩臺(tái)服務(wù)器的數(shù)據(jù)庫(kù)分別加入集群后,建立虛擬IP和端口,建立的虛擬IP為10.0.0.15,端口為5000,之后所有前端應(yīng)用的連接就可以通過(guò)該虛擬IP進(jìn)行了,完全不需要理會(huì)后端的架構(gòu),可以讓前端與后端解耦,如Figure5和Figure6所示。
(Figure5:設(shè)置虛擬IP)
(Figure6:設(shè)置連接屬性)
建立完成后,集群就配置好了,效果如Figure7所示。
(Figure7:Moebius for SQL Server 2012)
六.Moebius測(cè)試(Testing)
(一).負(fù)載均衡測(cè)試(Load Balancing Testing)
集群的搭建完成后,就可以開(kāi)始對(duì)集群進(jìn)行測(cè)試。首先是負(fù)載均衡測(cè)試。負(fù)載均衡的測(cè)試辦法是使用壓力測(cè)試工具,然后分別查看兩個(gè)實(shí)例的Profiler,根據(jù)我咨詢(xún)宋沄劍的說(shuō)法是,負(fù)載均衡的算法是默認(rèn)根據(jù)兩臺(tái)服務(wù)器的過(guò)去一段時(shí)間采集的性能指標(biāo)進(jìn)行分析,優(yōu)先將查詢(xún)導(dǎo)到負(fù)載低的服務(wù)器中,但集群剛搭建的時(shí)候沒(méi)有歷史數(shù)據(jù),則按照平均分配的原則。下面是我使用SQLQueryStress進(jìn)行負(fù)載均衡測(cè)試的結(jié)果,如Figure8所示。我開(kāi)了100個(gè)線(xiàn)程,每個(gè)線(xiàn)程循環(huán)10次,來(lái)進(jìn)行一個(gè)非常簡(jiǎn)單的查詢(xún)。
(Figure8:SQLQueryStress壓力測(cè)試)
得到的結(jié)果如Figure9、Figure10所示,從圖可以看到:負(fù)載基本被平均分配到兩臺(tái)服務(wù)器(由于測(cè)試工具每個(gè)查詢(xún)都會(huì)附上Set Statistics IO On和Time On,因此負(fù)載應(yīng)該為100個(gè)線(xiàn)程*10次循環(huán)*2)。
(Figure9:Profiler跟蹤信息)
(Figure10:Profiler跟蹤信息)
由Figure9、Figure10大概可以看出:負(fù)載基本被平均分配到集群中的兩臺(tái)服務(wù)器中。
(二).高可用性測(cè)試(Failover Testing)
接下來(lái)就是測(cè)試高可用性。高可用的測(cè)試我主要集中于故障轉(zhuǎn)移切換的速度。首先,我開(kāi)100個(gè)線(xiàn)程,每個(gè)線(xiàn)程循環(huán)20次,在集群上運(yùn)行負(fù)載均衡,如Figure11所示。
(Figure11:SQLQueryStress)
Figure11大概執(zhí)行了20秒,此時(shí)我再次執(zhí)行,并在執(zhí)行過(guò)程中,強(qiáng)制關(guān)閉集群中10.0.0.1的SQL Server服務(wù),運(yùn)行結(jié)果如Figure12所示。
(Figure12:SQLQueryStress)
我們看到,已經(jīng)發(fā)送到到10.0.0.1服務(wù)器的部分事務(wù)給前端應(yīng)用程序提示失敗并回滾,除去停止服務(wù)所花的時(shí)間,以及所有的查詢(xún)由10.0.0.1和10.0.0.2負(fù)載均衡執(zhí)行,到僅僅只剩下10.0.0.2單獨(dú)執(zhí)行所花的時(shí)間,故障轉(zhuǎn)移的切換時(shí)間在10秒以?xún)?nèi),這個(gè)速度已經(jīng)和SQL Server的鏡像幾乎持平了。
此時(shí),再來(lái)看Moebius集群管理器,就發(fā)現(xiàn)10.0.0.1服務(wù)器已經(jīng)被集群脫機(jī),且虛擬IP已經(jīng)漂移到了10.0.0.2,如Figure13所示。
(Figure13:Moebius for SQL Server 2012)
(三).數(shù)據(jù)安全性測(cè)試(Security Testing)
在Figure13描述的情況之后,此時(shí)只有10.0.0.2一臺(tái)服務(wù)器處于活的狀態(tài) ,因?yàn)镸oebius采用的是Share-Nothing架構(gòu),因此應(yīng)該可以利用冗余數(shù)據(jù)防止數(shù)據(jù)丟失,從而保證了數(shù)據(jù)安全。此時(shí)我在10.0.0.2上新建立一張表Demo。并重新啟動(dòng)10.0.0.1的數(shù)據(jù)庫(kù)服務(wù),在Moebius中重新聯(lián)機(jī),如Figure14、Figure15所示。
?
?
(Figure14:Moebius for SQL Server 2012)
(Figure15:Moebius for SQL Server 2012)
在聯(lián)機(jī)的過(guò)程中,有一個(gè)恢復(fù)差異數(shù)據(jù)的步驟,聯(lián)機(jī)完成后我們來(lái)看10.0.0.1數(shù)據(jù)庫(kù),Demo表已經(jīng)咋恢復(fù)差異數(shù)據(jù)的時(shí)候被自動(dòng)同步了,如Figure16所示。
(Figure16:Demo表)
七.小結(jié)(Summary)
通過(guò)上面對(duì)Moebius的簡(jiǎn)單測(cè)試來(lái)看,Moebius的確實(shí)現(xiàn)了對(duì)SQL Server的負(fù)載均衡、高可用以及保證數(shù)據(jù)的安全。對(duì)于國(guó)內(nèi)能夠有公司實(shí)現(xiàn)類(lèi)似Oracle RAC這樣的負(fù)載均衡方案還是讓我非常驚訝的,如果該結(jié)果在復(fù)雜的數(shù)據(jù)庫(kù)環(huán)境下依然能夠保持同樣的結(jié)果,那么這個(gè)方案對(duì)于使用SQL Server的大公司來(lái)說(shuō)價(jià)值就非常大了,有機(jī)會(huì)我再進(jìn)行復(fù)雜一些的測(cè)試。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL Server幾乎能在所有的系統(tǒng)和平臺(tái)中進(jìn)行數(shù)據(jù)的處理,作為最為普及的數(shù)據(jù)處理軟件之一。那么,關(guān)于它的負(fù)載均衡問(wèn)題我們也應(yīng)該掌握好。那么對(duì)于這個(gè)問(wèn)題,下文就將為大家詳細(xì)介紹一下。望大家能對(duì)此部分的知識(shí)內(nèi)容能有所了解。
然而,長(zhǎng)期以來(lái),SQL Server數(shù)據(jù)庫(kù)服務(wù)器都只有“熱備"的解決方案,而沒(méi)有“負(fù)載均衡" 和“集群"的解決方案。這種解決方案固然提升了系統(tǒng)的可靠性,但也存在一些問(wèn)題:
◆面對(duì)大數(shù)據(jù)量和大量的數(shù)據(jù)庫(kù)查詢(xún)請(qǐng)求,只能采取縱向提升服務(wù)器檔次的方法,而縱向提升的成本遠(yuǎn)遠(yuǎn)高于橫向擴(kuò)展。
◆在熱備時(shí),數(shù)據(jù)庫(kù)服務(wù)器只有一臺(tái)在工作,另一臺(tái)處于閑置備份的狀態(tài),造成了投資的浪費(fèi)。
◆非實(shí)時(shí)切換。
而數(shù)據(jù)庫(kù)路由器軟件ICX的出現(xiàn),為基于MS SQL Server的數(shù)據(jù)庫(kù)系統(tǒng)提供了一種更優(yōu)秀的集群解決方案。它可以真正的實(shí)現(xiàn)SQL Server數(shù)據(jù)庫(kù)服務(wù)器的動(dòng)態(tài)負(fù)載均衡,提高性能和速度;它可以真正的保證SQL Server數(shù)據(jù)庫(kù)服務(wù)器不間斷的提供服務(wù),在服務(wù)器發(fā)生故障的時(shí)候?qū)崟r(shí)切換到其他服務(wù)器上繼續(xù)提供服務(wù),切換時(shí)間為“零"。
數(shù)據(jù)庫(kù)路由器是實(shí)時(shí)并發(fā)數(shù)據(jù)庫(kù)事務(wù)處理同步復(fù)制器和負(fù)載平衡器。
數(shù)據(jù)庫(kù)路由器--ICX(意思是:I SEE X DATABASE SERVERS),也就是說(shuō),在ICX后面可以同時(shí)連接N個(gè)數(shù)據(jù)庫(kù),結(jié)構(gòu)如下圖所示:
1.所有的數(shù)據(jù)庫(kù)客戶(hù)都通過(guò)ICX訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。當(dāng)訪(fǎng)問(wèn)、查詢(xún)SQL Server數(shù)據(jù)庫(kù)的時(shí)候ICX可以根據(jù)實(shí)際情況分配服務(wù)器來(lái)提供服務(wù),大大提高服務(wù)速度和優(yōu)化性能,完成負(fù)載均衡。
2.ICX可以同時(shí)連接多臺(tái)數(shù)據(jù)庫(kù)(2-16臺(tái),具體連多少臺(tái),看客戶(hù)的具體需求而定),這若干臺(tái)數(shù)據(jù)庫(kù)的內(nèi)容在任何時(shí)刻由ICX保證是完全一致的。也就是說(shuō),ICX采用了全新的并發(fā)事務(wù)處理的方式,向連接的N臺(tái)數(shù)據(jù)庫(kù)同步復(fù)制事務(wù)處理,使得系統(tǒng)在任何時(shí)刻具有多個(gè)一致的最新邏輯數(shù)據(jù)庫(kù)數(shù)據(jù)集。當(dāng)其中一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器發(fā)生故障的時(shí)候,ICX可以實(shí)時(shí)的、第一時(shí)間切換到其他服務(wù)器上來(lái)繼續(xù)提供服務(wù)。真正的實(shí)現(xiàn)零時(shí)間的服務(wù)器切換,大大提高安全性,真正意義的實(shí)現(xiàn)服務(wù)器不間斷服
Measure
Measure
總結(jié)
以上是生活随笔為你收集整理的SQL Server第三方负载均衡方案 ----Moebius测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【新手案例】Python3.7如何获取网
- 下一篇: 大数据时代下的SQL Server第三方