調整 Azure Cache for Redis 執行個體
Azure Cache for Redis 具有各種不同階層的供應項目,可讓您彈性選擇快取大小和功能。 透過調整,您可以在建立快取執行個體之後變更節點的大小、階層和數目,以符合您的應用程式需求。 本文說明如何使用 Azure 入口網站和 Azure PowerShell 與 Azure CLI 等工具來調整快取。
調整類型
基本上有兩種方式可調整 Azure Cache for Redis 執行個體:
「擴大」會增加執行 Redis 伺服器的虛擬機器 (VM) 大小,並新增更多記憶體、虛擬 CPU (vCPU) 和網路頻寬。 擴大也稱為「垂直調整」。 擴大的相反詞是「縮小」。
「擴增」會將快取執行個體分成更多相同大小的節點、透過平行處理增加記憶體、vCPU 和網路頻寬。 擴增也稱為「水平調整」或「分區化」。 擴增的相反詞為縮減。 在 Redis 社群中,擴增經常稱為「叢集 \(英文\)」。
可用性範圍
層 | 基本與標準 | 進階 | Enterprise 和 Enterprise Flash |
---|---|---|---|
相應增加 | Yes | .是 | Yes |
相應減少 | Yes | 是 | No |
擴增 | No | .是 | Yes |
縮減 | No | .是 | No |
調整時機
您可以使用 Azure Cache for Redis 的監視功能來監視快取的性能和效能。 使用該資訊來判斷何時可調整快取。
您可以監視下列計量來判斷是否需要調整。
- Redis 伺服器負載
- Redis 伺服器負載偏高表示,伺服器無法跟上所有用戶端的要求。 由於 Redis 伺服器是單一執行緒流程,因此「擴增」通常會比「擴大」更實用。 透過啟用叢集來擴增,有助於將額外負荷功能分散到多個 Redis 流程。 擴增也可協助分散 TLS 加密/解密和連線/中斷連線,以使用 TLS 加速快取執行個體。
- 擴大仍有助於減少伺服器負載,因為背景工作可以利用更多 vCPU,並釋放主要 Redis 伺服器流程的執行緒。
- Enterprise 和 Enterprise Flash 層會使用 Redis Enterprise,而不是開放原始碼 Redis。 這些階層的其中一個優點是 Redis 伺服器流程可以利用多個 vCPU。 對於多個 vCPU,這些階層中的擴大和擴增有助於減少伺服器負載。
- 記憶體使用量
- 高記憶體使用量表示就目前的快取大小而言,您的資料大小太大。 請考慮調整為具有較大記憶體的快取大小。 「擴大」或「擴增」在這裡都有效。
- 用戶端連線
- 每個快取大小都有可支援的用戶端連線數目限制。 如果您的用戶端連線接近快取大小的限制,請考慮「擴大」到較大的階層。 「擴增」不會增加支援的用戶端連線數。
- 如需快取大小連線限制的詳細資訊,請參閱 Azure Cache for Redis 價格。
- 網路頻寬
- 如果 Redis 伺服器超過可用的頻寬,用戶端要求可能會逾時,因為伺服器將資料推送至用戶端的速度不夠快。 如需查看使用的伺服器端頻寬,請檢查「快取讀取」和「快取寫入」計量。 如果您的 Redis 伺服器超過可用的網路頻寬,您應該考慮擴增或擴大至較大的快取大小 (具有較高的網路頻寬)。
- 針對使用 Enterprise 叢集原則的 Enterprise 層快取,擴增不會增加網路頻寬。
- 如需網路可用頻寬的詳細資訊 (依照快取大小顯示),請參閱Azure Cache for Redis 規劃常見問題。
- 內部 Defender 掃描
- 在 C0 和 C1 標準快取上,當內部 Defender 正在 VM 上執行掃描時,伺服器負載可能會出現不是因快取要求增加而導致的短暫峰值。 當每天在這些層級上多次執行內部 Defender 掃描時,要求延遲會更高。 C0 和 C1 層級上的快取只有單一核心可進行多工處理,並將內部 Defender 掃描和 Redis 要求的工作分割處理。 您可以透過使用多個 CPU 核心調整為較高層級供應專案 (例如 C2) 來降低影響。
- 較高層級上增加的快取大小有助於解決任何延遲問題。 此外,在 C2 層級,可支援多達 2,000 個用戶端連線。
如要進一步瞭解如何判斷要使用的快取定價層,請參閱選擇正確的層級和Azure Cache for Redis 規劃常見問題。
注意
如需如何將調整流程最佳化的詳細資訊,請參閱調整指南的最佳做法
調整 Azure Cache for Redis 的必要條件/限制
您可以擴大/縮小至不同的定價層,但具有下列限制:
- 您無法從較高的定價層調整至較低的定價層。
- 您無法從 Enterprise 或 Enterprise Flash 快取縮減到任何其他階層。
- 您無法從進階快取向下調整至標準或基本快取。
- 您無法從標準快取向下調整到基本快取。
- 您可以從基本快取調整到標準快取,但您無法同時變更大小。 如果您需要不同的大小,您可以進行後續調整作業,調整到您需要的大小。
- 您無法直接從基本快取調整至進階快取。 首先,在單一調整作業中從基本調整至標準,然後在後續的調整作業中從標準調整至進階。
- 您無法從較大的大小縮減為 C0 (250 MB) 的大小。 不過,您可以縮減為相同定價層內的任何其他大小。 例如,您可以從 C5 標準縮減為 C1 標準。
- 您無法從進階、標準或基本快取擴大至 Enterprise 或 Enterprise Flash 快取。
- 您無法在 Enterprise 與 Enterprise Flash 之間進行調整。
您可以進行擴增/縮減,但具有下列限制:
- 只有進階、Enterprise 和 Enterprise Flash 層支援「擴增」。
- 只有進階層支援「縮減」。
- 在進階層上,必須先啟用叢集,才能進行縮減或擴增。
- 在進階層中,已正式推出擴增至最多 10 個分區的支援。 最多支援 30 個分區,目前處於預覽狀態 (對於具有兩個複本的快取,分區限制為 20。使用三個複本時,分區限制為 15)。
- 只有 Enterprise 和 Enterprise Flash 層可以同時進行擴大和擴增。
如何調整 - 基本、標準和進階層
如何擴大和擴增 - Enterprise 和 Enterprise Flash 層
Enterprise 和 Enterprise Flash 層能夠在一個作業中進行擴大和擴增。 其他階層需要針對每個動作進行個別作業。
警告
Enterprise 和 Enterprise Flash 層尚未支援「縮小」或「縮減」作業。
使用 Azure 入口網站進行調整
若要調整快取,在 Azure 入口網站中瀏覽至快取,然後選取 [資源] 功能表中的 [調整]。
若要擴大,請選擇不同的快取類型,然後選擇 [儲存]。
重要
您目前只能擴大, 而無法縮小。
若要擴增,請使用容量滑桿來增加。 容量會以遞增二的方式來增加。 此數字反映要新增多少個基礎的 Redis Enterprise 節點。 此數字一律為二的倍數,其反映要針對主要和複本分區新增的節點。
重要
您目前只能擴增、增加容量, 而無法縮減。
快取調整為新層級時,會顯示 [正在調整 Redis 快取] 通知。
調整完成時,狀態會從 [正在調整] 變更為 [執行中]。
使用 PowerShell 進行調整
您可以透過 PowerShell,使用 Update-AzRedisEnterpriseCache Cmdlet 來調整 Azure Cache for Redis 執行個體。 您可以修改 Sku
屬性來擴大執行個體。 您可以修改 Capacity
屬性來擴增執行個體。 下列範例示範如何將名為 myCache
的快取調整為容量為 4 的 Enterprise E20 (25 GB) 執行個體。
Update-AzRedisEnterpriseCache -ResourceGroupName myGroup -Name myCache -Sku Enterprise_E20 -Capacity 4
使用 Azure CLI 進行調整
若要使用 Azure CLI 調整 Azure Cache for Redis 執行個體,請呼叫 az redisenterprise update 命令。 您可以修改 sku
屬性來擴大執行個體。 您可以修改 capacity
屬性來擴增執行個體。 下列範例示範如何將名為 myCache
的快取調整為容量為 4 的 Enterprise E20 (25 GB) 執行個體。
az redisenterprise update --cluster-name "myCache" --resource-group "myGroup" --sku "Enterprise_E20" --capacity 4
調整常見問題集
下列清單包含「Azure Redis 快取」規模調整相關常見問題的解答。
- 可以向上調整為 Premium 快取,或在其中調整、向下調整嗎?
- 調整之後,是否必須變更我的快取名稱或存取金鑰?
- 調整運作方式如何?
- 我是否會在調整期間遺失快取中的資料?
- 我是否可在調整之後使用進階層的所有功能?
- 我的自訂資料庫設定在調整期間會受到影響嗎?
- 是否可以在調整期間使用我的快取?
- 有異地複寫的調整限制嗎?
- 不支援的作業
- 調整需要多長的時間?
- 如何分辨調整何時完成?
- 我需要對我的用戶端應用程式進行任何變更才能使用叢集嗎?
- 如何在叢集中散發索引鍵?
- 我可以建立的最大快取大小為何?
- 所有 Redis 用戶端都支援叢集嗎?
- 啟用叢集後,要如何連接到我的快取?
- 我可以直接連接到我的快取的個別分區嗎?
- 我可以為先前建立的快取設定叢集嗎?
- 我可以設定基本或標準快取的叢集嗎?
- 我可以將叢集使用於 Redis ASP.NET 工作階段狀態和輸出快取提供者嗎?
- 使用 StackExchange.Redis 和叢集時若遇到 MOVE 例外狀況,該怎麼辦?
- Enterprise 層快取上的 OSS 叢集和 Enterprise 叢集有何差異?
- Enterprise 層快取使用多少個分區?
可以向上調整為 Premium 快取,或在其中調整、向下調整嗎?
- 您無法從進階快取向下調整至基本或標準定價層。
- 您可以將一個 進階 快取定價層調整為另一個定價層。
- 您無法直接從基本快取調整至進階快取。 首先,在單一調整作業中從基本調整至標準,然後在後續的調整作業中從標準調整至進階。
- 您無法從進階快取調整為 Enterprise 或 Enterprise Flash 快取。
- 如果在建立進階快取時已啟用叢集,則可變更叢集大小。 如果在建立快取時未啟用叢集,之後依然可以設定叢集。
調整之後,是否必須變更我的快取名稱或存取金鑰?
否,在調整作業期間,您的快取名稱和金鑰不會變更。
調整運作方式如何?
- 將基本快取調整為不同的大小時,會關閉該快取,並同時使用新的大小佈建新的快取。 在此期間,快取無法使用,而且快取中的所有資料都會遺失。
- 基本快取在調整為標準快取時,會佈建複本快取,且會從主要快取將資料複製到複本快取。 調整程序期間仍可使用快取。
- 當您將標準、進階、Enterprise 或 Enterprise Flash 快取調整為不同的大小時,會關閉其中一個複本,並重新佈建為新的大小和傳輸的資料,然後另一個複本會先執行容錯移轉,再進行重新佈建,這與其中一個快取節點失敗期間發生的流程類似。
- 當您向外擴充叢集快取時,會將新的分區佈建並新增至 Redis 伺服器叢集。 然後,資料會跨所有分區重新分區化。
- 當您向內縮小叢集快取時,資料會先重新分區化,然後叢集大小會縮減為必要的分區。
- 在某些情況下,例如調整快取或將快取移轉至不同的叢集,快取的基礎 IP 位址可能會變更。 快取的 DNS 記錄會變更,而且會向大部分應用程式顯示。 不過,如果您使用 IP 位址來設定快取的連線,或設定 NSG、允許快取流量的防火牆,您的應用程式有時可能會在 DNS 記錄更新之後無法連線。
我是否會在調整期間遺失快取中的資料?
- 基本 快取調整為新的大小時,會遺失所有資料,且無法在調整作業期間使用快取。
- 基本快取調整為標準快取時,通常會保留快取中的資料。
- 當您將標準、進階、Enterprise 或 Enterprise Flash 快取調整為較大的大小時,通常會保留所有資料。 當您將標準或進階快取調整為較小的大小時,如果資料大小超過快取向下調整後的新大小時,資料可能會遺失。 如果縮小時遺失資料,則會使用 allkeys-lru 收回原則來收回金鑰。
我是否可在調整之後使用進階層的所有功能?
否,某些功能只能在您於進階層中建立快取時進行設定,且無法在調整之後使用。
當您建立進階快取之後,就無法新增這些功能:
- 虛擬網路插入
- 新增區域備援
- 針對每個主要使用多個複本
若要使用上述任何功能,您必須在進階層中建立新的快取執行個體。
我的自訂資料庫設定在調整期間會受到影響嗎?
如果您在快取建立期間為 databases
設定設定了自訂值,請記住某些定價層具有不同的資料庫限制。 以下是在此案例中進行調整時的一些考量:
- 調整為較現有階層具有較低
databases
限制的定價層時:- 如果您使用預設數字
databases
,即所有定價層為 16,則不會遺失資料。 - 如果您要使用的自訂數字
databases
,落在您要調整之階層限制範圍內,則會保留此databases
設定,並且不會遺失資料。 - 如果您要使用的自訂數字
databases
,超出新階層的限制,則會將databases
設定降低至新階層的限制,而且在已移除的資料庫中的所有資料都會遺失。
- 如果您使用預設數字
- 調整為具有與現有階層相同或更高
databases
限制的定價層時,會保留您的databases
設定,而且不會遺失資料。
當標準、進階、Enterprise 和 Enterprise Flash 快取有適用於可用性的 SLA 時,則沒有適用於資料遺失的 SLA。
是否可以在調整期間使用我的快取?
- 標準、進階、Enterprise 和 Enterprise Flash 快取在調整作業期間會保持可用。 不過,在調整這些快取時可能會發生連線中斷 (從基本調整至標準快取時也一樣)。 這些連線中斷應該很短暫,而且 Redis 用戶端一般而言應可立即重新建立其連線。
- 對於使用作用中異地複寫的 Enterprise 和 Enterprise Flash 快取,在某些情況下,僅調整已連結快取的子集可能會隨著時間推移而引發問題。 建議您盡可能一併調整異地複寫群組中的所有快取。
- 基本快取在將作業調整至不同大小的期間,會處於離線狀態。 從基本調整至標準時,基本快取仍可使用,但可能會遇到短暫的連線中斷。 若發生連線中斷,Redis 用戶端一般而言應可立即重新建立其連線。
有異地複寫的調整限制嗎?
設定被動異地複寫後,您可能會注意到您無法調整快取,或變更叢集中的分區。 兩個快取之間的異地複寫連結可防止您調整作業,或變更叢集中的分區數目。 您必須將快取取消連結之後,才能發出這些命令。 如需詳細資訊,請參閱 設定異地複寫。
設定作用中異地複寫後,您無法調整快取。 異地複寫群組中所有快取的大小和容量都必須相同。
不支援的作業
- 您無法從較高的定價層調整至較低的定價層。
- 您無法從進階快取向下調整至標準或基本快取。
- 您無法從標準快取向下調整到基本快取。
- 您可以從基本快取調整到標準快取,但您無法同時變更大小。 如果您需要不同的大小,您可以進行後續調整作業,調整到您需要的大小。
- 您無法直接從基本快取調整至進階快取。 首先,在單一調整作業中從基本調整至標準,然後在後續作業中從標準調整至進階。
- 您無法從進階快取調整為 Enterprise 或 Enterprise Flash 快取。
- 您無法從較大的大小向下調整至 C0 (250 MB) 的大小。
如果調整作業失敗,服務會嘗試還原作業,而且快取會還原成原始大小。
調整需要多長的時間?
調整時間取決於幾個因素。 以下因素會影響調整所需時間。
- 資料量:較大的資料量需要較長的時間才能複製
- 高寫入要求:較高的寫入數目表示有較多跨節點或跨分區的資料複製
- 高伺服器負載:較高的伺服器負載表示 Redis 伺服器忙碌中,且有限的 CPU 循環可用於完成資料轉散發
調整快取是非簡單的動作,而且可能需要很長的時間。
根據真實世界範例,使用一到兩個分區調整快取的時間可以是 1 到 2 小時,當快取沒有負載過重時。如果您有更多分區,調整的時間不會以線性方式增加。
如何分辨調整何時完成?
在 Azure 入口網站中,您可以看到調整作業進行中。 調整完成時,快取的狀態會變更為 [執行中] 。
我需要對我的用戶端應用程式進行任何變更才能使用叢集嗎?
啟用叢集時,只可以使用資料庫 0。 如果用戶端應用程式使用多個資料庫,並嘗試讀取或寫入至零以外的資料庫,就會擲回下列例外狀況:
Unhandled Exception: StackExchange.Redis.RedisConnectionException: ProtocolFailure on GET --->
StackExchange.Redis.RedisCommandException: Multiple databases are not supported on this server; cannot switch to database: 6
如需詳細資訊,請參閱 Redis 叢集規格 - 實作的子集。
如果您使用 StackExchange.Redis,則必須使用 1.0.481 或更新版本。 您可以使用連線至停用叢集的快取時所用的相同端點、連接埠和金鑰,來連線至快取。 唯一的差別在於必須在資料庫 0 上完成所有的讀取和寫入。
其他用戶端可能有不同的需求。 請參閱 所有 Redis 用戶端都支援叢集嗎?
如果您的應用程式使用分成單一命令的多個索引鍵作業,則所有索引鍵都必須位於相同的分區。 若要將索引鍵置於相同的分區,請參閱如何在叢集中散發索引鍵?
如果您使用 Redis ASP.NET 工作階段狀態提供者,則必須使用 2.0.1 或更高版本。 請參閱 我可以將叢集使用於 Redis ASP.NET 工作階段狀態和輸出快取提供者嗎?
重要
使用 Enterprise 或 Enterprise FLash 層時,您可以選擇「OSS 叢集模式」或「Enterprise 叢集模式」。 OSS 叢集模式與進階層上的叢集相同,並遵循開放原始碼叢集規格。 Enterprise 叢集模式的效能可能比較低,但會使用 Redis Enterprise 叢集,其不需進行任何用戶端變更即可使用。 如需詳細資訊,請參閱 叢集。
如何在叢集中散發索引鍵?
依據有關金鑰散發模型的 Redis 文件︰金鑰空間會分割成 16,384 個位置。 每個索引鍵都會雜湊並指派給上述的其中一個位置,而這些位置散發於叢集的各個節點。 您可以設定哪個部分的索引鍵會雜湊,以確保多個索引鍵位於使用主題標籤的相同分區中。
- 具有主題標籤的金鑰 - 如果金鑰的任何部分被括在
{
和}
中,則只有該部分的金鑰會為了判斷金鑰的主題標籤位置而進行雜湊。 例如,下列三個金鑰會位於相同的分區︰{key}1
、{key}2
和{key}3
,因為只會雜湊名稱的key
部分。 如需索引鍵主題標籤規格的完整清單,請參閱索引鍵主題標籤。 - 沒有雜湊標籤的金鑰 - 會將整個金鑰名稱用於雜湊,而產生平均散發於快取分區的結果 (就統計而言)。
如需最佳的效能和輸送量,我們建議平均散發索引鍵。 如果您使用具有主題標籤的金鑰,則應用程式必須負責確保平均散發金鑰。
如需詳細資訊,請參閱金鑰散發模型、Redis 叢集資料分區化和金鑰主題標籤。
如需搭配 StackExchange.Redis 用戶端使用叢集,並尋找相同分區中之金鑰的範例程式碼,請參閱 Hello World 範例的 clustering.cs 部分。
我可以建立的最大快取大小為何?
您可擁有的最大快取大小是 4.5 TB。 此結果是容量為 9 的叢集 F1500 快取。 如需詳細資訊,請參閱 Azure Redis 快取價格。
所有 Redis 用戶端都支援叢集嗎?
許多用戶端程式庫都支援 Redis 叢集,但並非全都支援。 請查看您所使用的程式庫適用的文件,以確認您使用的是支援叢集的程式庫和版本。 StackExchange.Redis 是支援叢集的程式庫之一,其版本較新。 如需其他用戶端的詳細資訊,請參閱 Redis 叢集教學課程的 試用叢集一節。
Redis 叢集通訊協定要求每個用戶端都必須在叢集模式中直接連線至每個分區,並且定義了新的錯誤回應,例如 MOVED
和 CROSSSLOTS
。 若您嘗試使用的用戶端程式庫不支援叢集,但含有叢集模式快取,其結果可能是會有許多 MOVED 重新導向例外狀況,或者,如果您執行跨位置的多重金鑰要求,則會中斷您的應用程式。
注意
如果您使用 StackExchange.Redis 作為用戶端,請確定您使用的是最新版的 StackExchange.Redis \(英文\) 1.0.481 或更新版本,叢集才能正常運作。 若要進一步了解關於 Move 例外狀況的任何問題,請參閱 Move 例外狀況。
啟用叢集後,要如何連接到我的快取?
您可以使用連線至未啟用叢集的快取時所用的相同端點、連接埠和金鑰,來連線至您的快取。 Redis 會管理後端上的叢集,因此您不需從用戶端進行管理。
我可以直接連接到我的快取的個別分區嗎?
使用叢集通訊協定時,用戶端必須進行正確的分區連線,才能為您建立共用連線。 如前所述,每個分區都包含一個主要/複本快取組,統稱為快取執行個體。 您可以使用 GitHub 中 Redis 存放庫不穩定 \(英文\) 分支內的 Redis-CLI 公用程式,連線到這些快取執行個體。 使用 -c
參數啟用這個版本時,會實作基本支援。 如需詳細資訊,請參閱 https://redis.io 上 Redis 叢集教學課程中的試用叢集。
您必須使用 -p
參數來指定要連線的正確連接埠。 使用 CLUSTER NODES \(英文\) 命令,來判斷主要和複本節點所使用的確切連接埠。 使用下列連接埠範圍:
- 針對非 TLS 進階層快取,連接埠可在
130XX
範圍內使用 - 針對已啟用 TLS 的進階層快取,連接埠可在
150XX
範圍內使用 - 針對使用 OSS 叢集的 Enterprise 和 Enterprise Flash 快取,初始連線會透過連接埠 10000 來進行。 您可以使用 85XX 範圍內的連接埠來連線到個別節點。 85xx 連接埠將隨著時間推移而變更,因而不應硬式編碼到您的應用程式。
我可以為先前建立的快取設定叢集嗎?
是。 首先,透過擴大快取來確保該快取位於進階層。 接下來,您可以看到叢集設定選項,包括啟用叢集的選項。 請在建立快取後或第一次啟用叢集後變更叢集大小。
重要
啟用叢集是無法復原的動作。 快取若已啟用叢集,且只有一個分區,其行為將與大小相同、沒有叢集的快取不同。
所有 Enterprise 和 Enterprise Flash 層快取一律會叢集化。
我可以設定基本或標準快取的叢集嗎?
叢集僅適用於進階、Enterprise 和 Enterprise Flash 快取。
我可以將叢集使用於 Redis ASP.NET 工作階段狀態和輸出快取提供者嗎?
- Redis 輸出快取提供者 - 不需要變更。
- Redis 工作階段狀態供應器 - 若要使用叢集,您必須使用 RedisSessionStateProvider 2.0.1 或更高版本,否則會擲回例外狀況,這是重大變更。 如需詳細資訊,請參閱 v2.0.0 重大變更詳細資料。
使用 StackExchange.Redis 和叢集時若遇到 MOVE 例外狀況,該怎麼辦?
如果您正在使用 StackExchange.Redis,並且在使用叢集時收到 MOVE
例外狀況,請確定您使用的是 StackExchange.Redis 1.1.603 或更新版本。 如需設定 .NET 應用程式以使用 StackExchange.Redis 的指示,請參閱 設定快取用戶端。
Enterprise 層快取上的 OSS 叢集和 Enterprise 叢集有何差異?
OSS 叢集模式與進階層上的叢集相同,並遵循開放原始碼叢集規格。 Enterprise 叢集模式的效能可能比較低,但會使用 Redis Enterprise 叢集,其不需進行任何用戶端變更即可使用。 如需詳細資訊,請參閱 叢集。
Enterprise 層快取使用多少個分區?
與基本、標準和進階層快取不同,Enterprise 和 Enterprise Flash 快取可以利用單一節點上的多個分區。 如需詳細資訊,請參閱 分區化設定。