如果發生 Azure Cache for Redis 快取失敗,當節點關閉時,可能會遺失數據。 Redis 持久性使您可以將快取實例中儲存的數據持久化。 如果發生硬體失敗,快取執行個體會在重新上線時,透過來自持續性檔案的資料解除凍結。
本文說明 Redis 持續性,以及如何設定和管理進階和企業層 Azure Redis 快取實例中的數據持續性。 數據持續性功能無法在基本層或標準層中使用,且在 Enterprise 和 Enterprise Flash 層中處於預覽狀態。
保存數據的能力是提升快取實例持久性的重要方式,因為它會將所有快取數據儲存在記憶體中。 持續性應該是 Azure Redis 高可用性和災害復原 策略的重要部分。
重要
數據持續性功能可為非預期的 Redis 節點失敗提供復原能力。 數據持續性不是數據備份或時間點復原 (PITR) 功能。 如果損毀的數據寫入 Redis 實例,也會保存損毀的數據。 若要備份 Redis 實例,請使用 導出 功能。
可用性範圍
層 | 基本、標準 | 進階 | Enterprise,Enterprise Flash |
---|---|---|---|
可用的 | 否 | 是的 | 是 (預覽) |
Redis 數據持續性的類型
Azure Redis 提供兩種類型的數據持續性: Redis 資料庫 (RDB) 格式和 僅限附加檔案 (AOF) 格式。
RDB 持久性 會以二進位格式保存快取的快照集,並將其儲存在 Azure 儲存帳戶中。 您可以設定備份頻率,以判斷保存快照集的頻率。 如果發生同時停用主要和複本快取的災難性事件,則快取會自動使用最新的快照集重新建構。 如需詳細資訊,請參閱 RDB 優點 和 RDB 缺點。
AOF 持續性 會將每個寫入作業儲存至記錄,並將記錄每秒儲存一次至 Azure 記憶體帳戶。 如果發生同時停用主要和復本快取的災難性事件,快取就會使用預存寫入作業自動重建。 如需詳細資訊,請參閱 AOF 優點 和 AOF 缺點。
需求和限制
數據持續性功能可為非預期的 Redis 節點失敗提供復原能力。 數據持續性不是數據備份或 PITR 功能。 如果損毀的數據寫入 Redis 實例,損毀的數據也會保存。 若要備份 Redis 實例,請使用 導出 功能。
Azure Cache for Redis 持續性功能旨在將數據在數據遺失後自動還原至相同的快取。 您無法匯入持久化的資料檔案至新的快取或現有的快取。
若要在快取間移動數據,請使用 匯入和匯出數據 功能。
若要產生任何可新增至新快取的數據備份,您可以使用定期匯出數據的 PowerShell 或 Azure CLI 來使用自動化腳本。
資料加密
由於 Redis 的持久性會產生靜態資料,因此務必要將這些資料加密。 加密選項會根據您使用的 Azure Redis 層而有所不同。
設定數據持續性
您可以使用 Azure 入口網站、Azure Resource Manager (ARM) 範本、PowerShell 或 Azure CLI 來建立和設定進階或企業層 Azure Redis 快取的數據持續性。
先決條件
- 若要建立並新增持續性至 Azure Redis 快取,您需要寫入訪問許可權和許可權,才能在 Azure 訂用帳戶中建立進階或企業層級快取。
- 針對進階層快取,您需要與快取位於相同區域中的 Azure 記憶體帳戶 來儲存快取數據。 如果您使用 受控識別 做為驗證方法,您可以在與快取不同的訂用帳戶中使用記憶體帳戶。
- 針對 Azure PowerShell 程式,您需要 安裝 Azure PowerShell,或使用 Azure Cloud Shell 搭配 Azure 入口網站中的 PowerShell 環境。
- 針對 Azure CLI 程式,您需要 安裝 Azure CLI,或使用 Azure Cloud Shell 搭配 Azure 入口網站中的 Bash 環境。
在 Azure 入口網站中設定數據持續性
在 Azure 入口網站中,您可以在建立 Azure Redis Premium 或企業層級快取實例時設定數據持續性。
使用 Azure PowerShell 設定數據持續性
您可以在建立 Azure Redis Premium 或企業層快取時,使用 Azure PowerShell 來設定數據持續性,或將持續性新增至先前建立的快取。
使用 Azure CLI 設定數據持續性
您可以在建立 Azure Redis Premium 或企業層快取時,使用 Azure CLI 來設定數據持續性,或將持續性新增至先前建立的快取。
永續性常見問題集
本節包含 Azure Redis 快取持續性常見問題的解答。
- 我可以在現有的快取上啟用持續性嗎?
- 我可以同時啟用 AOF 和 RDB 持續性嗎?
- 持續性是否可與異地復寫搭配運作?
- 我應該選擇哪一種持續性模型?
- 如果我調整為不同的大小,然後還原調整之前的備份,會發生什麼事?
- 針對持續性,我可以在兩個不同的快取之間使用相同的儲存體帳戶嗎?
- 我是否需支付記憶體數據持續性使用的費用?
- RDB 和 AOF 持續性寫入儲存體的頻率為何? 我應該啟用軟刪除嗎?
- 記憶體帳戶上的防火牆例外狀況是否會影響持續性?
- 如何檢查儲存體帳戶上是否已啟用虛刪除?
- 我可以在與快取所在的訂用帳戶不同的訂用帳戶中使用儲存帳戶嗎?
RDB 持久性
AOF 持續性
- 何時應該使用第二個儲存體帳戶?
- AOF 持續性會影響快取輸送量、延遲或效能嗎?
- 我要如何移除第二個儲存體帳戶?
- 什麼是重寫,以及它如何影響我的快取?
- 在啟用 AOF 下調整快取預期會發生什麼事?
- 我的 AOF 資料在儲存體中的組織方式為何?
- 如果我有多個複本,是否可以啟用 AOF 持續性?
可以對先前建立的快取啟用永續性嗎?
是,您可以在快取建立時設定持續性,並在現有的 Premium、Enterprise 或 Enterprise Flash 快取上設定持續性。
我可以同時啟用 AOF 和 RDB 持續性嗎?
否,您可以啟用 RDB 或 AOF,但不能同時啟用兩者。
持續性如何與異地複寫搭配運作?
啟用異地複寫時,資料持續性無法正常運作。
我應該選擇哪一種持續性模型?
AOF 持續性每秒寫入記錄一次,而 RDB 持續性會根據設定的備份間隔儲存備份。 RDB 持續性對輸送量和效能的影響比 AOF 持續性低。
如果您的主要目標是將數據遺失降到最低,而且您可以處理較低的快取吞吐量,請選擇 AOF 永續性保存。 如果您想要在快取上維持最佳輸送量,但仍想要有數據復原的機制,請選擇 RDB 持續性。
如需詳細資訊,請參閱 RDB 優點、 RDB 缺點、 AOF 優點和 AOF 缺點。
AOF 持續性是否會影響快取的輸送量、延遲或效能?
AOF 持續性會影響輸送量。 因為 AOF 同時在主要和複本程式上執行,因此您會看到具有 AOF 持續性的快取的 CPU 和伺服器負載高於沒有 AOF 持續性的相同快取。 AOF 提供記憶體中資料的最佳一致性,因為每個寫入和刪除在保存上只會有幾秒鐘的延遲。 代價是 AOF 需要更大量計算。
只要 CPU 和伺服器負載都小於 90%,輸送量就會受到懲罰,但快取則會正常運作。 超過 90% 的 CPU 和伺服器負載,輸送量會降低,而且快取處理的所有命令延遲都會增加。 延遲會增加的原因,是因為 AOF 持續性會在主要和複本處理序上執行,進一步增加使用中節點上的負載,並將持續性置於資料的關鍵路徑上。
如果我將規模調整為不同的大小,並且還原了在調整操作前建立的備份,會發生什麼事?
- 如果您調整為較大的大小,則不會有任何作用。
- 如果您將大小調整為較小,並且您的自定義資料庫設定大於新大小的資料庫限制,則這些資料庫中的數據將無法恢復。 如需詳細資訊,請參閱我的自訂資料庫設定在調整期間會受到影響嗎?
- 如果您將尺寸縮小,而較小的尺寸無法容納上次備份中的所有數據,那麼在還原過程中,密鑰將被刪除。 通常會使用 allkeys-lru 收回原則來收回金鑰。
針對持續性,我可以在兩個不同的快取之間使用相同的儲存體帳戶嗎?
否,您必須使用不同的記憶體帳戶。 每個快取都必須設定自己的儲存體帳戶,才能使用持續性。
重要
另請使用個別的儲存體帳戶進行持續性,並在快取上執行定期匯出作業。
我需支付用於數據持續性的記憶體的費用嗎?
- 針對進階快取,系統會根據儲存體帳戶的定價模型,向您收取所使用的儲存體費用。
- 針對 Enterprise 和 Enterprise Flash 快取,受控磁碟記憶體會包含在價格中,而且不會產生額外費用。
RDB 和 AOF 持續性寫入 Blob 的頻率有多高,我是否該啟用虛刪除?
RDB 和 AOF 持續性寫入儲存體 Blob 頻率可為每小時、每幾分鐘或每秒鐘。 若一般資料大小的快取同時也會在每秒執行寫入作業,虛刪除的成本很快就會大漲。 在記憶體帳戶上啟用虛刪除也表示 Azure Redis 無法藉由刪除舊的備份數據來將記憶體成本降到最低。
最好避免在用於 Azure Redis 高階層數據持續性的儲存帳戶上啟用軟刪除。 如需虛刪除成本的詳細資訊,請參閱定價和計費。
在建立快取之後,可以變更 RDB 備份頻率嗎?
是,您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell 來變更 RDB 持續性的備份頻率。
為什麼我的 RDB 備份頻率是 60 分鐘,備份的間隔卻超過 60 分鐘?
在先前的備份程式成功完成之前,RDB 持續性備份頻率間隔不會啟動。 如果備份頻率為 60 分鐘,且需要備份程式 15 分鐘才能完成,則下一個備份不會在上一次備份的開始時間 75 分鐘之後開始。
建立新的備份時,舊的 RDB 備份會發生什麼事?
除了最新的備份外,所有 RDB 持續性備份都會自動刪除。 這項刪除作業可能不會立即發生,但較舊的備份不會無限期保存。 如果您使用 Premium 層用於持久性存儲,且儲存帳戶已開啟虛刪除,則現有的備份會繼續保留在虛刪除狀態中。
何時應該使用第二個儲存體帳戶?
當您預期快取上有比一般 SET 作業更高的作業時,請針對 AOF 持續性使用次要儲存體帳戶。 使用次要存儲帳戶有助於確保您的快取不會超過存儲頻寬限制。 此選項僅適用於進階層快取。
我要如何移除第二個儲存體帳戶?
您可以透過將 AOF 持續性的第二個儲存體帳戶設定為與第一個儲存體帳戶相同,來移除第二個儲存體帳戶。 若要變更現有快取的設定,請在快取頁面左側導覽功能表的 [設定] 底下選取 [數據持續性]。 若要完全停用持續性,請在 [數據持續性] 頁面上選取 [已停用]。
什麼是重寫,其對快取有何影響?
當 AOF 檔案變得夠大時,重寫會自動排入快取上的佇列。 重寫作業會調整 AOF 檔案大小,只包含建立目前資料集所需的一組基本作業。
在重寫期間,您可以預期會更快達到效能限制,特別是在處理大型資料集時。 當 AOF 檔案變大時,重寫頻率較低,但需要相當長的時間才會發生。
在啟用 AOF 下調整快取預期會發生什麼事?
如果調整時的 AOF 檔案很大,則預期縮放作業會比平常更久,因為它會在調整完成之後重載檔案。 另請參閱 如果我調整為不同的大小,並在調整作業之前還原備份,會發生什麼情況?
我的 AOF 資料在儲存體中的組織方式為何?
當您使用進階層時,儲存在 AOF 檔案中的資料會針對每個分區分成多個分頁 Blob。 根據預設,一半的 Blob 會儲存在主要儲存體帳戶中,另一半則儲存在次要儲存體帳戶中。 將資料分割到多個頁面 Blob 和兩個不同的儲存帳戶,可以提升效能。
如果寫入快取的尖峰速率不高,則可能不需要此額外的效能。 在此情況下,可以移除次要記憶體帳戶組態,以及儲存在單一主要記憶體帳戶中的所有 AOF 檔案。 下表顯示每個定價層所使用的分頁 Blob 總數。
進階層 | Blob |
---|---|
P1 | 每個分區 8 個 |
P2 | 每個分區 16 個 |
P3 | 每個分區 32 個 |
P4 | 每個分區 40 個 |
啟用叢集時,快取中的每個分區會有一組專屬的分頁 Blob,如上表所示。 例如,具有三個分區的 P2 快取會將其 AOF 檔案分散到 48 個分頁 Blob:每個分區有 16 個 Blob,具有三個分區。
重寫後,儲存體中會有兩組 AOF 檔案。 重寫會在背景發生,並附加至第一組的檔案。 重寫期間傳送至快取的 SET 作業會將 附加至第二組檔案。
如果在重寫期間發生失敗,則會暫時儲存備份。 重寫完成後會立即刪除備份。 如果儲存體帳戶已開啟虛刪除,則會套用虛刪除設定,而且現有的備份會繼續處於虛刪除狀態。
記憶體帳戶上的防火牆例外狀況是否會影響持續性?
是。 針對進階層中的持續性,在 記憶體帳戶上使用防火牆設定 可防止持續性功能運作。
您可以檢視 Errors 計量來檢查儲存資料中的 錯誤。 此指標指出,由於儲存體帳戶的防火牆限制或其他問題,快取是否無法保存資料。
若要搭配已設定防火牆的記憶體帳戶使用數據持續性,請使用 受控識別型驗證 來連線到記憶體。 使用受控識別會將快取實例新增至 受信任的服務清單,讓防火牆例外狀況更容易套用。 如果您使用金鑰而非受控識別來授權記憶體帳戶,則記憶體帳戶上的防火牆例外狀況通常會中斷持續性程式。
如果我有多個複本,是否可以啟用 AOF 持續性?
使用進階層時,您無法搭配多個複本使用 AOF 持續性。 在企業和 Enterprise Flash 層中,複本架構比較複雜,但在區域備援部署中使用企業快取時,支援 AOF 持續性。
如何檢查儲存體帳戶上是否已啟用虛刪除?
在 Azure 入口網站中,選取快取用於持續性的儲存帳戶,然後在左側導覽功能表中的 [資料管理] 下選取 [資料保護]。 在 [資料保護] 頁面上,檢查是否已啟用 [啟用 Blob 的虛刪除]。 如需 Azure 儲存體帳戶中虛刪除的詳細資訊,請參閱啟用 Blob 的虛刪除。
我可以在與快取所在的訂用帳戶不同的訂用帳戶中使用儲存帳戶嗎?
只有在使用受控識別作為記憶體帳戶驗證方法時,才能在不同的訂用帳戶中選擇記憶體帳戶。
相關內容
深入了解 Azure Cache for Redis 功能。