天天看點

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

作者:大資料與人工智能分享

OLAP MPP叢集容災系統能滿足對T+1,T+0.X等非實時的批處理的數倉場景的容災需求,但是RPO,RTO會較大,往往達到小時級;随着數倉業務對連續性要求的不斷提高,尤其是實時數倉的場景,需要建設實時的雙活系統來滿足對業務的連續性要求;當主庫出現故障時,要求備庫立即進行接管,對于實時數倉,要建立RPO,RTO達到分鐘級或者秒級甚至到0的準實時或者實時雙活系統才能保障主備庫資料不丢失以及資料的一緻性,進而保障業務的連續性。OLAP MPP分析型叢集的容災以及雙活在技術實作上、災備級别要求上都與線上生産系統的OLTP事務資料庫有較大差異。如事務資料庫具有完備的WAL(write ahead logging)事務日志,災備可以通過事務日志實作資料庫的備份、雙活複制、異地容災等;OLAP MPP分析型資料庫為追求大吞吐性能,無法完全按照事務資料庫基于事務日志的容災以及雙活設計方案,目前業界采用的主流容災和雙活方案主要有:資料同步模式、ETL模式、雙活模式,具體說明如下:

資料同步方式

主備叢集間的資料同步是雙活容災系統建設的基礎,高效、穩定、一緻性的同步是雙活容災系統穩定運作的關鍵;本節列舉下市面上常見的資料同步方式,以及各自的優缺點;

1.1 基于事務日志、資料塊的資料同步

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:直接同步變化的資料增量,隻适合資料變化量較少的資料倉庫。

劣勢:對主資料庫有侵入性,一旦主庫繁忙,同步時效低;面對變化資料量大的場景,不适合。

1.2 基于備份恢複的資料同步

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

利用備份恢複工具進行資料的全量備份和增量備份,存放到某個存儲媒體上,然後恢複到備庫上。

優勢:采用産品已有的備份恢複工具來實作。

劣勢:要求資料庫支援增備能力,且往往鎖等待嚴重;備庫對外隻能提供讀;對備庫進行恢複時不能馬上提供服務,備份恢複無法達到與流式同步方式的RPO, 做不到RPO=0的程度, RTO時間較長,而且需要較大空間儲存備份的資料。

1.3 基于導入導出的資料同步

基于上層應用對主庫導出,備庫導入,業務需要設計對增量資料的識别,對業務的設計和排程有較高的侵入性。以作業為機關,需要應用記住該作業産生的相關表,等作業完成後,主庫發起對這些表的導出操作,備庫進行導入操作。

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:可以基于表級進行資料同步,基于導入導出,導出的是文本檔案,是以主庫和備庫可以是異構的,例如主庫是産品A,備份是産品B。

劣勢:對主庫的應用排程和資料庫設計侵入性高,實施困難。

雙活容災模式

本節介紹雙活容災的一些實作方案,有些是産品能力,有些是應用解決方案,供大家參考;

2.1 基于ETL雙加工雙活模式

采用兩套獨立的排程系統進行作業的加工,由上層應用進行控制。

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:不依賴于資料庫産品自生的容災能力,有應用自己進行控制,不依賴産品。一般采取主庫對外提供持續服務,待主備庫資料準實時或批後校驗一緻後,再開放備庫對外服務。

劣勢:因為主備庫同時跑ETL作業,需要同時消耗主備庫的CPU,記憶體和IO資源;另外對存在不确定值的SQL函數導緻主備叢集資料不一緻,例如now、random、row_number排序這種同一份資料産生不同結果集的函數。建議使用者修改SQL語句,明确唯一取值、唯一排序,確定主備資料的一緻性。若主備叢集資料發生不一緻場景,主要以主庫資料為準,覆寫備庫,該同步過程可以采用“基于事務日志以及資料塊的資料同步”技術。

2.2 基于産品提供的中間件進行排程的雙活模式

産品級排程中間件是由OLAP産品提供一個元件,對外提供産品統一接口,實作主備叢集SQL的排程、校驗和同步(同步采用資料庫自生的基于事務日志以及資料塊的資料同步的底層技術);客戶業務隻需在産品級中間件下發任務;産品級中間件會自動排程任務:加載語句可以同時發送給主備庫,實作雙加載;DML語句可以靈活配置,可以主備庫同時執行後進行校驗,也可以主庫執行完成後把增量資料同步到備庫;隻有主備庫的資料校驗成功後,本次任務才算執行成功。

另外,考慮到不确定值的SQL函數導緻主備叢集資料不一緻(例如now、random、row_number排序這種同一份資料産生不同結果集的函數),如果采用主備叢集雙加工的排程方式,則建議使用者修改SQL語句,明确唯一取值、唯一排序,確定主備庫執行SQL結果的一緻性,部分簡單的系統時間函數,可以通過中間件改寫,保障SQL執行結果的一緻性;

建議采用的最佳方案是采用“基于事務日志以及資料塊的資料同步”的同步技術,直接将主資料庫SQL執行結果的日志以及變化的資料塊同步到備庫中。

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:産品級提供,對應用完全透明。

劣勢:引入了中間件作為接入服務,由于所有資料庫通路行為均通過該中間件,中間件任何異常均影響整個雙活系統的高可用,需要考慮中間件本身的高可用。

2.3 基于應用提供的中間件進行排程的雙活模式

使用者的應用加工作業連接配接主庫完成寫操作,支援兩種排程方式:

方式一:作業級實時一緻性方案,是在作業的最後一步将本作業影響的目标表增量資料同步至備庫中,同步不成功則認為該作業加工失敗。

方式二:作業級異步一緻性方案,作業的最後一步将本作業資訊記錄至同步隊列中,同步隊列處理将已完成作業資訊擷取到,并擷取作業目标表将其增量資料同步,何時同步及同步哪些表由“同步隊列處理”應用保證。當主備庫同步完成後進行資料的校驗。

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:應用控制加工邏輯,實作作業級的實時一緻性和準實時的一緻性,可靈活進行控制。主叢集資料可寫,承擔資料統計分析等資料加工業務,完成資料加工後将結果資料同步到備份叢集,備叢集可以分擔主叢集對外業務查詢服務,降低主叢集讀寫對系統資源的争搶壓力。

劣勢:對應用邏輯有侵入性,增加了應用邏輯的複雜性。

2.4 基于強一緻的實時同步的雙活模式

通過統一的排程叢集作為入口,采用虛拟叢集技術,主備叢集作為邏輯子叢集納入排程叢集的統一管理,在虛拟叢集中将兩個同樣規模和資料分布政策的子叢集之間建立鏡像關系,就稱為鏡像叢集。顧名思義,兩個鏡像叢集中的表和資料是一緻的。主備計算叢集通過建立鏡像叢集關系實作了強一緻的實時雙活,可以支援同城的實時雙活場景。

(1) 在主備計算叢集間建立鏡像關系,鏡像關系可以按表進行建立,也可以按照資料庫進行建立;

(2) 虛拟叢集中互為鏡像的兩個子叢集可以部署在同機房内,也可以部署在同城的不同機房内,對兩個子叢集之間的網絡品質和網絡帶寬有一定要求;當兩個子叢集位于不同機房時,就形成了同城異地的災備;在同城異地部署中,可以在備份機房中部署1個coordinator節點,實作管理叢集的資料災備;

(3) 業務直接連接配接其中的一個子叢集進行操作,下發DDL、DML、DQL等SQL語句,對于DDL,将同時下發到互為鏡像的兩個叢集中執行;對于DML、DQL操作則直接下發到目前應用的預設子叢集中執行,DML的執行結果采用鍊式轉發方式傳輸到另一個子叢集中;鏡像叢集中的資料修改操作,需要在兩個子叢集中統一送出後才傳回執行結果給使用者;

(4) 如果主備任何一個計算叢集發生故障,應用無需做任何改變,排程叢集對應用透明的完成了對業務的切換,如上圖中的VC1叢集和VC2叢集為鏡像叢集關系,業務預設直接在VC1上執行,當VC1發生整體故障後,排程叢集自動切換業務連接配接到VC2上來執行;

(5) 如果管理叢集在主機房中的所有節點發送故障,需要人工修改叢集管理節點的配置為備份機房中的管理節點為管理叢集的唯一節點後,業務就可通過備份機房中的管理節點下發SQL任務。

OLAP MPP分布式關系型資料庫的雙活容災系統的設計

優勢:通過統一的排程叢集對外提供服務,主備計算叢集通過鏡像關系實作了産品級的強一緻的實時雙活。主備計算叢集的任何一個出現整體故障時,排程叢集會把任務自動下發給沒有故障的主備計算叢集,對應用完全透明,應用不需要做任何切換。

劣勢:主備計算叢集的事務是強一緻的,要求主備計算叢集間為萬兆網,不适用于跨廣域網的異地實時雙活。

繼續閱讀