久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis中怎么實現備份和容災

154次閱讀
沒有評論

共計 3330 個字符,預計需要花費 9 分鐘才能閱讀完成。

Redis 中怎么實現備份和容災,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1. 會話緩存(Session Cache)

Redis 緩存會話有非常好的優勢,因為 Redis 提供持久化,在需要長時間保持會話的應用場景中,如購物車場景這樣的場景中能提供很好的長會話支持,能給用戶提供很好的購物體驗。

2. 全頁緩存

在 WordPress 中,Pantheon 提供了一個不錯的插件 wp-redis,這個插件能以最快的速度加載你曾經瀏覽過的頁面。

3. 隊列

Reids 提供 list 和 set 操作,這使得 Redis 能作為一個很好的消息隊列平臺來使用。

我們常通過 Reids 的隊列功能做購買限制。比如到節假日或者推廣期間,進行一些活動,對用戶購買行為進行限制,限制今天只能購買幾次商品或者一段時間內只能購買一次。也比較適合適用。

4. 排名

Redis 在內存中對數字進行遞增或遞減的操作實現得非常好。所以我們在很多排名的場景中會應用 Redis 來進行,比如小說網站對小說進行排名,根據排名,將排名靠前的小說推薦給用戶。

5. 發布 / 訂閱

Redis 提供發布和訂閱功能,發布和訂閱的場景很多,比如我們可以基于發布和訂閱的腳本觸發器,實現用 Redis 的發布和訂閱功能建立起來的聊天系統。

此外還有很多其它場景,Redis 都表現的不錯。

二,Redis 使用中單點故障問題

正是由于 Redis 具備多種優良特新,且應用場景非常豐富,以至于 Redis 在各個公司都有它存在的身影。那么隨之而來的問題和風險也就來了。Redis 雖然應用場景豐富,但部分公司在實踐 Redis 應用的時候還是相對保守使用單節點部署,那為日后的維護帶來了安全風險。

在 2015 年的時候,曾處理過一個因為單點故障原因導致的業務中斷問題。當時的 Redis 都未采用分布式部署,采用單實例部署,并未考慮容災方面的問題。

當時我們通過 Redis 服務器做用戶購買優惠商品的行為控制,但后來由于未知原因 Redis 節點的服務器宕機了,導致我們無法對用戶購買行為進行控制,造成了用戶能夠在一段時間內多次購買優惠商品的行為。

這種宕機事故可以說已經對公司造成了不可挽回的損失了,安全風險問題非常嚴重,作為當時運維這個系統的我來說有必要對這個問題進行修復和在架構上的改進。于是我開始了解決非分布式應用下 Redis 單點故障方面的研究學習。

三,非分布式場景下 Redis 應用的備份與容災

Redis 主從復制現在應該是很普遍了。常用的主從復制架構有如下兩種架構方案。

常用 Redis 主從復制

方案一

這是最常見的一種架構,一個 Master 節點,兩個 Slave 節點。客戶端寫數據的時候是寫 Master 節點,讀的時候,是讀取兩個 Slave,這樣實現讀的擴展,減輕了 Master 節點讀負載。

方案二

這種架構同樣是一個 Master 和兩個 Slave。不同的是 Master 和 Slave1 使用 keepalived 進行 VIP 轉移。Client 連接 Master 的時候是通過 VIP 進行連接的。避免了方案一 IP 更改的情況。

Redis 主從復制優點與不足

優點

鴻蒙官方戰略合作共建——HarmonyOS 技術社區

實現了對 master 數據的備份,一旦 master 出現故障,slave 節點可以提升為新的 master,頂替舊的 master 繼續提供服務

實現讀擴展。使用主從復制架構,一般都是為了實現讀擴展。Master 主要實現寫功能, Slave 實現讀的功能

不足

架構方案一

當 Master 出現故障時,Client 就與 Master 端斷開連接,無法實現寫功能,同時 Slave 也無法從 Master 進行復制。

此時需要經過如下操作(假設提升 Slave1 為 Master):

1)在 Slave1 上執 slaveof no one 命令提升 Slave1 為新的 Master 節點。

2)在 Slave1 上配置為可寫,這是因為大多數情況下,都將 slave 配置只讀。

3)告訴 Client 端 (也就是連接 Redis 的程序) 新的 Master 節點的連接地址。

4)配置 Slave2 從新的 Master 進行數據復制。

架構方案二

當 master 出現故障后,Client 可以連接到 Slave1 上進行數據操作,但是 Slave1 就成了一個單點,就出現了經常要避免的單點故障(single point of failure)。

之后需要經過如下操作:

1)在 Slave1 上執行 slaveof no one 命令提升 Slave1 為新的 Master 節點

2)在 Slave1 上配置為可寫,這是因為大多數情況下,都將 Slave 配置只讀

3)配置 Slave2 從新的 Master 進行數據復制

可以發現,無論是哪種架構方案都需要人工干預來進行故障轉移(failover)。需要人工干預就增加了運維工作量,同時也對業務造成了巨大影響。這時候可以使用 Redis 的高可用方案 -Sentinel

四,Redis Sentinel 介紹

Redis Sentinel 為 Redis 提供了高可用方案。從實踐方面來說,使用 Redis Sentinel 可以創建一個無需人為干預就可以預防某些故障的 Redis 環境。

Redis Sentinel 設計為分布式的架構,運行多個 Sentinel 進程來共同合作的。運行多個 Sentinel 進程合作,當多個 Sentinel 同一給定的 master 無法再繼續提供服務,就會執行故障檢測,這會降低誤報的可能性。

五,Redis Sentinel 功能

Redis Sentinel 在 Redis 高可用方案中主要作用有如下功能:

監控

Sentinel 會不斷的檢查 master 和 slave 是否像預期那樣正常運行

通知

通過 API,Sentinel 能夠通知系統管理員、程序監控的 Redis 實例出現了故障

自動故障轉移

如果 master 不像預想中那樣正常運行,Sentinel 可以啟動故障轉移過程,其中的一個 slave 會提成為 master,其它 slave 會重新配置來使用新的 master,使用 Redis 服務的應用程序,當連接時,也會被通知使用新的地址。

配置提供者

Sentinel 可以做為客戶端服務發現的認證源:客戶端連接 Sentinel 來獲取目前負責給定服務的 Redis master 地址。如果發生故障轉移,Sentinel 會報告新的地址。

六,Redis Sentinel 架構

七,Redis Sentinel 實現原理

Sentinel 集群對自身和 Redis 主從復制進行監控。當發現 Master 節點出現故障時,會經過如下步驟:

1)Sentinel 之間進行選舉,選舉出一個 leader,由選舉出的 leader 進行 failover

2)Sentinel leader 選取 slave 節點中的一個 slave 作為新的 Master 節點。對 slave 選舉需要對 slave 進行選舉的方法如下:

a) 與 master 斷開時間

如果與 master 斷開的時間超過 down-after-milliseconds(sentinel 配置)* 10 秒加上從 sentinel 判定 master 不可用到 sentinel 開始執行故障轉移之間的時間,就認為該 slave 不適合提升為 master。

b) slave 優先級

每個 slave 都有優先級,保存在 redis.conf 配置文件里。如果優先級相同,則繼續進行。

c) 復制偏移位置

復制偏移紀錄著從 master 復制數據復制到哪里,復制偏移越大表明從 master 接受的數據越多,如果復制偏移量也一樣,繼續進行選舉

d) Run ID

選舉具有最小 Run ID 的 Slave 作為新的 Master

流程圖如下:

3) Sentinel leader 會在上一步選舉的新 master 上執行 slaveof no one 操作,將其提升為 master 節點

4)Sentinel leader 向其它 slave 發送命令,讓剩余的 slave 成為新的 master 節點的 slave

5)Sentinel leader 會讓原來的 master 降級為 slave,當恢復正常工作,Sentinel leader 會發送命令讓其從新的 master 進行復制

看完上述內容,你們掌握 Redis 中怎么實現備份和容災的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計3330字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 湾仔区| 图木舒克市| 原阳县| 曲周县| 葫芦岛市| 蛟河市| 综艺| 德昌县| 抚远县| 玉龙| 惠州市| 息烽县| 安国市| 冷水江市| 全椒县| 西吉县| 五大连池市| 师宗县| 和林格尔县| 陇南市| 平原县| 拜城县| 东光县| 南昌县| 安仁县| 肃南| 正定县| 东台市| 陈巴尔虎旗| 息烽县| 县级市| 册亨县| 绥阳县| 拉孜县| 湘潭县| 土默特左旗| 天气| 聊城市| 台东市| 城口县| 大庆市|