運維思考:一文聊聊高可用的“異地多活”架構設計

前言
高可用
1、高可用的一些解決方案
冷備 雙機熱備 同城雙活 異地雙活 異地多活
冷備
簡單
快速備份(相對于其他備份方式)
快速恢復。只需要將備份文件拷貝回工作目錄即完成恢復過程(亦或者修改數(shù)據(jù)庫的配置,直接將備份的目錄修改為數(shù)據(jù)庫工作目錄)。更甚,通過兩次mv命令就可瞬間完成恢復。
可以按照時間點恢復。比如,幾天前發(fā)生的拼多多優(yōu)惠券漏洞被人刷掉很多錢,可以根據(jù)前一個時間點進行還原,“挽回損失”。
服務需要停機。n個9肯定無法做到了。然后,以前我們的停機冷備是在凌晨沒有人使用的時候進行,但是現(xiàn)在很多的互聯(lián)網(wǎng)應用已經(jīng)是面向全球了,所以,任何時候都是有人在使用的。 數(shù)據(jù)丟失。如果不采取措施,那么在完成了數(shù)據(jù)恢復后,備份時間點到還原時間內(nèi)的數(shù)據(jù)會丟失。傳統(tǒng)的做法,是冷備還原以后,通過數(shù)據(jù)庫日志手動恢復數(shù)據(jù)。比如通過 redo日志,更甚者,我還曾經(jīng)通過業(yè)務日志去手動回放請求恢復數(shù)據(jù)?;謴褪菢O大的體力活,錯誤率高,恢復時間長。 冷備是全量備份。全量備份會造成磁盤空間浪費,以及容量不足的問題,只能通過將備份拷貝到其他移動設備上解決。所以,整個備份過程的時間其實更長了。 想象一下每天拷貝幾個T的數(shù)據(jù)到移動硬盤上,需要多少移動硬盤和時間。并且,全量備份是無法定制化的,比如只備份某一些表,是無法做到的。
雙機熱備
熱備,和冷備比起來,主要的差別是不用停機,一邊備份一邊提供服務。但還原的時候還是需要停機的。由于我們討論的是和存儲相關的,所以不將共享磁盤的方式看作雙機熱備。
Active/Standby模式
相當于1主1從,主節(jié)點對外提供服務,從節(jié)點作為backup。通過一些手段將數(shù)據(jù)從主節(jié)點同步到從節(jié)點,當故障發(fā)生時,將從節(jié)點設置為工作節(jié)點。數(shù)據(jù)同步的方式可以是偏軟件層面,也可以是偏硬件層面的。偏軟件層面的,比如mysql的master/slave方式,通過同步binlog的方式;sqlserver的訂閱復制方式。偏硬件層面,通過扇區(qū)和磁盤的攔截等鏡像技術,將數(shù)據(jù)拷貝到另外的磁盤。偏硬件的方式,也被叫做數(shù)據(jù)級災備;偏軟件的,被叫做應用級災備。后文談得更多的是應用級災備。
10T 技術資料限時領取!包括但不限于:Linux、虛擬化、容器、云計算、網(wǎng)絡、Python、Go 等。在開源Linux公眾號內(nèi)回復「10T」,即可免費獲??!
雙機互備
本質上還是Active/Standby,只是互為主從而已。雙機互備并不能工作于同一個業(yè)務,只是在服務器角度來看,更好的壓榨了可用的資源。比如,兩個業(yè)務分別有庫A和B,通過兩個機器P和Q進行部署。那么對于A業(yè)務,P主Q從,對于B業(yè)務,Q主P從。整體上看起來是兩個機器互為主備。這種架構下,讀寫分離是很好的,單寫多讀,減少沖突又提高了效率。
其他的高可用方案還可以參考各類數(shù)據(jù)庫的多種部署模式,比如mysql的主從、雙主多從、MHA;redis 的主從,哨兵,cluster 等等。
同城雙活
前面講到的幾種方案,基本都是在一個局域網(wǎng)內(nèi)進行的。業(yè)務發(fā)展到后面,有了同城多活的方案。和前面比起來,不信任的粒度從機器轉為了機房。這種方案可以解決某個IDC機房整體掛掉的情況(停電,斷網(wǎng)等)。
同城雙活其實和前文提到的雙機熱備沒有本質的區(qū)別,只是“距離”更遠了,基本上還是一樣(同城專線網(wǎng)速還是很快的)。雙機熱備提供了災備能力,雙機互備避免了過多的資源浪費。
在程序代碼的輔助下,有的業(yè)務還可以做到真正的雙活,即同一個業(yè)務,雙主,同時提供讀寫,只要處理好沖突的問題即可。需要注意的是,并不是所有的業(yè)務都能做到。
業(yè)界更多采用的是兩地三中心的做法。遠端的備份機房能更大的提供災備能力,能更好的抵抗地震,恐襲等情況。雙活的機器必須部署到同城,距離更遠的城市作為災備機房。災備機房是不對外提供服務的,只作為備份使用,發(fā)生故障了才切流量到災備機房;或者是只作為數(shù)據(jù)備份。原因主要在于:距離太遠,網(wǎng)絡延遲太大。

如上圖,用戶流量通過負載均衡,將服務A的流量發(fā)送到IDC1,服務器集A;將服務B的流量發(fā)送到IDC2,服務器B;同時,服務器集a和b分別從A和B進行同城專線的數(shù)據(jù)同步,并且通過長距離的異地專線往IDC3進行同步。當任何一個IDC當機時,將所有流量切到同城的另一個IDC機房,完成了failover。
當城市1發(fā)生大面積故障時,比如發(fā)生地震導致IDC1和2同時停止工作,則數(shù)據(jù)在IDC3得以保全。同時,如果負載均衡仍然有效,也可以將流量全部轉發(fā)到IDC3中。不過,此時IDC3機房的距離非常遠,網(wǎng)絡延遲變得很嚴重,通常用戶的體驗的會受到嚴重影響的。

3、異地雙活


對于個別一致性要求很高的應用,我們提供了一種強一致的方案(Global Zone),Globa Zone是一種跨機房的讀寫分離機制,所有的寫操作被定向到一個 Master 機房進行,以保證一致性,讀操作可以在每個機房的 Slave庫執(zhí)行,也可以 bind 到 Master 機房進行,這一切都基于我們的數(shù)據(jù)庫訪問層(DAL)完成,業(yè)務基本無感知。 ——《餓了么異地多活技術實現(xiàn)(一)總體介紹》
異地多活




10T 技術資源大放送!包括但不限于:Linux、虛擬化、容器、云計算、網(wǎng)絡、Python、Go 等。在開源Linux公眾號內(nèi)回復「10T」,即可免費獲?。?/span>
shell編程100例(附PDF下載)
IPv6技術白皮書(附PDF下載)
Linux主流發(fā)行版本配置IP總結(Ubuntu、CentOS、Redhat、Suse)
批量安裝Windows系統(tǒng)
無人值守批量安裝服務器
運維必備的《網(wǎng)絡端口大全》,看這一份就夠了。
收藏:服務器和存儲知識入門
什么叫SSH?原理詳解,看這一篇就夠了!
Nginx面試40問(收藏吃灰)
20 個 Linux 服務器性能調(diào)優(yōu)技巧
超詳細!一文帶你了解LVS四層負載均衡企業(yè)級實踐!
收藏 | Linux系統(tǒng)日志位置及包含的日志內(nèi)容介紹
100 道 Linux 常見面試題,建議收藏,慢慢讀~
服務器12種基本故障+排查方法
IT運維管理常用工具大全,讓你成為真正的高手
什么是QoS?
有收獲,點個在看 
shell編程100例(附PDF下載)
IPv6技術白皮書(附PDF下載)
Linux主流發(fā)行版本配置IP總結(Ubuntu、CentOS、Redhat、Suse)
批量安裝Windows系統(tǒng)
無人值守批量安裝服務器
運維必備的《網(wǎng)絡端口大全》,看這一份就夠了。
收藏:服務器和存儲知識入門
什么叫SSH?原理詳解,看這一篇就夠了!
Nginx面試40問(收藏吃灰)
20 個 Linux 服務器性能調(diào)優(yōu)技巧
超詳細!一文帶你了解LVS四層負載均衡企業(yè)級實踐!
收藏 | Linux系統(tǒng)日志位置及包含的日志內(nèi)容介紹
100 道 Linux 常見面試題,建議收藏,慢慢讀~
服務器12種基本故障+排查方法
IT運維管理常用工具大全,讓你成為真正的高手
什么是QoS?
有收獲,點個在看
