五分鐘技術趣談 | 數據庫容災體系建設分析
Part 01
容災介紹
我們通常會把故障分為三類,一是主機故障,二是機房故障,三是地域故障。每類故障都有各自的誘發因素,而從主機到機房再到地域,故障發生概率依次越來越小,而故障的影響卻越來越大。
圖片
容災能力的建設目標是非常明確的,就是要能夠應對和處理這種機房級和地域級的大規模故障,從而來保障業務的連續性。近幾年,業界也發生了多次數據中心級別的故障,對相關公司的業務和品牌產生了非常大的負面影響。當前容災能力已經成為眾多企業建設信息化系統的必選項。
Part 02
容災架構演進
容災架構從最早期的同城主備到同城多活形態,再演化到異地多活,根據這個過程可以將容災分為容災1.0、容災2.0、容災3.0三個階段。
- 容災1.0:容災體系圍繞數據建設,多以主-備的方式部署,但備用機房不承擔流量,基本上都是單活結構。
- 容災2.0:容災視角從數據轉換為應用系統,業務具有同城雙活或同城多活能力,采用同城雙活或同城雙活加異地冷備(兩地三中心)的部署架構,除冷備以外的每個機房都有流量處理能力。
- 容災3.0:以業務為中心,多采用單元化架構,容災基于單元間的兩兩互備實現,根據單元的部署位置可以實現同城多活和異地多活。采用單元化架構的應用本身具有很好的容災能力和擴展能力。
Part 03
常見節點故障處理過程
(1)計算節點故障
分布式數據庫的計算節點多采用多實例部署。所以當一個計算節點故障后,負載均衡通過心跳檢查識別到故障,自動把請求分發到其他的計算節點上。等到該節點恢復后,負載均衡檢測到節點正常服務,會將請求重新均衡到該計算節點上。
(2)存儲節點主庫故障
當分布式數據庫的存儲節點集群出現主庫故障,集群的健康檢查會監測到主庫發生故障,并通過多次探測確認故障。如果主庫故障確認,系統會控制存儲節點集群進行主從切換,將一個從庫節點選舉為新的主庫節點,并調整集群的主從同步關系。同時集群拓撲的元數據會進行更新,推送到集群的各節點,包括查詢路由相關信息。這樣應用層的寫操作會發送到新的主庫。此時存在故障的副本節點,根據集群的副本策略和恢復機制,恢復系統會觸發一個恢復任務,重新恢復一個新的從庫節點加入集群。
(3)存儲節點從庫故障
當分布式集群的一組主從出現從庫節點故障,集群的健康檢查模塊會監測到從庫故障,并通過多次探測來確認故障。如果確認從庫故障,系統會將該從庫進行下線處理。同時集群拓撲的元數據會進行更新,將該故障的從庫節點從集群信息中刪除,并推送到集群的各節點進行更新。查詢路由相關的信息更新后,應用層的讀操作不再發送到故障的從庫。此時由于存在一個故障的副本節點,根據集群的副本策略和恢復機制,系統的恢復系統會觸發一個恢復任務,重新恢復一個新的從庫節點加入集群。
(4)網絡故障
專線網絡抖動異常一般會帶來延時和丟包,集群的計算服務節點、存儲服務節點、管控節點之間的通訊都有完備的超時重試機制,少量的延時丟包不會影響查詢性能,跨專線的主從延時會增大,待網絡質量恢復后即恢復正常。
Part 04
容災架構案例介紹
(1)美團數據庫容災方案
美團的容災架構主要包括兩種,一種是N+1容災架構,一種是SET化架構。
N+1架構:在業界也稱散部或者多AZ部署?案,將容量為C的系統部署在N+1個機房,每個機房能提供至少C/N的容量,掛掉任何一個機房時,剩余系統仍能支撐C的容量。該方案的核心是把容災能力下沉到PaaS組件來完成,在出現機房級或者地域級故障的時候,由各個PaaS組件獨立完成容災切換,實現業務恢復。整體架構如下圖所示,業務上表現是多機房、多活形態,數據庫采用這種主從架構,單機房處理寫流量、多機房的負載均攤讀流量。下面要講“數據庫容災體系建設實踐” 就是面向N+1架構的。
圖片
SET化架構:這是一種偏應用層的容災架構,它將應用,數據,基礎組件按照統一的維度切分成多個單元,每個單元處理一部分閉環流量。業務以單元作為部署單位,通過單元互備方式實現同城容災或者異地容災。一般金融業務或者超大規模的業務會選擇此類架構,它的好處就是流量可以閉環且資源隔離,具有很強的容災能力和跨域擴展能力,不過SET化架構的落地需要業務系統做大量的改造,運維管理也較為復雜。簡化示意圖如下:
圖片
(2)阿里數據庫容災方案
DT大淘系數據是阿里巴巴集團典型的數據中臺,DT引入了Hologres的讀寫分離能力,并結合全鏈路的主備雙鏈路,在降低單庫出問題概率的同時構建異地主備容災,建立產品核心指標的“復活甲”,通過秒級切換的高可用容災方案,高吞吐寫入和靈活查詢互不干擾,分析查詢QPS增長80%的同時,查詢抖動明顯減少,讓業務擁有底氣和信心去應對隨時可能出現的不可控風險,為整個產品和業務決策分析提供穩定支持。
圖片
(3)浪潮數據庫容災方案
與傳統的數據災備和復制技術不同,浪潮K-DB和DSG SuperSync方案是針對Oracle數據庫的異構災備和數據復制方案,提供了基于邏輯的交易復制方式。該方式通過直接捕獲Oracle數據庫的交易,將數據庫的改變邏輯復制到K-DB數據庫中,實現Oracle系統數據庫和K-DB系統數據庫數據的一致性,從而提高系統數據的安全性和靈活性,降低災備系統TCO,系統架構如下:
圖片
K-DB Standby Cluster提供同構數據庫的高可用性、數據的保護、災難恢復功能,DSG SuperSync提供異構數據庫的高可用性、數據的保護、災難恢復功能。
(4)騰訊數據庫容災方案
客戶業務場景最常用騰訊云數據產品主要是redis,cdb,mongoDB以及TDSQL。
圖片
Part 05
結束語
系統建設過程中高可用自動切換、容災能力運營治理、大規模故障觀測、故障止損預案、容災恢復等方面都會有很多的需求和挑戰,也是所有公司業務發展壯大后必須面對的一件事,歡迎大家能跟我們一起交流這個過程,共同進步。