01什么是高可用性?首先,我們需要理解什么是高可用?維基百科的定義如下:高可用性(英語(yǔ):High Availability,縮寫(xiě)為 HA),IT術(shù)語(yǔ),指系統(tǒng)無(wú)中斷地執(zhí)行其功能的能力,代表系統(tǒng)的可用性程度。是進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)的準(zhǔn)則之一。基本上來(lái)說(shuō),就是要讓我們的計(jì)算環(huán)境(包括軟硬件)做到full-time的可用性。在架構(gòu)上來(lái)說(shuō),需要考慮如下設(shè)計(jì):1. 對(duì)軟硬件的冗余,以消除單點(diǎn)故障。任何系統(tǒng)都會(huì)有一個(gè)或多個(gè)冗余系統(tǒng)做standby。
2. 對(duì)故障的檢測(cè)和恢復(fù)。檢測(cè)故障以及用備份的結(jié)點(diǎn)接管故障點(diǎn)。這也就是failover。
02 高可用的三種模式1、主備模式 主節(jié)點(diǎn)工作,備節(jié)點(diǎn)處于監(jiān)控準(zhǔn)備狀況;當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),備節(jié)點(diǎn)接管主節(jié)點(diǎn)的一切工作;待主節(jié)點(diǎn)恢復(fù)正常后,有兩種恢復(fù)方式,一種是自動(dòng)或手動(dòng)方式切回到主節(jié)點(diǎn);另一種是不切回,以前的主機(jī)淪為備節(jié)點(diǎn),這種方式一般在云端采用。數(shù)據(jù)的一致性一般是通過(guò)數(shù)據(jù)庫(kù)同步方式解決。案例:天翼云/華為云MySQL數(shù)據(jù)庫(kù)服務(wù)的主備實(shí)例,如下圖所示:2、雙活模式
主節(jié)點(diǎn)和備節(jié)點(diǎn)同時(shí)運(yùn)行,通過(guò)全局負(fù)載均衡器負(fù)載分?jǐn)傇L問(wèn)流量,當(dāng)主節(jié)點(diǎn)機(jī)宕機(jī)時(shí),備節(jié)點(diǎn)機(jī)立即接管它的一切工作,保證系統(tǒng)不間斷運(yùn)行;主備節(jié)點(diǎn)一般是共享主節(jié)點(diǎn)的數(shù)據(jù)庫(kù)實(shí)例,備節(jié)點(diǎn)數(shù)據(jù)庫(kù)實(shí)例同步主節(jié)點(diǎn)實(shí)例,可提供只讀服務(wù)。案例:招商局的同城雙活災(zāi)備系統(tǒng)就是該模式,可參考鏈接:百年招商局大轉(zhuǎn)型,“雙云”混合繼往開(kāi)來(lái)http://www.sohu.com/a/225597241_122592
3、集群模式
多個(gè)節(jié)點(diǎn)構(gòu)成集群,一起工作,有如下特點(diǎn):多主架構(gòu),去中心化;集群不同節(jié)點(diǎn)之間數(shù)據(jù)實(shí)時(shí)同步,沒(méi)有延遲;在出現(xiàn)數(shù)據(jù)庫(kù)故障時(shí),因支持多點(diǎn)寫(xiě)入,切換容易;在服務(wù)期間,可支持節(jié)點(diǎn)增加或刪除的“熱插拔”;集群的維護(hù),對(duì)應(yīng)用程序是透明的。案例:天翼云/華為云分布式緩存集群實(shí)例,其架構(gòu)圖如下所示:所有的redis節(jié)點(diǎn)彼此互聯(lián);客戶端與redis節(jié)點(diǎn)直連,不需要中間proxy層;客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可。
03 IT基礎(chǔ)設(shè)施的高可用1、網(wǎng)絡(luò)高可用由于網(wǎng)絡(luò)存儲(chǔ)的快速發(fā)展,網(wǎng)絡(luò)冗余技術(shù)被不斷提升,提高IT系統(tǒng)的高可用性的關(guān)鍵應(yīng)用就是網(wǎng)絡(luò)高可用性,網(wǎng)絡(luò)高可用性是通過(guò)匹配冗余的網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備的冗余,達(dá)到高可用的目的。比如冗余的交換機(jī),冗余的路由器等2、服務(wù)器高可用服務(wù)器高可用主要使用的是服務(wù)器集群軟件或高可用軟件來(lái)實(shí)現(xiàn)。3、存儲(chǔ)高可用使用軟件或硬件技術(shù)實(shí)現(xiàn)存儲(chǔ)的高度可用性。其主要技術(shù)指標(biāo)是存儲(chǔ)切換功能,數(shù)據(jù)復(fù)制功能,數(shù)據(jù)快照功能等。當(dāng)一臺(tái)存儲(chǔ)出現(xiàn)故障時(shí),另一臺(tái)備用的存儲(chǔ)可以快速切換,達(dá)一存儲(chǔ)不停機(jī)的目的。
04 高可用性的度量系統(tǒng)可用性一般用n個(gè)9來(lái)度量,9越多代表全年服務(wù)可用時(shí)間越長(zhǎng)服務(wù)更可靠,停機(jī)時(shí)間越短,反之亦然。下表提供了n個(gè)9對(duì)應(yīng)的年、月、周、天的宕機(jī)時(shí)間:
宕機(jī)時(shí)間是怎么計(jì)算的呢?宕機(jī)時(shí)間顧名思義就是不可用時(shí)間,比如,可用性為99.999%(5個(gè)9),不可用性為1-99.999%=0.001%,我們算一下按照“年”來(lái)度量的宕機(jī)時(shí)間如下:365天*24小時(shí)*60分鐘*(1-99.999%)≈5.26分/年。可信云官網(wǎng)列出的天翼云主機(jī)的業(yè)務(wù)可用性指標(biāo)為99.95%,我們計(jì)算一下宕機(jī)時(shí)間:365天*24小時(shí)*(1-99.95%)≈4.38小時(shí)/年。在線系統(tǒng)和執(zhí)行關(guān)鍵任務(wù)的系統(tǒng),比如金融系統(tǒng),通常要求其可用性要達(dá)到5個(gè)9標(biāo)準(zhǔn)(99.999%)。
05 數(shù)據(jù)一致性問(wèn)題高可用系統(tǒng),細(xì)節(jié)之處全是魔鬼,冗余結(jié)點(diǎn)最大的難題就是數(shù)據(jù)復(fù)制的數(shù)據(jù)一致性保證。冗余數(shù)據(jù)所帶來(lái)的一致性問(wèn)題是魔鬼中的魔鬼:如果主備節(jié)點(diǎn)數(shù)據(jù)復(fù)制是異步的,那么在failover的時(shí)候就會(huì)出現(xiàn)數(shù)據(jù)差異的情況。如果主備節(jié)點(diǎn)數(shù)據(jù)復(fù)制是同步的,那么就會(huì)導(dǎo)致冗余結(jié)點(diǎn)越多性能越慢。所以,很多高可用系統(tǒng)都是在做各種取舍,如果我們對(duì)數(shù)據(jù)庫(kù)的性能要求較高,能容忍一定的數(shù)據(jù)差異,建議采用異步復(fù)制模式;如果要求數(shù)據(jù)的強(qiáng)一致性,能夠容忍一定的性能損耗,建議采用同步復(fù)制模式,比如銀行賬號(hào)的余額真實(shí)體現(xiàn)了賬戶的結(jié)余,不能允許主備節(jié)點(diǎn)賬號(hào)余額不一致,此時(shí)就必需做到強(qiáng)一致性。
06 高可用性總結(jié)要做到服務(wù)高可用,就必需要有備用(復(fù)本),無(wú)論是應(yīng)用結(jié)點(diǎn)還是數(shù)據(jù)結(jié)點(diǎn)要做到復(fù)制,就會(huì)有數(shù)據(jù)一致性的問(wèn)題,要根據(jù)業(yè)務(wù)場(chǎng)景來(lái)取舍我們不可能做到100%的高可用,也就是說(shuō),我們能做到幾個(gè)9個(gè)的SLA我們很難計(jì)算出系統(tǒng)有多少的可用性,因?yàn)橛绊懸粋€(gè)系統(tǒng)的因素實(shí)在是太多了,除了軟件設(shè)計(jì),還有硬件,還有第三方的服務(wù)(如電信聯(lián)通的寬帶SLA),當(dāng)然包括“建筑施工隊(duì)的挖掘機(jī)”。要真正保障系統(tǒng)的高可用性,是一件很難的事情,就算是3個(gè)9的可用性,一個(gè)月的宕機(jī)時(shí)間也只有40多分鐘,即使是排名靠前的云服務(wù)商,也經(jīng)常需要人肉處理故障, 一個(gè)故障處理1個(gè)多小時(shí)甚至2-3個(gè)小時(shí),也是正常情況,當(dāng)云服務(wù)商在官網(wǎng)上聲明自己的SLA是3個(gè)9或是5個(gè)9,要切實(shí)提高自己的自動(dòng)化運(yùn)維處理故障的能力,不然客戶會(huì)拿著官網(wǎng)的SLA來(lái)索賠。