摘要:GaussDB(for Redis)的雙活解決方案,支持同域主備、同域雙主、異地主備、異地雙主四大應用場景,提供了安全可靠的容災能力。 一場火災引發的思考 2021年3月10日,歐洲某雲服務提供商的數據中心發生火災,當地消防部門出動上百名消防員才將大火撲滅,受影響的伺服器共托管了約360萬個網 ...
摘要:GaussDB(for Redis)的雙活解決方案,支持同域主備、同域雙主、異地主備、異地雙主四大應用場景,提供了安全可靠的容災能力。
一場火災引發的思考
2021年3月10日,歐洲某雲服務提供商的數據中心發生火災,當地消防部門出動上百名消防員才將大火撲滅,受影響的伺服器共托管了約360萬個網站,火災過後,這些受影響的網站大多處於關閉狀態。
機房火災、網路異常、電力故障、自然災害等極端場景,對互聯網業務的連續運行有著巨大的威脅。
在安全組、反親和、多可用區部署等能力加持下,如今的雲服務已能夠給客戶業務帶來比“自建”更可靠的保障。在面對上述極端災害場景中,雲服務也能提供更高級的防範方案——雙活容災。
誰說Redis不能雙活容災?
今天我們來聊聊全世界機房裡的主力資料庫服務——Redis。作為業務剛需,Redis有兩大類典型應用場景:
1)緩存
Redis作為資料庫緩存,搭配MySQL或其他關係型資料庫使用。一旦緩存故障失效,高併發的流量請求將對下游資料庫造成嚴重衝擊,無法繼續支撐高併發業務,雪崩甚至可能導致系統完全不可用。
2)主資料庫
Redis獨立存儲核心數據,兼顧持久化與高併發訪問。一旦Redis發生嚴重故障,將造成用戶核心數據丟失以及關鍵業務不可用。
可見Redis的穩定性是企業要考慮的TOP問題。但是由於數據無法可靠存儲、架構不穩定等原因,開源Redis很難像MySQL那樣做出穩定可靠的雙活系統,這也是國內雲廠商很少主推Redis雙活容災的原因。
在華為內部,比如華為商城、流程IT平臺等大型業務,對資料庫(尤其是MySQL、Redis)都有很高的可靠性要求。在與這類企業級項目的聯合演進過程中,雲原生資料庫GaussDB(for Redis)推出了企業級的雙活容災方案,支持四大應用場景,為業務的持續運行保駕護航。
企業級雙活容災,要看GaussDB(for Redis)
GaussDB(for Redis)的雙活容災是基於GaussDB NoSQL存算分離架構,建立可靠的數據傳輸鏈路,實現兩個實例間數據同步。如果實例A遇到突發故障導致不可用,客戶的業務可以快速接入實例B,避免業務長時間受損。
從原理上看,資料庫實例內增加高可靠性的Rsync數據同步服務,實時監控WAL增量日誌,解析後將數據同步到目標實例。
上圖中實線表示實例A向實例B同步數據的路徑,虛線表示實例B向實例A同步數據的路徑,雙活解決方案支持配置為單向同步或雙寫同步。實例A和實例B可以部署在同一個Region,也可以部署在不同的Region。
因此,將兩個GaussDB(for Redis)實例的部署位置和主備角色進行不同組合,能搭建出不同形態的雙活容災組網,客戶可以根據自身的業務規劃和使用場景自由選擇。
GaussDB(for Redis)雙活容災:四大應用場景
接下來我們詳細聊一下GaussDB(for Redis)雙活容災的不同組網形態。
同域雙活部署在同一Region,通過對等連接打通網路,對等連接無帶寬費用,同步時延在毫秒級,又分為同域主備模式和同域雙主模式。
異地雙活部署在不同Region,可以是同一城市的不同Region互通,也可以是全球不同城市互通,通過跨域的雲連接打通網路,需要根據業務的寫流量來配置合適大小的帶寬。
綜上,GaussDB(for Redis)雙活容災共支持四大應用場景:
同域主備模式
在同域主備模式下,主實例可讀可寫,備實例只讀,數據從主實例單向同步到備實例。如果主實例發生故障,可以將備實例角色變更為主實例,業務繼續從新的主實例接入處理讀寫操作。
同域主備模式適合在同Region低成本獲取容災能力、有讀寫分離訴求的業務場景。相比同域雙主模式具備更高的數據一致性,不擔心雙實例寫衝突的問題,相比異地雙活的成本更低。
同域雙主模式
在同域雙主模式下,兩個實例都是可讀可寫,任一實例都可以發起數據同步,雙實例不涉及業務切流。
同域雙主模式適合在同Region低成本獲取容災能力、有雙寫訴求的業務場景。相比同域主備模式,兩個實例的計算節點都在處理讀寫業務,資源利用率更高,但需要在業務層面避免key衝突的問題,相比異地雙活的成本更低。
異地主備模式
在異地主備模式下,主實例可讀可寫,備實例只讀,數據單向同步,主實例故障時由備實例繼續處理業務。
異地主備模式適合期望有跨Region容災能力、有讀寫分離訴求的業務場景,例如金融服務或核心用戶數據等。相比異地雙主模式具備更高的數據一致性,不擔心雙實例寫衝突的問題,相比同域雙活具備跨Region容災能力。
異地雙主模式
在異地雙主模式下,兩個實例都是可讀可寫,數據雙向同步,任一實例發生故障則由另一實例繼續處理業務。
異地雙主模式適合期望有跨Region容災能力、有雙寫訴求、或者異地業務希望在就近Region接入資料庫獲取更低時延的業務場景,例如廣告競價、推薦系統等。相比異地主備模式,資源利用率更高,需要避免key衝突的問題,相比同域雙活具備跨Region容災能力。
雙活容災方案已在超大規格集群上驗證穩定可靠
華為內部某重要業務部門在超大規模集群(1w+個vCPU算力,1000+TB數據量)上,使用了基於GaussDB NoSQL統一架構的雙活解決方案,在故障演練中進行了一系列嚴苛的可靠性測試,其中包括模擬機房斷電、網路故障等場景,最終,GaussDB(for Redis)的雙活容災能力,充分滿足了業務部門對RTO和RPO等指標的嚴格要求。
總結
綜上所述,GaussDB(for Redis)的雙活解決方案,支持同域主備、同域雙主、異地主備、異地雙主四大應用場景,提供了安全可靠的容災能力,具體亮點如下:
- 組網靈活,按需搭建雙活容災系統
- 支持秒級快照,快速搭建雙活關係
- 支持實時同步最新數據,同Region時延毫秒級
- 採用多線程非同步併發模式發送數據,按Key保序
- 基於WAL單調遞增特性,採用滑窗機制確保可靠傳輸
- 採用Reactor事件管理的機制,全流程批量高效發送
- 支持異常重傳,解決網路抖動導致的丟包或延遲現象
- 支持斷點續傳,每個DB持久化應答過的同步日誌序號,在發生宕機、網路隔離、進程重啟等故障場景,可從該位置進行續傳。
附錄
- 本文作者:華為雲資料庫GaussDB(for Redis)團隊
- 更多產品信息,歡迎訪問官方博客:bbs.huaweicloud.com/blogs/248875