天天看點

雲資料庫Redis版主從熱備高可用方案引言架構HA子產品切換場景與Redis-Sentinel對比結束

高可用(high available)是線上生産環境所必不可少的重要條件,阿裡雲資料庫redis版作為一款成熟穩定的資料庫産品,針對redis的特性也支援高可用,本文将介紹雲redis是如何實作這一方案。

目前雲redis有主從版和叢集版兩種架構,本次主要針對主從版做ha的解析。

下圖為主從版架構:

雲資料庫Redis版主從熱備高可用方案引言架構HA子產品切換場景與Redis-Sentinel對比結束

由圖可知,雲redis執行個體有主備兩個節點,平時隻有master提供服務,slave隻做熱備不提供通路,slave通過slaveof指令挂載到master上,不斷從master接收資料,保證master當機時雲redis仍可提供服務。

每一個雲redis執行個體都會配置設定一個vip并與dns綁定,vip經過slb後直接通路master不再有其他中間層,通路redis的鍊路為dns-->vip-->slb-->redis(master)。

在底層原理上叢集版ha與主從版基本相同,隻是實作時稍有差異,因為鍊路上在vip和後端redis之間多了一層proxy的路由轉發,是以在做後端rs切換時無需更改vip指向,而是去更新proxy的路由表。

ha作為一個獨立的系統子產品,遠端探測雲redis的健康狀況,當發生執行個體不可用時及時主備切換以保證服務品質。

健康檢查的邏輯很簡單,通過用戶端連接配接redis并發送ping指令,如果傳回pong則說明redis健康,其他情況則說明redis異常,檢測邏輯用僞代碼來說明:

需要ha真正做切換的異常情況有以下幾種:

redis工作在單線程模式下,接收到的所有指令都會進入隊列串行處理,當遇到一些耗時指令如flushall、keys * 等,很容易造成用戶端等待逾時。此時如果逾時時間設定不準确的話,ha遠端探測就容易誤判redis不健康,而且單單一個ping指令也不能完全獲得redis的程序狀态。

redis自帶的ha方案sentinel就是依賴ping來做健康檢查,通過配置sentinel down-after-milliseconds mymaster,來決定當ping逾時多久沒有收到回複就認為redis當機,但是這樣做有一定風險,比如一個64g的執行個體flushall清空資料大概為2分鐘,如果逾時時間設定為60s那麼很容易造成誤判。

為了解決這個問題,我們對redis核心進行了改造,增加了一個狀态線程來專門為ha提供健康檢查的服務。同時也新增了一個狀态端口,狀态線程監聽這個端口,ha探測時也通過這個端口與redis進行互動,不會對redis服務主線程造成影響。通過新增的狀态線程也可以做很多額外的探測,例如讀寫性能、磁盤io情況等。

我們把redis主線程監聽的端口叫做redis_port,狀态線程監聽的端口叫做status_port新的健康檢查邏輯如下:

當健康檢查發現redis出現不可用情況時就要準備進行主備切換,在主備切換真正執行前需要額外做一些工作:

在執行切換前要檢查slave狀态以確定切換後執行個體是可服務的,否則即使切換也是無效的,比如兩台主機都當機這種極端情況。

同時對vpc類型的執行個體做了特殊處理,因為我們是沒有辦法通路使用者自定義網絡的vip的,這時需要把對vip的健康檢查換成對master的健康檢查。

當redis出現不可用且滿足切換條件時,真正開始執行主備切換動作。同時切換動作也支援主動的任務切換和被動的故障切換,兩者主要差別在是否需要slave等待master達到同步狀态,以下對主備切換做詳細說明:

通過以上方案,雲資料庫redis版sla可以達到99.99%,僅在主從都發生當機的極端情況無法服務。

當機或是程序異常退出是最為嚴重的情況,此時ha遠端探測到redis無法連接配接會立即切換,實際測試整個過程可以實作秒級切換。

在主備切換後原來的master變成了slave,為了保障雲redis依舊高可用,會有另外的元件來探測slave的可用性,當備庫發生當機時觸發備庫重搭功能,時刻保證主從雙節點熱備。

redis2.8版本自帶redis-sentinel的高可用解決方案,通過一個或多個sentinel執行個體組成的sentinel系統來監測master和slave,具體方案有很多資料可以查閱不再贅述。

我們在生産環境中并沒有采用自帶的sentinel,主要是出于以下幾點考慮:

由于上述問題sentinel不能作為一個統一的ha系統來管理所有雲redis資源,而為每個雲redis單獨搭建一套sentinel系統又會造成資源浪費和管理複雜度,基于此我們開發了這一套适用于雲redis的ha系統。

本文介紹了雲資料redis版ha方案,通過主從雙機熱備來保證服務高可用,健康檢查出現異常時及時進行主備切換,有效保障業務運作。

阿裡雲資料庫redis團隊誠邀加入:

<a href="https://job.alibaba.com/zhaopin/position_detail.htm?spm=0.0.0.0.l7roxq&amp;positionid=26437">https://job.alibaba.com/zhaopin/position_detail.htm?spm=0.0.0.0.l7roxq&amp;positionid=26437</a>