共用方式為


為 Azure 託管 Redis (預覽版) 執行個體設定作用中異地複寫

在本文中,您將了解如何使用 Azure 入口網站來設定作用中異地複寫快取。

作用中異地複寫將最多五個 Azure 託管 Redis (預覽版) 執行個體分組到跨 Azure 區域的單一快取。 所有執行個體都會做為本機、主要快取使用。 應用程式會決定要用於讀取和寫入要求的執行個體。

注意

Azure 區域間的資料傳輸會以標準頻寬費用收費。

主動式異地復寫的運作方式

主動式異地復寫會使用無衝突的復寫數據類型 (CRDT),順暢地將數據分散到可分散到各大洲的 Redis 實例。 這些實例會連線在主動-主動組態中,其中寫入一個實例會自動反映在相同異地復寫群組中的其他實例中。 此雙向數據復寫與單向主動-被動複寫方法不同,其中數據會從主要複本複寫到異地複本,但不是另一個方向。 這是一種功能強大的工具,通常以數種方式使用:

  • 藉由將快取散發到更接近使用者,以提供本機延遲。 藉由使用作用中異地復寫 Redis 實例的網路,您可以將快取放在地理位置更接近每個區域中的使用者,減少延遲並改善應用程式效能。
  • 同步處理全域應用程式。 由於異地復寫快取看起來像單一 Redis 實例,因此您可以全域散發數據,而不需要依區域分割數據。 例如,您可以使用單一 Redis 排序集,為世界各地的所有使用者提供遊戲排行榜 ,而不是為每個地理區域提供個別的排行榜。
  • 降低區域性中斷的停機時間和風險。 由於異地復寫群組中的每個 Redis 實例會持續更新群組中其他實例的最新數據,因此數據會在發生區域性中斷時妥善保留。 應用程式可以暫時切換為使用群組中的其他其中一個實例,當區域重新上線時,Redis 實例會自動重新載入來自其他異地復寫快取的數據。

如需作用中異地復寫運作方式的更詳細細目,請參閱 主動-主動異地散發(CRDTS 型)

可用性範圍

記憶體最佳化、平衡、計算最佳化 快閃記憶體最佳化
可用的 是 (B0 和 B1 除外) Yes

重要

平衡 B0 和 B1 SKU 不支援作用中異地複寫。

作用中異地複寫的必要條件

使用作用中異地複寫時,有一些限制:

  • 僅當 Azure 託管 Redis 處於高可用性設定 (即使用複製) 時才支援作用中異地複寫。
  • 僅支援 RediSearchRedisJSON 模組
  • 快閃記憶體最佳化層上,只能使用無逐出逐出策略。 所有驅逐政策都受到其他層的支持。
  • 不支援資料持續性,因為作用中異地複寫提供優越的體驗。
  • 異地複寫群組內的所有快取都必須具有相同的設定。 例如,所有快取都必須具有相同的 SKU、容量、收回原則、叢集原則、模組和 TLS 設定。
  • 如果異地復寫群組中的一個實例已調整,該群組中的其他實例必須調整為相同的大小,才能發生任何其他調整。 有關更多資訊,請參閱縮放異地複寫群組中的實例。
  • 使用作用中異地複寫時,您無法使用 FLUSHALLFLUSHDB Redis 命令。 禁用這些命令可防止意外刪除資料。 請改用沖洗作業

建立或加入作用中異地複寫群組

  1. 建立新的 Azure 託管 Redis 資源時,選擇進階標籤。完成表格的第一部分,包括集群政策。 有關選擇叢集策略的詳細資訊,請參閱 Azure 託管 Redis 中的叢集

  2. 選取 [設定] 以設定 [作用中異地複寫]

    [建立新的 Redis 快取] 頁面之 [進階] 索引標籤的螢幕擷取畫面。

  3. 為第一個快取執行個體建立新的複寫群組。 或者,從清單中選取現有群組。

    顯示複寫群組的螢幕擷取畫面。

  4. 選取 [設定] 來完成設定。

  5. 等候第一個快取建立成功。 完成時,您會看到 [作用中異地複寫] 中的 [設定] 已設定完成。 針對異地複寫群組中的每個快取執行個體重複上述步驟。

    顯示已設定作用中異地複寫的螢幕擷取畫面。

將現有執行個體新增至作用中異地複寫群組

若要將現有快取執行個體新增至作用中異地複寫群組,您可以使用 REST API 執行強制連結操作

正在連結的快取實例中的所有資料都將被丟棄。 加入異地複寫群組時,此實例也會暫時無法使用幾分鐘。 此功能尚不支援入口網站和 CLI。

從作用中異地複寫群組中移除

若要從作用中異地複寫群組中移除快取執行個體,您只需刪除執行個體即可。 其餘的執行個體接著會自動重新設定自己。

作用中異地複寫是一項強大的功能,可在使用 Azure 託管 Redis 時顯著提高可用性。 但若發生區域性中斷,則應採取相關步驟來準備快取。

例如,考慮使用下列提示:

  • 事先確認在一個區域失效時,要切換至異地複寫群組中的哪個其他快取。
  • 確定已設定防火牆,讓任何應用程式和用戶端都可存取已識別的備份快取。
  • 異地複寫群組中的每個快取都有其本身的存取金鑰。 請確認在設定備份快取的目標時,應用程式如何切換至不同的存取金鑰。
  • 如果異地複寫群組中的快取失效,則異地複寫群組中的所有快取都會開始建置中繼資料。 在寫入可再次同步至所有快取之前,無法捨棄中繼資料。 您可以將失效的快取強制取消連結,藉以防止中繼資料建置。 請考慮監視快取中的可用記憶體,並在有記憶體壓力時取消連結,對於大量寫入工作負載尤為如此。

此外也可以使用斷路器模式。 使用此模式,可自動將流量從發生區域中斷的快取重新導向至相同異地複寫群組中的備份快取。 使用 Azure 流量管理員Azure Load Balancer 等 Azure 服務來啟用重新導向。

如果複寫群組中的其中一個快取因區域中斷而無法使用,您可以從複寫群組中強制移除無法使用的快取。

您應該移除無法使用的快取,因為複寫群組中剩餘的快取會開始將尚未共用的中繼資料儲存至無法使用的快取。 發生這種情況時,複寫群組中的可用快取可能會耗盡記憶體。

  1. 前往 Azure 入口網站,然後選取複寫群組中仍可使用的快取之一。

  2. 選取左側 [資源] 功能表中的 [作用中異地複寫],以查看工作窗格中的設定。

    作用中異地複寫群組的螢幕擷取畫面。

  3. 透過勾選方塊來選取您需要強制取消連結的快取。

  4. 選取 [強制取消連結],然後選取 [確定] 以確認執行。

    在作用中異地複寫中取消連結的螢幕擷取畫面。

  5. 還原受影響區域的可用性後,您必須刪除受影響的快取,然後重新建立快取並新增回複寫群組。

使用 Azure CLI 或 PowerShell 設定作用中異地複寫

Azure CLI

使用 Azure CLI 建立新的快取和異地複寫群組,或新增快取至現有的異地複寫群組。 如需詳細資訊,請參閱 az redisenterprise create

使用 Azure CLI 在新異地複寫群組中建立新的 Azure 託管 Redis 執行個體

此範例在美國東部區域建立一個名為 Cache1 的新 Azure 託管 Redis 平衡 B10 執行個體。 然後,快取會新增至名為 replicationGroup 的新作用中異地複寫群組:

az redisenterprise create --location "East US" --cluster-name "Cache1" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"

若要正確設定作用中異地複寫,則正在建立的快取執行個體識別碼必須加上 --linked-databases 參數。 識別碼的格式為:

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

使用 Azure CLI 在現有異地複寫群組中建立新的 Azure 託管 Redis 執行個體

此範例在美國西部區域建立一個名為 Cache2 的新平衡 B10 快取實例。 然後,指令碼會將快取新增至上一個程序中建立的 replicationGroup 作用中異地複寫群組。 如此一來,快取會在主動-主動設定中連結 Cache1

az redisenterprise create --location "West US" --cluster-name "Cache2" --sku "Balanced_B10" --resource-group "myResourceGroup" --group-nickname "replicationGroup" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default" --linked-databases id="/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"

如前文所述,請使用 --linked-databases 參數列出 Cache1Cache2

Azure PowerShell

使用 Azure PowerShell 建立新的快取和異地複寫群組,或新增快取至現有的異地複寫群組。 如需詳細資訊,請參閱 New-AzRedisEnterpriseCache

使用 PowerShell 在新的異地複寫群組中建立新的 Azure 託管 Redis 執行個體

此範例在美國東部區域建立一個名為 Cache1 的新 Azure 託管 Redis 平衡 B10 快取執行個體。 然後,快取會新增至名為 replicationGroup 的新作用中異地複寫群組:

New-AzRedisEnterpriseCache -Name "Cache1" -ResourceGroupName "myResourceGroup" -Location "East US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}'

若要正確設定作用中異地複寫,則正在建立的快取執行個體識別碼必須加上 -LinkedDatabase 參數。 識別碼的格式為:

/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default

使用 PowerShell 在現有異地複寫群組中建立新的 Azure 託管 Redis 執行個體

此範例在美國西部區域建立一個名為 Cache2 的新平衡 B10 快取實例。 然後,該腳本將快取新增至在上一過程中建立的作用中異地複寫群組「replicationGroup」。 結果是兩個快取 (Cache1Cache2) 以主動-主動設定連結。

New-AzRedisEnterpriseCache -Name "Cache2" -ResourceGroupName "myResourceGroup" -Location "West US" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}', '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache2/databases/default"}'

如前文所述,請使用 -LinkedDatabase 參數列出 Cache1Cache2

縮放異地複寫群組中的實例

可以擴展設定為使用作用中異地複寫的實例。 然而,混合不同快取大小的異地複寫組可能會帶來問題。 為了防止這些問題,異地複寫群組中的所有快取都需要具有相同的大小和效能層級。

由於擴充功能需要更改大小或層,並且很難同時擴展異地複寫群組中的所有實例,因此 Azure 託管 Redis 具有鎖定機制。 如果您擴展異地複寫群組中的一個實例,底層虛擬機器將被擴展,但可用記憶體將被限制為原始大小,直到其他實例也被擴展。 其餘實例的任何其他擴展操作都會被鎖定,直到它們與第一個要擴展的快取匹配相同的設定。

縮放範例

例如,您的異地複寫群組中可能有三個實例,全部都是記憶體最佳化型 M10 實例:

執行個體名稱 Redis00 Redis01 Redis02
類型 記憶體最佳化 M10 記憶體最佳化 M10 記憶體最佳化 M10

假設您想要將此異地複寫群組中的每個執行個體擴展到計算最佳化 X20 執行個體。 您首先將其中一個快取擴展到 X20:

執行個體名稱 Redis00 Redis01 Redis02
類型 計算最佳化 X20 記憶體最佳化 M10 記憶體最佳化 M10

此時,Redis01Redis02 實例只能擴展計算最佳化X20實例。 所有其他縮放操作都會被阻止。

注意

此時,Redis00 實例不會被阻止進一步擴展。 但一旦 Redis01Redis02 縮放為計算最佳化 X20,它將被阻止。

一旦每個實例擴展至相同的層和大小,所有擴展鎖都會被刪除:

執行個體名稱 Redis00 Redis01 Redis02
類型 計算最佳化 X20 計算最佳化 X20 計算最佳化 X20

排清作業

由於可能發生意外的資料遺失,您無法使用 FLUSHALLFLUSHDB Redis 命令,搭配位於異地複寫群組中的任何快取執行個體。 請改用位於 [作用中異地複寫] 工作窗格頂端的 [排清快取] 按鈕。

顯示 [資源] 功能表中已選取 [作用中異地複寫] 而且 [排清快取] 功能周圍有紅色方塊的螢幕擷取畫面。

使用 Azure CLI 或 PowerShell 排清快取

Azure CLI 和 PowerShell 也可以用來觸發排清作業。 如需使用 Azure CLI 的詳細資訊,請參閱 az redisenterprise database flush。 如需使用 PowerShell 的詳細資訊,請參閱 Invoke-AzRedisEnterpriseCacheDatabaseFlush

重要

使用排清快取功能時請小心。 選取按鈕會從目前快取中以及從異地複寫群組中所有連結的快取中移除所有資料。

使用 Azure 角色型存取控制來管理功能的存取權。 只有已授權的使用者才有權排清所有快取。

下一步