云計(jì)算數(shù)據(jù)庫的災(zāi)難恢復(fù)解決方案是如何演進(jìn)的?
譯文?譯者 | 李睿
審校 | 孫淑娟
災(zāi)難恢復(fù)(DR)是企業(yè)級(jí)數(shù)據(jù)庫的核心功能。數(shù)據(jù)庫供應(yīng)商一直在尋找改進(jìn)災(zāi)難恢復(fù)的方法,而在過去的10年里,數(shù)據(jù)庫災(zāi)難恢復(fù)也出現(xiàn)了重大的創(chuàng)新。
本文簡要介紹數(shù)據(jù)庫災(zāi)難恢復(fù)的發(fā)展歷史,重點(diǎn)介紹了基于云計(jì)算的分布式數(shù)據(jù)庫中的災(zāi)難恢復(fù)(DR)和高可用性(HA)的創(chuàng)新。
1、測(cè)量高可用性和災(zāi)難恢復(fù)
高可用性(HA)和災(zāi)難恢復(fù)(DR)的目標(biāo)是保持系統(tǒng)在操作級(jí)別上正常運(yùn)行。它們都試圖消除系統(tǒng)中的單點(diǎn)故障,并使故障切換或恢復(fù)過程實(shí)現(xiàn)自動(dòng)化。
高可用性(HA)通常由系統(tǒng)每年運(yùn)行的時(shí)間百分比來衡量。災(zāi)難恢復(fù)的重點(diǎn)是在災(zāi)難發(fā)生之后使系統(tǒng)恢復(fù)服務(wù),使數(shù)據(jù)的損失最小化。這是由兩個(gè)指標(biāo)來衡量的:恢復(fù)所需的時(shí)間或恢復(fù)時(shí)間目標(biāo)(RTO),以及數(shù)據(jù)量的丟失或恢復(fù)點(diǎn)目標(biāo)(RPO)。而恢復(fù)點(diǎn)目標(biāo)(RPO)和恢復(fù)時(shí)間目標(biāo)(RTO)應(yīng)該盡可能降低。
高可用性和災(zāi)難恢復(fù)的測(cè)量
每個(gè)災(zāi)難都是獨(dú)一無二的,因此容錯(cuò)目標(biāo)(FTT)描述了系統(tǒng)能夠承受的最大災(zāi)難范圍。通常使用的容錯(cuò)目標(biāo)(FTT)是區(qū)域級(jí)別,它表示災(zāi)難已經(jīng)影響到州或城市等地理區(qū)域。
2、災(zāi)難恢復(fù)發(fā)展簡史
數(shù)據(jù)庫的災(zāi)難恢復(fù)技術(shù)經(jīng)歷了備份和恢復(fù)、主備和多活三個(gè)階段。
(1)備份和恢復(fù)
在災(zāi)難恢復(fù)的早期階段,數(shù)據(jù)庫利用數(shù)據(jù)塊和事務(wù)日志為完整數(shù)據(jù)和增量數(shù)據(jù)創(chuàng)建備份。如果發(fā)生災(zāi)難,則從備份和應(yīng)用程序事務(wù)日志恢復(fù)數(shù)據(jù)庫。
近年來,公共云數(shù)據(jù)庫服務(wù)將存儲(chǔ)復(fù)制與傳統(tǒng)數(shù)據(jù)庫備份技術(shù)相結(jié)合,提供基于快照的跨區(qū)域自動(dòng)恢復(fù)備份。這種方法定期從源區(qū)域的數(shù)據(jù)庫生成快照,并將快照文件復(fù)制到目標(biāo)區(qū)域。如果源區(qū)域崩潰,則從目標(biāo)區(qū)域恢復(fù)數(shù)據(jù)庫,服務(wù)將會(huì)繼續(xù)。這種解決方案的恢復(fù)點(diǎn)目標(biāo)(RPO)和恢復(fù)時(shí)間目標(biāo)(RTO)可能長達(dá)幾個(gè)小時(shí),因此它最適合沒有嚴(yán)格可用性需求的應(yīng)用程序。
備份和恢復(fù)的災(zāi)難恢復(fù)
(2)主備
數(shù)據(jù)庫集群標(biāo)志著開發(fā)的第二個(gè)階段。在集群中,主節(jié)點(diǎn)讀取和寫入數(shù)據(jù)。一個(gè)或多個(gè)備份節(jié)點(diǎn)接收事務(wù)日志并應(yīng)用它們,提供具有一定延遲的讀取功能。
主備的災(zāi)難恢復(fù)
盡管這個(gè)解決方案涉及到集群的概念,但它仍然基于一個(gè)整體數(shù)據(jù)庫。可擴(kuò)展性僅限于讀操作,不能擴(kuò)展寫操作。當(dāng)然與前一代解決方案相比,其恢復(fù)時(shí)間目標(biāo)(RTO)減少到幾分鐘,恢復(fù)點(diǎn)目標(biāo)(RPO)減少到幾秒。
Amazon Aurora使用跨區(qū)域讀副本的邏輯復(fù)制,是建立在該技術(shù)上的早期云數(shù)據(jù)庫服務(wù)之一。
具有跨區(qū)域讀副本的Aurora邏輯復(fù)制
近年來,Aurora在這一設(shè)計(jì)的基礎(chǔ)上提供了全球數(shù)據(jù)庫服務(wù)。該服務(wù)通過存儲(chǔ)復(fù)制技術(shù),將數(shù)據(jù)從源區(qū)域異步復(fù)制到目的區(qū)域。如果源區(qū)域出現(xiàn)故障,服務(wù)可以立即切換到備份集群?;謴?fù)時(shí)間目標(biāo)(RTO)可以減少到幾分鐘,恢復(fù)點(diǎn)目標(biāo)(RPO)不到一秒。
(3)多活災(zāi)難恢復(fù)
在多活災(zāi)難恢復(fù)中,一個(gè)數(shù)據(jù)庫為同一份數(shù)據(jù)副本提供至少三個(gè)讀和寫服務(wù)節(jié)點(diǎn),并且數(shù)據(jù)庫可以根據(jù)工作負(fù)載向外或向內(nèi)擴(kuò)展。這種功能背后的需求來自廣泛的互聯(lián)網(wǎng)規(guī)模應(yīng)用程序,這些應(yīng)用程序需要更高的性能、更低的延遲、更高的可用性、彈性擴(kuò)展性和數(shù)據(jù)庫的彈性。
傳統(tǒng)的分片數(shù)據(jù)庫基于一個(gè)或多個(gè)列共享數(shù)據(jù),形成了多活。分片解決方案通過事務(wù)日志復(fù)制實(shí)現(xiàn)災(zāi)難恢復(fù)。例如,谷歌公司曾經(jīng)維護(hù)過一個(gè)非常大的MySQL分片系統(tǒng)。這個(gè)解決方案提供了某種程度的可擴(kuò)展性,但不能隨著碎片的增加而提高災(zāi)難恢復(fù)能力。其性能將顯著下降,維護(hù)成本將大幅上升。因此,分片是多活的過渡解決方案。
近年來,基于Raft或Paxos共識(shí)協(xié)議的無共享數(shù)據(jù)庫發(fā)展迅速。他們解決了以上提到的可擴(kuò)展性和可用性挑戰(zhàn)。多活的主要參與者包括TiDB和CockroachDB。他們的數(shù)據(jù)庫及其災(zāi)難恢復(fù)技術(shù)使大多數(shù)遺留數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫服務(wù)(RDS)過時(shí)。
3、具有分布式數(shù)據(jù)庫的多活災(zāi)難恢復(fù)
以下了解應(yīng)用于分布式數(shù)據(jù)庫的多活災(zāi)難恢復(fù)。例如,TiDB是一個(gè)開源的、高可用性的分布式數(shù)據(jù)庫。它將每個(gè)表或分區(qū)劃分為較小的TiDB區(qū)域,并將這些TiDB區(qū)域中的數(shù)據(jù)的多個(gè)副本存儲(chǔ)在不同的TiKV節(jié)點(diǎn)上。這就是所謂的數(shù)據(jù)冗余。TiDB采用Raft共識(shí)協(xié)議,因此當(dāng)數(shù)據(jù)發(fā)生更改時(shí),只有在事務(wù)日志同步到大多數(shù)數(shù)據(jù)副本時(shí)才返回事務(wù)提交。這極大地提高了數(shù)據(jù)庫恢復(fù)點(diǎn)目標(biāo)(RPO)。事實(shí)上,在大多數(shù)情況下恢復(fù)點(diǎn)目標(biāo)(RPO)是0。這確保了數(shù)據(jù)的一致性。此外,TiDB的架構(gòu)將其存儲(chǔ)引擎和計(jì)算引擎分離開來。這允許用戶根據(jù)工作負(fù)載的變化擴(kuò)展TiDB節(jié)點(diǎn)和TiKV存儲(chǔ)節(jié)點(diǎn)。
TiDB的存儲(chǔ)架構(gòu)
(1)典型的多區(qū)域容災(zāi)解決方案
下圖顯示了TiDB如何交付典型的多區(qū)域?yàn)?zāi)難恢復(fù)解決方案。
TiDB的多區(qū)域容災(zāi)解決方案
以下是TiDB容災(zāi)架構(gòu)的關(guān)鍵術(shù)語:
- TiDB區(qū)域:TiDB的調(diào)度和存儲(chǔ)單元。
- 區(qū)域:兩個(gè)地點(diǎn)或城市。
- 可用性區(qū)域(AZ):獨(dú)立的高可用性(HA)分區(qū)。在大多數(shù)情況下,可用性區(qū)域(AZ)是一個(gè)區(qū)域中相距較近的兩個(gè)數(shù)據(jù)中心或城市。
- L:Raft組的Leader副本。
- F:Raft組中的Follower副本。
在上圖中,每個(gè)區(qū)域包含數(shù)據(jù)的兩個(gè)副本。它們位于不同的可用性區(qū)域(AZ)中,整個(gè)集群跨越三個(gè)區(qū)域。區(qū)域1通常處理讀寫請(qǐng)求。區(qū)域2用于在區(qū)域1發(fā)生災(zāi)難后的故障轉(zhuǎn)移,它還可以處理一些對(duì)延遲不敏感的讀負(fù)載。區(qū)域3是保證即使在區(qū)域1完成時(shí)仍能達(dá)成共識(shí)的副本。這種典型的配置稱為“2-2-1”架構(gòu)。這種架構(gòu)不僅確保了災(zāi)難恢復(fù),而且為業(yè)務(wù)提供了多活能力。在這一架構(gòu)中:
- 最大的容錯(cuò)目標(biāo)可以位于區(qū)域級(jí)別。
- 可以擴(kuò)展寫作能力。
- 恢復(fù)點(diǎn)目標(biāo)(RPO)為0。
- 恢復(fù)時(shí)間目標(biāo)(RTO)可以設(shè)置為1分鐘甚至更短。
許多分布式數(shù)據(jù)庫供應(yīng)商經(jīng)常向他們的用戶推薦這種架構(gòu)作為災(zāi)難恢復(fù)解決方案。例如,CockroachDB推薦他們的3-3-3配置來實(shí)現(xiàn)區(qū)域級(jí)災(zāi)難恢復(fù);Spanner為多區(qū)域部署提供2-2-1配置。但是,當(dāng)區(qū)域1和2同時(shí)不可用時(shí),這一解決方案不能保證高可用性。一旦區(qū)域1完全關(guān)閉,如果區(qū)域2上的任何一個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)問題,則可能會(huì)導(dǎo)致系統(tǒng)性能下降,甚至數(shù)據(jù)丟失。如果需要多區(qū)域級(jí)別的容錯(cuò)目標(biāo)(FTT),或者需要嚴(yán)格的系統(tǒng)響應(yīng)時(shí)間,則仍然需要將這一解決方案與事務(wù)日志復(fù)制技術(shù)相結(jié)合。
(2)使用變更數(shù)據(jù)捕獲增強(qiáng)的多區(qū)域?yàn)?zāi)難恢復(fù)
TiCDC是TiDB的增量數(shù)據(jù)復(fù)制工具。它獲取TiKV節(jié)點(diǎn)上的數(shù)據(jù)變化,并與下游系統(tǒng)同步。TiCDC具有與事務(wù)日志復(fù)制系統(tǒng)類似的架構(gòu),但它具有更強(qiáng)的可擴(kuò)展性,并且在災(zāi)難恢復(fù)場(chǎng)景中與TiDB協(xié)同工作良好。
以下配置包含兩個(gè)TiDB集群。區(qū)域1和區(qū)域2共同組成集群1,這是一個(gè)由5個(gè)副本組成的集群。區(qū)域1包含兩個(gè)副本,用于提供讀寫操作,區(qū)域2包含兩個(gè)副本,用于在區(qū)域1發(fā)生災(zāi)難時(shí)進(jìn)行快速故障轉(zhuǎn)移。區(qū)域3包含一個(gè)用于在Raft組中達(dá)到quorum的副本。區(qū)域3中的集群2作為災(zāi)難恢復(fù)集群。它包含三個(gè)副本,以便在區(qū)域1和區(qū)域2發(fā)生災(zāi)難時(shí)提供快速故障轉(zhuǎn)移。TiCDC處理兩個(gè)集群之間數(shù)據(jù)更改的同步。這種增強(qiáng)的架構(gòu)可以稱為2-2-1:1。
使用TiCDC的TiDB多區(qū)域?yàn)?zāi)難恢復(fù)
這種看似復(fù)雜的配置實(shí)際上具有更高的可用性。它可以實(shí)現(xiàn)多區(qū)域級(jí)別的最大容錯(cuò)目標(biāo),恢復(fù)點(diǎn)目標(biāo)(RPO)以秒為單位,恢復(fù)時(shí)間目標(biāo)(RTO)以分鐘為單位。對(duì)于單個(gè)區(qū)域,如果完全不可用,恢復(fù)時(shí)間目標(biāo)(RTO)為0。
(3)災(zāi)難恢復(fù)解決方案比較
在下表中,對(duì)本文中提到的容災(zāi)解決方案進(jìn)行了比較:
4、結(jié)語
經(jīng)過30多年的發(fā)展和幾個(gè)不同的發(fā)展階段,災(zāi)難恢復(fù)技術(shù)如今已經(jīng)進(jìn)入了多活階段。
而使用無共享架構(gòu),TiDB等分布式數(shù)據(jù)庫結(jié)合了多副本技術(shù)和日志復(fù)制工具,將數(shù)據(jù)庫容災(zāi)帶入多區(qū)域時(shí)代。
原文鏈接:https://dzone.com/articles/how-the-disaster-recovery-solutions-for-cloud-data