羅星屏
序言
業(yè)界周知,播出系統(tǒng)是全臺(tái)最復(fù)雜、安全性要求最高的系統(tǒng),而數(shù)據(jù)庫的安全穩(wěn)定運(yùn)行則是播出系統(tǒng)的核心要素之一。在設(shè)計(jì)建設(shè)播出系統(tǒng)時(shí),我們始終致力使數(shù)據(jù)庫安全穩(wěn)定運(yùn)行。但在現(xiàn)實(shí)場景中,由于數(shù)據(jù)庫故障導(dǎo)致的播出事故仍然常發(fā),影響程度輕重不一,嚴(yán)重時(shí)將導(dǎo)致大面積長時(shí)間停播,恢復(fù)時(shí)間較長。本文就播出系統(tǒng)數(shù)據(jù)庫的幾個(gè)經(jīng)典架構(gòu)展開討論,供讀者參考。
一.共享盤陣雙機(jī)熱備數(shù)據(jù)庫
雙機(jī)熱備數(shù)據(jù)庫架構(gòu)見圖1,核心是采用DAS(Direct Attached Storage)存儲(chǔ)和雙機(jī)熱備軟件,任一時(shí)刻只有一臺(tái)主機(jī)處于服務(wù)狀態(tài),另一臺(tái)主機(jī)處于等待服務(wù)狀態(tài)。處于服務(wù)狀態(tài)的主機(jī)占用對(duì)外的IP地址,對(duì)共享盤陣有讀寫權(quán)限,對(duì)應(yīng)的數(shù)據(jù)庫進(jìn)程處于活動(dòng)狀態(tài)。而等待服務(wù)的主機(jī)釋放出對(duì)外的IP地址,沒有訪問共享盤陣的權(quán)限(甚至根本看不見盤符),數(shù)據(jù)庫進(jìn)程處于停止?fàn)顟B(tài)。在這個(gè)架構(gòu)中,盤陣有兩個(gè)SAS接口,分別接到主、備機(jī)上,主機(jī)寫進(jìn)去的數(shù)據(jù)可被備機(jī)讀出,反之亦然,實(shí)現(xiàn)了數(shù)據(jù)的共享,數(shù)據(jù)的一致性非常好。
雙機(jī)熱備軟件是一套資源管理系統(tǒng),負(fù)責(zé)對(duì)外IP地址的轉(zhuǎn)移、數(shù)據(jù)庫進(jìn)程的管理、盤符保護(hù)。特別是在主、備機(jī)倒換期間,對(duì)各資源按規(guī)定順序停止、啟動(dòng),違反這些規(guī)定都將使數(shù)據(jù)出錯(cuò)。從主機(jī)倒換到備機(jī)的過程是:1.停止主機(jī)數(shù)據(jù)庫進(jìn)程、撤銷主機(jī)對(duì)外IP地址、關(guān)閉主機(jī)的盤陣訪問權(quán)限;2.開啟備機(jī)盤陣訪問權(quán)限、加載備機(jī)對(duì)外IP地址、啟動(dòng)備機(jī)數(shù)據(jù)庫進(jìn)程。從備機(jī)到主機(jī)的倒換與此類似,倒換的時(shí)間大約在1分鐘左右,倒換后客戶機(jī)的工作狀態(tài)需要認(rèn)真確認(rèn)。
這個(gè)架構(gòu)的優(yōu)點(diǎn)是數(shù)據(jù)“一致性”好,靠的是盤陣雙SAS連接主機(jī)實(shí)現(xiàn)共享讀寫。缺點(diǎn)是,盤陣必須選用高端的RAID,而且是故障“單點(diǎn)”。
在實(shí)際部署中,雙機(jī)熱備軟件需要作復(fù)雜的配置,在日常運(yùn)行維護(hù)中,需要定期檢查和倒換測試。雙機(jī)通過RS232或CAT5心跳線相互檢測對(duì)方是否存活,對(duì)環(huán)境要求非??量?。在實(shí)際使用中,出現(xiàn)過雙機(jī)互檢失敗而爭搶資源致宕機(jī)的情況,因盤陣故障導(dǎo)致數(shù)據(jù)丟失的情況也發(fā)生過。
由于這種架構(gòu)設(shè)備昂貴,且盤陣是故障“單點(diǎn)”,目前這類案例逐漸減少。
這種類型的架構(gòu)適合多種平臺(tái)(W i n d o w、L i n u x、Solaris)、數(shù)據(jù)庫軟件(SQL Server、Oracle)、雙機(jī)熱備軟件(Costandby、EMC autostart、NEC Express cluster )。
二.動(dòng)態(tài)鏡像雙機(jī)熱備數(shù)據(jù)庫
為了規(guī)避共享盤陣的單點(diǎn),動(dòng)態(tài)鏡像雙機(jī)熱備數(shù)據(jù)庫架構(gòu)得到廣泛使用,在播出系統(tǒng)中占比較大。
這種動(dòng)態(tài)鏡像雙機(jī)熱備架構(gòu)不再需要昂貴的DAS存儲(chǔ)盤陣,直接用服務(wù)器內(nèi)置存儲(chǔ)就可以部署系統(tǒng)。數(shù)據(jù)的“一致性”是靠雙機(jī)熱備軟件實(shí)時(shí)鏡像數(shù)據(jù)來保證的。
這里的實(shí)時(shí)鏡像,不是文件級(jí)鏡像,文件級(jí)鏡像不能保證數(shù)據(jù)的一致性。在這個(gè)架構(gòu)中,數(shù)據(jù)鏡像是磁盤指令級(jí)的鏡像,是單步鏡像,一步完成了再進(jìn)行下一步。
該架構(gòu)消除了單點(diǎn)故障,綜合性能較好。在實(shí)際使用中,發(fā)現(xiàn)的問題是,數(shù)據(jù)鏡像其實(shí)是很困難的,曾發(fā)生過倒換前后數(shù)據(jù)不一致的情況。
這種類型的架構(gòu)也適合多種平臺(tái)(Window、Linux、Solaris)、數(shù)據(jù)庫軟件(SQL Server、Oracle)、雙機(jī)熱備軟件(Costandby、EMC autostart、NEC Express cluster )。
三.實(shí)時(shí)應(yīng)用集群數(shù)據(jù)庫系統(tǒng)
數(shù)據(jù)庫,有一臺(tái)主機(jī)處于待機(jī)狀態(tài),未對(duì)外提供服務(wù),存在浪費(fèi)現(xiàn)象,并且倒換時(shí)會(huì)中斷1分鐘左右,對(duì)于訪問數(shù)量較大的業(yè)務(wù)(如金融、票務(wù)等)不太適合,這種環(huán)境下可采用實(shí)時(shí)應(yīng)用集群。
實(shí)時(shí)應(yīng)用集群數(shù)據(jù)庫RAC(real application clusters)多見于Oracle數(shù)據(jù)庫,是一種集數(shù)據(jù)多重復(fù)制、負(fù)載均衡、多層次故障轉(zhuǎn)移的系統(tǒng)架構(gòu)。在該架構(gòu)中,前臺(tái)有多個(gè)主機(jī),每個(gè)主機(jī)有兩個(gè)網(wǎng)卡,每個(gè)網(wǎng)卡有一個(gè)IP地址。在后臺(tái),用SAN網(wǎng)絡(luò)部署塊級(jí)(BLOCK)存儲(chǔ),實(shí)現(xiàn)數(shù)據(jù)多重復(fù)制和故障轉(zhuǎn)移。另外,還有心跳線專屬網(wǎng)絡(luò),這是系統(tǒng)正常工作的首要條件。
需要特別補(bǔ)充說明的是,在該架構(gòu)中,Oracle數(shù)據(jù)庫系統(tǒng)自動(dòng)部署Servicename服務(wù),該服務(wù)類似于DNS,實(shí)現(xiàn)負(fù)載均衡??蛻舳诉B接數(shù)據(jù)庫時(shí),首先連接Servicename服務(wù),得到相應(yīng)的IP地址和數(shù)據(jù)庫SID,當(dāng)有多個(gè)客戶端連接時(shí),每個(gè)客戶端得到IP地址和SID都不同,分別對(duì)應(yīng)不同的主機(jī),實(shí)現(xiàn)了負(fù)載均衡。當(dāng)某個(gè)主機(jī)一個(gè)網(wǎng)卡的網(wǎng)線斷開后,這個(gè)網(wǎng)卡的IP地址便轉(zhuǎn)移到另一網(wǎng)卡;當(dāng)兩個(gè)網(wǎng)卡的網(wǎng)線都斷開后,兩個(gè)IP地址都轉(zhuǎn)移到另外的主機(jī)。在發(fā)生網(wǎng)卡斷線、主機(jī)失效等情況時(shí),servicename服務(wù)系統(tǒng)會(huì)相應(yīng)調(diào)整分配策略,以實(shí)現(xiàn)可靠的故障轉(zhuǎn)移和負(fù)載均衡。
實(shí)時(shí)應(yīng)用集群數(shù)據(jù)庫,從多個(gè)層次保障了數(shù)據(jù)的安全性和服務(wù)的連續(xù)性,能夠滿足金融、股票等訪問量很大的業(yè)務(wù)需求。但該架構(gòu)的缺點(diǎn)是系統(tǒng)復(fù)雜,對(duì)系統(tǒng)環(huán)境要求極高,稍不滿足就可能發(fā)生故障,維護(hù)成本高。在現(xiàn)實(shí)應(yīng)用中,出現(xiàn)過網(wǎng)絡(luò)的瞬間丟包導(dǎo)致切換,也出現(xiàn)過因網(wǎng)絡(luò)的輕微故障導(dǎo)致保護(hù)性關(guān)機(jī)的情況。
四.容錯(cuò)服務(wù)器搭建數(shù)據(jù)庫
前面介紹的三種數(shù)據(jù)庫架構(gòu),關(guān)系到三個(gè)層次:硬件及OS、集群軟件、數(shù)據(jù)庫軟件,結(jié)構(gòu)復(fù)雜。在安裝部署時(shí),有復(fù)雜的連接線,如SAS電纜、SAN存儲(chǔ)系統(tǒng)、心跳線,這些連接線要求很高,稍有缺陷便會(huì)成為隱患。然后每臺(tái)主機(jī)安裝操作系統(tǒng)和集群軟件,最復(fù)雜的是集群軟件的資源配置,幾乎涉及所有硬件的參數(shù),沒有足夠的經(jīng)驗(yàn)是沒有把握的,在日常應(yīng)用中,還要定期進(jìn)行倒換實(shí)驗(yàn)。盡管做了如此多而復(fù)雜的工作,這三種架構(gòu)的數(shù)據(jù)庫故障并未顯著降低,離安全播出的“零事故”要求相差甚遠(yuǎn)。
這三種架構(gòu)的數(shù)據(jù)庫,我臺(tái)均采用過,但都不省心。在建設(shè)全頻道高清播出系統(tǒng)時(shí),我們?cè)俅螢閿?shù)據(jù)庫的選型而糾結(jié)?!氨娎飳にО俣取?,一個(gè)偶然的機(jī)會(huì),我們了解到容錯(cuò)服務(wù)器(fault tolerance server),該服務(wù)器在高速ETC、國家氣象、國家電網(wǎng)、鋼鐵生產(chǎn)等行業(yè)廣泛應(yīng)用。這些行業(yè)的安全性要求與播出等同,容錯(cuò)服務(wù)器能否為我所用,我們作了必要的分析調(diào)研。
從圖4左邊可以看到,容錯(cuò)服務(wù)器是一個(gè)可以插入兩個(gè)服務(wù)器模塊的機(jī)箱,形成一個(gè)完整的容錯(cuò)服務(wù)器。從圖4右邊可以看到,兩個(gè)模塊并非獨(dú)立存在,而是通過Lockstep關(guān)聯(lián)起來。正是這個(gè)關(guān)聯(lián),解決了前面說的三種架構(gòu)中數(shù)據(jù)同步、心跳檢測、故障切換的問題。
在安裝部署上,一個(gè)容錯(cuò)服務(wù)器就是一個(gè)框體,自然不再需要集群軟件,操作系統(tǒng)、數(shù)據(jù)庫軟件只需安裝一次(在購買操作系統(tǒng)和數(shù)據(jù)庫軟件時(shí),也只支付單臺(tái)服務(wù)器費(fèi)用),便自動(dòng)同步到兩個(gè)模塊。運(yùn)行管理上,也就是一臺(tái)服務(wù)器,但從內(nèi)部看,具備完整的硬件容錯(cuò)、數(shù)據(jù)鏡像、失效切換、安全離線等機(jī)制。
容錯(cuò)服務(wù)器的設(shè)計(jì)理念,是將主要的硬件(CPU、內(nèi)存、主板、I/O設(shè)備、硬盤驅(qū)動(dòng)器和風(fēng)扇)全部冗余化,實(shí)現(xiàn)在同一框體內(nèi)的兩臺(tái)完整的服務(wù)器之間形成完全冗余結(jié)構(gòu),以提供服務(wù)器的連續(xù)可用能力。容錯(cuò)服務(wù)器上線后,無間斷運(yùn)行、無中斷維護(hù),系統(tǒng)運(yùn)行狀態(tài)下可直接拉出故障模塊進(jìn)行維修,修復(fù)后可直接插入模塊,恢復(fù)到原始冗余狀態(tài)。容錯(cuò)服務(wù)器的冗余機(jī)制見圖5。
五.總結(jié)
在播出一線,效率和安全是王道,系統(tǒng)建設(shè)應(yīng)該朝著傻瓜化努力,降低系統(tǒng)的技術(shù)門檻,減輕運(yùn)行維護(hù)人員的負(fù)擔(dān),把精力投入到提升業(yè)務(wù)水平、產(chǎn)生更多的效益上去。在采用容錯(cuò)服務(wù)器后,數(shù)據(jù)庫變得非常簡單,只需做好日常巡查和數(shù)據(jù)備份,經(jīng)過兩年多的使用證明,容錯(cuò)服務(wù)器的確安全省心。B&P