Hologres 從V1.1版本開始,針對線上生產環境高可用的場景,提供了共享存儲的主從多實例部署方式,在該模式下支持故障隔離,負載隔離,有效支撐了高可用場景。本文介紹高可用方案的一些基本原理以及如何配置共享存儲的主從多實例。
單實例自動恢復的高可用方案
Hologres計算節點均為容器調度(即下圖中的Worker Node),資源管理器(Resource Manager)負責周期性健康檢查。當出現1分鐘容器響應超時(可能是內存溢出、硬件故障、軟件Bug等原因導致),Resource Manager會自動拉起新的計算節點,并遷移Shard職責到新的節點上(例如Worker Node3響應超時,Resource Manager拉起Worker Node4取代Worker Node3),實現系統狀態的快速恢復。數據狀態保存在盤古分布式存儲系統中,無需從計算節點遷移,計算節點輕量無狀態,系統可以快速從故障中恢復。該方案為當前每個實例內部默認啟用,當系統發生故障時,無需手工運維介入,系統可以自動恢復。在恢復期間,如果查詢算子需要訪問恢復中的節點,則查詢會立即失敗。Hologres從V1.1版本開始,采用全新恢復機制,節點恢復速度在一分鐘左右,比早期版本提速5~10倍。
共享存儲的多實例高可用方案
技術原理
在單實例方案中,采用的是故障實時監測、節點替換的方案,在節點恢復時存在一定的服務不可用周期,對于關鍵業務場景,需要更高級別的高可用方案,支持故障隔離、負載隔離。Hologres在 V1.1版本,支持采用共享存儲的多實例部署方案。在該方案中,主實例具備完整能力,數據可讀可寫,權限、系統參數可配置,而只讀從實例處于只讀狀態,所有的變更都通過主實例完成,如下圖所示。主從實例之間計算資源不共享,負載隔離,故障隔離。所有實例共享同一份數據和訪問控制,僅有一份存儲費用。
實例之間內存狀態自動實時同步,同一個Region毫秒級同步,同步以實例為單位。當主實例寫入時,系統會自動將主實例的數據同步給從實例,因此從實例的在不使用的情況下,CPU和內存也有一定的開銷(約為主實例的1/8
),同時也建議主從實例的規格配置差異不要太過明顯。更多技術原理請參見高可用技術揭秘。
使用說明
當前最多可以配置十個只讀從實例,各實例之間的資源配置可以不同,但不應該有明顯差異,所有實例之間Shard數相同。
不同只讀從實例具備獨立的訪問Endpoint,在使用上,通過Endpoint隔離不同的業務場景。
從Hologres V1.3.27版本開始,主從實例的延遲閾值從
20
分鐘調整為60
分鐘,超過60分鐘后,若從實例的資源使用率長期達到100%
,從實例會自動重啟,以此來緩解同步延遲。建議從實例資源使用率長期達到100%
時,對從實例的查詢適當進行性能調優或者擴容實例。只讀從實例綁定主實例的過程中主實例可以正常使用,綁定過程中不影響主實例。
只讀從實例綁定主實例大概需要3~5分鐘,綁定完成后,方可使用只讀從實例。
無法連接未綁定主實例的只讀從實例。
MaxCompute直讀Hologres存儲層數據時,若Hologres配置為主從架構,則僅支持配置連接URL為主實例,不支持配置為從實例。詳情請參見開啟Hologres外部表存儲直讀功能。
應用場景建議
通用類場景:
建議將主實例作為數據寫入和數據加工實例,只讀從實例作為數據分析實例,保障讀寫分離。
多場景:
對于在線服務類的查詢業務,由于對于查詢的P99穩定性要求較高,建議單獨使用一個只讀從實例,有效保障線上服務高可用。
對于OLAP查詢類,可與在線服務從實例分開,單獨使用一個數據分析從實例,保證兩種讀分離,避免大Query對線上服務查詢的影響。
配置共享存儲的主從實例
共享存儲多實例使用限制如下。
僅Hologres V1.1及以上版本支持作為主實例,如果您的實例是V1.1以下版本,請您使用自助升級或加入實時數倉Hologres交流群申請升級實例,詳情請參見如何獲取更多的在線支持?。
只讀從實例未綁定主實例時,無法連接只讀從實例。
主實例的版本和只讀從實例版本必須一致。
主實例和只讀從實例必須處于同一個Region。
綁定和解綁操作的權限說明
您需要為RAM用戶授予AliyunHologresFullAccess權限策略,方可進行綁定和解綁只讀從實例操作。更多關于RAM角色權限的介紹請參見授予RAM用戶權限。
配置共享存儲多實例的高可用操作步驟如下。
購買新的Hologres實例
重要只讀從實例需要與主實例處在同一個Region中。
購買新實例時,實例類型選擇為只讀從實例,只讀從實例的主實例ID選擇該可用區下需要綁定的主實例,其他參數說明請參見購買Hologres。
綁定只讀從實例
完成購買后,只讀從實例會直接綁定到您在售賣頁面上選擇的主實例,待只讀從實例達到運行正常狀態時,您即可使用只讀從實例。
使用實例
使用共享存儲多實例的過程中,需要注意如下事項。
配置完成后,可以用只讀從實例的Endpoint提供線上服務。
所有的操作,包括建表、用戶授權等都在主實例內完成,只讀從實例只能讀取數據。
只讀從實例會自動擁有主實例內的所有對象,包括用戶、表等,在權限控制層,不能為只讀從實例單獨創建用戶。