阿里雲HBase推出普惠性高可用服務,獨家支援使用者的自建、混合雲環境叢集
HBase可以支援百TB資料規模、數百萬QPS壓力下的毫秒響應,適用於大資料背景下的風控和推薦等線上場景。阿里雲HBase服務了多家金融、廣告、媒體類業務中的風控和推薦,持續的在高可用、低延遲、低成本方向上進行最佳化。目前單叢集承諾可用性99.9%,SSD機型上可以做到請求毛刺99.5% < 50ms,以及新上線的表內冷熱分離可以加速熱資料訪問效能、減少冷資料儲存成本並且在API上對使用者透明。為了進一步滿足客戶在可用性以及低延遲上的訴求,阿里雲HBase將提供以主備架構為平臺,以冗餘、併發、隔離、降級等全方位服務為支撐的高可用解決方案,目標提供99.99%可用性、99.9%請求小於50ms。目前高可用專案一期已經完成,本文將介紹主備架構以及一鍵切換能力。
HBase單叢集可用性
一個HBase系統包含了Zookeeper、HDFS、HBase三個元件。其中Zookeeper在資料和計算上都進行了冗餘,且是一個可自愈系統,單節點故障可在秒級恢復。HBase對Zookeeper是輕依賴,一般不會出現大問題。HDFS是一個Master-Slave模式的分散式檔案系統,存在中心節點Namenode,Namenode支援以HA方式部署,單Namenode故障可秒級恢復,在兩個NN都當機的情況下依然可以重啟自愈,但恢復時間取決於回放日誌大小,在分鐘級別。資料多副本冗餘,Datanode單節點當機不中斷服務。HBase也是一個Master-Slave模式的分散式系統,其中HMaster不參與讀寫路徑,因此HMaster當機不中斷服務,但長期當機會影響負載均衡、Failover等能力,HMaster支援HA方式部署。HBase還有一個單點是Meta服務,它隨機選擇一個RegionServer節點作為宿主,如果meta服務不可用則所有請求路由會失效,導致整體不可用。由於客戶端有路由快取,meta服務停機不會立即造成不可用。HBase資料分片使用Range Partition的方式,每一個Region由一個RegionServer服務,即HBase的計算服務是0冗餘,因此當RegionServer故障時多個分片不可服務。HBase Failover機制可以自愈,單RegionServer當機恢復時間在分鐘級,多個RegionServer當機恢復時間在10分鐘~1小時時間不等。
單叢集HBase高可用部署
元件角色高可用機制故障影響Zookeeper資料、計算冗餘單點當機秒級服務HDFSNamenode雙節點HA部署單點當機秒級恢復,雙節點當機恢復時間在分鐘級Datanode資料、計算冗餘單點當機不中斷服務HBaseHMaster雙節點HA部署不影響資料讀寫Meta服務單點,可自愈影響全域性不可用Region單點,可自愈區域性不可用,單點分鐘級恢復,多點恢復時間可達小時級別
核心或執行環境Bug造成HBase自愈不可控
case1 某金融公司自建HBase因ECS重啟導致WAL資料破壞,HBase Failover無法進行,叢集不可用無法自愈
case2 某影片公司自建HBase叢集Meta資料陷入不一致無法恢復,造成分割槽無法上線,部分表不可用無法自愈
case3 某媒體公司IO壓力較大經常觸發空間洩漏Bug,導致空間不足叢集當機無法自愈
以上是真實的案例,Bug是不可避免的,未知Bug處理考驗核心團隊的技術實力,需要具備外科手術的能力,但其處理時間是不可預期的。
雲HBase主備高可用方案
故障恢復時間可預知的高可用系統,故障發生時可以在分鐘級別恢復讀寫能力。實現方案選擇經典的主備模式,也支援主主模式。備叢集部署在同城的不同機房內,在資源層面完全隔離,軟體可部署不同的版本,最大程度保持兩個叢集的獨立性。從經驗資料出發,單機房故障恢復時間的上限為1個小時,在這1個小時內另一個機房也發生故障的機率非常低,有兩種情況除外:第一種是城市級災難,這個需要異地容災方案;第二種是故障源於業務流量增長,系統過載,此時的解決方案是限流或者擴容。這兩種情況不在本文設計考慮之內。系統提供一鍵切換能力,不需要客戶端重啟,每一個客戶端在收到切換訊號時會自動完成連線的切換,客戶端的切換是併發進行的,所有客戶端可以在10秒內完成切換。
高可用方案可以獨立提供給自建使用,支援自建和雲HBase混合主備。如果你已經擁有一個HBase叢集,可以方便的彈出一個冗餘備叢集,備叢集的建表和資料複製都是自動完成。當故障發生時,可以在控制檯切換流量到備庫,待主叢集恢復後再把流量切回。雲HBase高可用服務是一個獨立的服務,可以看做是基於HBase之上的一箇中介軟體,支援混合雲是我們的設計原則,雲上同VPC下的自建HBase、EMR HBase、雲HBase可以方便的進行主備混合使用,對於IDC自建HBase或者它雲上的HBase則需要使用者自行解決網路聯通。
簡單易用,HBase客戶端從普通模式轉化為高可用模式不需要修改程式碼。雲HBase會提供一個外掛整合到HBase客戶端,並且為高可用提供一個新的Endpoint。這個Endpoint就是簡單的 ip+port,用來替換單叢集模式下的Zookeeper地址。使用者可以選擇核心表進行高可用建設,非核心表依然保持單叢集來降低成本。對於高可用的表,可以透過高可用客戶端進行建立、修改和刪除,控制檯會保證主備叢集後設資料的一致性。目前我們支援0.96、0.98、1.x、2.x、雲HBase增強版等多個版本。
0.961.x2.x雲增強版0.96YESNONOYES1.xNOYESYESYES2.xNOYESYESYES雲增強版YESYESYESYES
版本主備相容性列表
控制檯提供一鍵切換不需要重啟客戶端,提供AliHBaseConnector作為原生HBase客戶端的一個外掛,外掛內部會封裝主備切換邏輯。客戶端啟動時會從BDS獲取主備地址資訊同時建立一個高可用的命令通道,控制檯發出的切換命令透過該通道到達客戶端,客戶端自動的斷開舊連結,開啟備庫連結並重試請求。
綜上所述,雲HBase主備高可用架構如下圖:
-
資料同步
雲HBase並沒有採用開源的Replication方案,主要的原因包括:
HBase Replication抗熱點能力差,每臺機器只能處理自己的日誌
HBase Replication Failover的設計存在缺陷,導致一旦RS當機就會出現長時間同步延遲
HBase Replication與核心爭搶資源,無法獨立擴容
HBase Replication的管理依賴表屬性配置,配置項很多,在混合雲模式下很難維護
BDS Replication是一個獨立的資料複製服務,提供延遲百毫秒級別的雙向資料同步能力。BDS Replication可以獨立的擴容縮容,它不需要磁碟,可以更好的管理成本。
-
主備一致性
雲HBase主備採用的是非同步複製,提供基於版本的最終一致性。寫入主庫的一行資料在同步到備庫時,會保持和主庫一致的版本號。雲HBase高可用目前僅支援最終一致性切換,在切換時主備可能存在秒級的不一致。對於風控、推薦、畫像類的應用,最終一致性是滿足需求的。如果您使用了CheckAndPut、CheckAndDelete這樣的介面則會出現一致性問題,此種情況請聯絡雲HBase提供技術諮詢。
-
配置服務
配置服務有兩個作用,儲存主備叢集的地址資訊和通知切換命令。高可用客戶端在啟動時會訪問該服務載入主備叢集地址資訊。透過控制檯執行的切換命令也會由配置服務通知所有的客戶端。配置服務本身採用了冗餘來保障儲存和訊息的高可用。
-
監控
高可用服務可以實時顯示主備叢集的狀態。主、備角色在初始配置時確定不能更改,但狀態"active/standby"是可變化的,處於"active"狀態的叢集是目前客戶端訪問的叢集。提供主備叢集雙向同步鏈路的實時延遲展示,同時提供客戶端連結數量監控,使得使用者可以準確的判斷切換進度。
雲HBase高可用使用方式
如果您已經使用了雲HBase並且希望增加一個備庫,只需如下步驟
1 購買一個BDS叢集用於管理主備
2 購買一個空的雲HBase叢集作為備庫
3 輸入主備兩個叢集的例項ID建立高可用訪問地址
4 開始您的高可用之旅
如果您使用的是ECS自建叢集或者EMR HBase,希望增加一個備庫,只需如下步驟
1 購買一個BDS叢集用於管理主備
2 購買一個空的雲HBase叢集作為備庫
3 配置域名對映和安全組(會提供相關的服務一鍵解決)
4 輸入主備兩個叢集的地址資訊建立高可用訪問地址
5 開始您的高可用之旅
本文為雲棲社群原創內容,未經允許不得轉載。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947441/viewspace-2663490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WEB叢集- 高可用服務Web
- 高可用叢集環境搭建-留檔
- 生產環境的redis高可用叢集搭建Redis
- 高可用Hadoop平臺-HBase叢集搭建Hadoop
- Apache httpd和JBoss構建高可用叢集環境Apachehttpd
- Eureka高可用叢集服務端和客戶端配置服務端客戶端
- 阿里雲應用高可用服務公測釋出阿里
- 實現Kubernetes跨叢集服務應用的高可用
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- 獨家揭祕阿里雲SQLServerAlwaysOn叢集版重大突破阿里SQLServer
- Oracle RAC 高可用性體系結構與叢集 單例項環境與 Oracle RAC 環境對比Oracle單例
- 高可用的MongoDB叢集MongoDB
- Spring Cloud:使用Eureka叢集搭建高可用服務註冊中心SpringCloud
- 自建Kubernetes叢集如何使用阿里雲CSI儲存元件阿里元件
- PostgreSQL repmgr高可用叢集+keepalived高可用SQL
- RedHat AS 3.0下高可用性叢集配置(轉)Redhat
- HBase可用性分析與高可用實踐
- hadoop之旅9-centerOS7 : hbase叢集環境搭建HadoopROS
- PostgreSQL patroni高可用叢集SQL
- MongoDB高可用叢集搭建MongoDB
- zookeeper 高可用叢集搭建
- Redis叢集與高可用Redis
- mysql高可用叢集之MMMMySql
- Redis快取高可用叢集Redis快取
- 10、redis哨兵叢集高可用Redis
- 高可用mongodb叢集(分片+副本)MongoDB
- 天翼雲推出全棧政務混合雲 支援私有化執行全棧
- 高可用服務之Keepalived利用指令碼實現服務的可用性檢測指令碼
- Glassfish叢集環境的搭建
- RabbitMQ和Kafka的高可用叢集原理MQKafka
- Oracle的三種高可用叢集方案Oracle
- 高可用的MongoDB叢集-實戰篇MongoDB
- Oracle 的三種高可用叢集方案Oracle
- 資料倉儲元件:HBase叢集環境搭建和應用案例元件
- 雲託管已支援一鍵搭建服務商開發環境開發環境
- RabbitMQ從零到叢集高可用(.NetCore5.0) -高可用叢集構建落地MQNetCore
- 搭建 Kubernetes 高可用叢集
- Redis高可用-主從,哨兵,叢集Redis