搜尋
首頁資料庫RedisRedis 備份、災難復原及高可用實戰的範例分析

 一、Redis簡單介紹

Redis是一個高效能的key-value非關聯式資料庫,由於其具有高效能的特性,支援高可用、持久化、多種資料結構、叢集等,使其脫穎而出,成為常用的非關聯式資料庫。

此外,Redis的使用場景也比較多。

會話快取(Session Cache)

Redis快取會話有非常好的優勢,因為Redis提供持久化,在需要長時間維持會話的應用程式場景中,如購物車場景這樣的場景中能提供很好的長會話支持,能為使用者提供很好的購物體驗。

全頁快取

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

佇列

Redis支援list和set操作,因此它很適合用作訊息佇列平台。我們常透過Reids的佇列功能做購買限制。例如到假日或推廣期間,進行一些活動,對用戶購買行為進行限制,限制今天只能購買幾次商品或一段時間內只能購買一次。也比較適合適用。

排名

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

發布/訂閱

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

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

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

Redis在各個公司都得以應用,其多種優良特性和豐富的應用場景是其存在的原因。那麼隨之而來的問題和風險就來了。 Redis雖然應用場景豐富,但部分公司在實踐Redis應用程式的時候還是相對保守使用單節點部署,那為日後的維護帶來了安全風險。

我曾在2015年處理過一起因單點故障導致的業務中斷問題。當Redis最初被部署時,它使用的是單節點部署而不是分散式部署,並且沒有考慮容災方面的問題。

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

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

三、非分散式場景下Redis應用程式的備份與容災

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

常用Redis主從複製

方案一

Redis 备份、容灾及高可用实战的示例分析

一般情況下,這種結構最為常見,即一個主節點和兩個從節點。客戶端寫資料的時候是寫Master節點,讀的時候,是讀取兩個Slave,這樣實現讀的擴展,減輕了Master節點讀負載。

方案二

Redis 备份、容灾及高可用实战的示例分析

這種架構同樣是一個Master和兩個Slave。 Master和Slave1使用keepalived來實現VIP遷移的方式有所不同。 Client連線Master的時候是透過VIP進行連線的。避免了方案一IP更改的情況。

Redis主從複製優點與不足

優點

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

實作讀取擴充。使用主從複製架構, 一般都是為了實現讀取擴充。 Master主要實作寫入功能, Slave實作讀取的功能

不足

#架構方案一

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

Redis 备份、容灾及高可用实战的示例分析

此時需要經過以下操作(假設提升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)。

Redis 备份、容灾及高可用实战的示例分析

之後需要經過以下操作:

  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同一給定的master無法再繼續提供服務,就會執行故障偵測,這會降低誤報的可能性。

五、Redis Sentinel功能

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

監控

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

#通知

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

自動故障轉移

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

設定提供者

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

  • 六、Redis Sentinel架構

  • #2、Redis Sentinel實作原理


Redis 备份、容灾及高可用实战的示例分析

################################ Sentinel叢集對自身和Redis主從複製進行監控。當發現Master節點故障時,會經過以下步驟:############1)Sentinel之間進行選舉,選出一個leader,由選出的leader進行failover##### #######Sentinel領導人從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進行複製############以上failover操作均有sentinel自己獨自完成,完全無需人工幹預。 ###

以上是Redis 備份、災難復原及高可用實戰的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
REDIS:了解其架構和目的REDIS:了解其架構和目的Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

REDIS與SQL數據庫:關鍵差異REDIS與SQL數據庫:關鍵差異Apr 25, 2025 am 12:02 AM

Redis和SQL數據庫的主要區別在於:Redis是內存數據庫,適用於高性能和靈活性需求;SQL數據庫是關係型數據庫,適用於復雜查詢和數據一致性需求。具體來說,1)Redis提供高速數據訪問和緩存服務,支持多種數據類型,適用於緩存和實時數據處理;2)SQL數據庫通過表格結構管理數據,支持複雜查詢和事務處理,適用於電商和金融系統等需要數據一致性的場景。

REDIS:它如何充當數據存儲和服務REDIS:它如何充當數據存儲和服務Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS與其他數據庫:比較分析REDIS與其他數據庫:比較分析Apr 23, 2025 am 12:16 AM

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,Redis在高性能、低延遲應用中表現出色。

REDIS的角色:探索數據存儲和管理功能REDIS的角色:探索數據存儲和管理功能Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

REDIS:現實世界的用例和示例REDIS:現實世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具