Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文介绍如何使用 Azure 门户配置活动异地复制缓存。
主动地理复制将多达五个 Azure 托管 Redis 实例分组到一个横跨多个 Azure 区域的缓存中。 所有实例都充当本地主缓存。 应用程序决定将哪个或哪些实例用于读取和写入请求。
注释
使用活动异地复制可在Azure区域之间传输数据。 这些带宽费用目前由Azure托管 Redis 吸收,不会传递给客户。 计费将来可能会更改。 有关详细信息,请参阅 带宽速率。
副本之间的数据同步遵循最终一致性。 该服务在同步时不提供 SLA。 请不要依赖数据同步的时间线来设计系统。
活动异地复制的工作原理
活动异地复制使用无冲突复制数据类型 (CRDT) 在可跨大陆分布的 Redis 实例之间无缝分发数据。 这些实例以“双活配置”连接,对任一实例的写入操作将自动反映在同一异地复制组中的其他实例上。 这种双向数据复制不同于单向“主动-被动”复制方法,在单向“主动-被动”复制方法中,数据是从主副本复制到异地副本,而不是反向复制。 这是一种功能强大的工具,通常以多种方式使用:
通过将缓存分布到更靠近用户的位置来提供本地延迟。 通过使用活动异地复制的 Redis 实例网络,可以将缓存放置在每个区域中离用户更近的位置,从而降低延迟并提高应用性能。
同步全球应用程序。 由于异地复制的缓存看起来像单一的 Redis 实例,因此你可以在全球范围内分发数据,而无需按区域对数据进行分段。 例如,可以使用单个 Redis 有序集来为全球所有用户提供游戏排行榜,而不是为每个地理区域提供单独的排行榜。
减少区域中断导致的停机时间和风险。 由于异地复制组中的每个 Redis 实例会不断根据组内其他实例的最新数据进行更新,所以在某个区域发生中断时,数据能得到很好的保存。 应用程序可以暂时切换到使用该组中的其他实例之一,当该区域恢复在线状态时,那里的 Redis 实例会自动从其他异地复制缓存中重新加载数据。
要更加详细地了解主动地理复制的工作原理,请参阅基于 CRDTS 的“Active-Active”地理分布。
可用范围
| 层 | 内存优化,均衡,计算优化 | 闪存优化 |
|---|---|---|
| 可用 | 是(B0 和 B1 除外) | 否 |
重要
平衡 B0 和 B1 SKU 和闪存优化 SKU 不支持活动异地复制。
活动异地复制先决条件
使用活动异地复制时存在一些限制:
仅当 Azure 管理的 Redis 处于高可用性配置(即使用复制)时,才支持活动地理复制。
仅支持 RediSearch 和 RedisJSON 模块
使用 RediSearch 时,只能使用 No Eviction 逐出策略。 其他层支持所有逐出策略。
不支持数据持久性,因为活动异地复制提供了卓越的体验。
异地复制组中的所有缓存必须具有相同的配置。 例如,所有缓存必须具有相同的 SKU、容量、逐出策略、群集策略、模块和 TLS 设置。
如果一个异地复制组中的一个实例进行了缩放,那么该组中的其他实例必须缩放到相同大小,才能进行任何其他缩放。 有关详细信息,请参阅在异地复制组中缩放实例。
使用活动异地复制时,不能使用
FLUSHALL和FLUSHDBRedis 命令。 禁止命令可防止意外删除数据。 请改用刷新操作。
创建或加入活动异地复制组
创建新的Azure托管 Redis 资源时,选择活动异地复制选项卡。在工作窗格中,选择“创建新组或加入现有组。 根据需要完成表单。
- 为第一个缓存实例新建复制组。 或从列表中选择一个现有的。
选择“配置”以完成。
等待第一个缓存创建成功。 完成后,你会看到“活动异地复制”已设置为“已配置”。 对异地复制组中的每个缓存实例重复上述步骤。
将现有实例添加到活动异地复制组
要将现有的缓存实例添加到活动异地复制组,可以使用 REST API 执行强制链接操作。
链接的缓存实例中的所有数据都会被丢弃。 该实例在加入地理复制组时也会暂时不可用,持续几分钟时间。 门户和 CLI 支持尚不适用于此功能。
从活动异地复制组中删除
若要从活动异地复制组中删除缓存实例,只需删除相应实例即可。 其余实例随后会自动重新配置自身。
发生区域中断时强制解除链接
使用 Azure 托管 Redis 时,活动异地复制是一项功能强大的功能,可显著提高可用性。 但是,如果出现区域性中断,应该采取措施准备缓存。
例如,考虑以下提示:
如果某个区域出现故障,请提前确定要切换到的异地复制组中的其他缓存。
确保设置了防火墙,以便任何应用程序和客户端都可以访问标识的备份缓存。
异地复制组中的每个缓存都有自己的访问密钥。 确定应用程序在定位备份缓存时如何切换到不同的访问密钥。
如果异地复制组中的一个缓存出现故障,异地复制组中的所有缓存中就会开始累积元数据。 在写入可以再次同步到所有缓存之前,不能放弃元数据。 可通过强制解除链接失效缓存来防止元数据累积。 考虑监视缓存中的可用内存,如果存在内存压力,则取消链接,尤其是对于写入密集型工作负载。
也可以使用断路器模式。 使用该模式自动将流量从遇到区域故障的缓存重定向到同一异地复制组中的备份缓存。 使用 Azure 服务(如 Azure 流量管理器 或 Azure 负载均衡器)启用重定向。
如果复制组中的其中一个缓存因区域中断而不可用,你可以将不可用的缓存强制从复制组中删除。
应移除不可用的缓存,因为复制组中剩余的缓存将开始存储未共享到不可用缓存的元数据。 发生这种情况时,复制组中的可用缓存可能会耗尽内存。
转到Azure门户,在仍可用的复制组中选择其中一个缓存。
在左侧“资源”菜单中选择“主动地理复制”以查看工作窗格中的设置。
通过选中此框,选择需要强制取消链接的缓存。
选择“强制取消链接”,然后选择“确定”进行确认。
受影响区域的可用性还原后,需要删除受影响的缓存并重新创建该缓存,以将其添加回复制组。
使用 Azure CLI 或 PowerShell 设置活动异地复制
Azure CLI
使用Azure CLI创建新的缓存和异地复制组,或将新缓存添加到现有异地复制组。 有关详细信息,请参阅 az redisenterprise create。
使用Azure CLI在新异地复制组中创建新的Azure托管 Redis 实例
此示例在“中国东部”区域中创建一个名为Cache1的新Azure托管 Redis 均衡 B10 实例。 然后,将缓存添加到名为 replicationGroup 的新活动异地复制组:
az redisenterprise create --location "China East" --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 参数添加正在创建的缓存实例的 ID。 该 ID 的格式为:
/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 "China North" --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"
与以前一样,需要使用 参数列出 Cache1 和 Cache2。
Azure PowerShell
使用Azure PowerShell创建新的缓存和异地复制组,或将新缓存添加到现有异地复制组。 有关详细信息,请参阅 New-AzRedisEnterpriseCache。
使用 PowerShell 在新异地复制组中创建新的Azure托管 Redis 实例
此示例在“中国东部”区域中创建一个名为Cache1的新Azure托管 Redis 均衡 B10 缓存实例。 然后,将缓存添加到名为 replicationGroup 的新活动异地复制组:
New-AzRedisEnterpriseCache -Name "Cache1" -ResourceGroupName "myResourceGroup" -Location "China East" -Sku "Balanced_B10" -GroupNickname "replicationGroup" -LinkedDatabase '{id:"/subscriptions/34b6ecbd-ab5c-4768-b0b8-bf587aba80f6/resourceGroups/myResourceGroup/providers/Microsoft.Cache/redisEnterprise/Cache1/databases/default"}'
要正确配置活动异地复制,必须使用 -LinkedDatabase 参数添加正在创建的缓存实例的 ID。 该 ID 的格式为:
/subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Cache/redisEnterprise/<your-cache-name>/databases/default
使用 PowerShell 在现有异地复制组中创建新的Azure托管 Redis 实例
此示例在“中国北部”区域中创建一个名为 Cache2 的新平衡 B10 缓存实例。 然后,脚本将缓存添加到在上一步骤中创建的活动异地复制组“replicationGroup”中。 结果是这两个缓存
New-AzRedisEnterpriseCache -Name "Cache2" -ResourceGroupName "myResourceGroup" -Location "China North" -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"}'
与以前一样,需要使用 参数列出 Cache1 和 Cache2。
在异地复制组中扩展实例
扩展异地复制缓存功能现已推出公测版。
可以扩展配置为使用活动异地复制的实例。 但是,具有不同缓存大小的异地复制组可能会引发问题。 若要防止出现这些问题,异地复制组中所有缓存的大小和性能层必须相同。
由于缩放需要更改大小或层,并且很难同时缩放地理复制组中的所有实例,因此 Azure 托管 Redis 具有锁定机制。 如果扩展异地复制组中的一个实例,则底层虚拟机也会扩展,但可用内存将限制在原始大小,直到对其他实例完成扩展为止。 其余实例的任何其他扩展操作都将被锁定,直到这些实例具有与扩展的第一个缓存相同的配置。
缩放示例
例如,异地复制组中可能有三个实例,均为内存优化 M10 实例:
| 实例名称 | Redis00 | Redis01 | Redis02 |
|---|---|---|---|
| 类型 | 内存优化型 M10 | 内存优化型 M10 | 内存优化型 M10 |
假设要将此异地复制组中的每个实例纵向扩展为计算优化 X20 实例。 首先,将其中一个缓存扩容到 X20:
| 实例名称 | Redis00 | Redis01 | Redis02 |
|---|---|---|---|
| 类型 | 计算性能优化 X20 | 内存优化型 M10 | 内存优化型 M10 |
此时,Redis01 和 Redis02 实例只能纵向扩展计算优化 X20 实例。 所有其他缩放操作都会被阻止。
注释
此时 Redis00 实例的进一步扩展未受到阻止。 但是,一旦将Redis01或Redis02扩展为计算优化 X20,扩展操作就会被阻止。
将每个实例扩展到同一层级和大小后,将移除所有扩展锁定:
| 实例名称 | Redis00 | Redis01 | Redis02 |
|---|---|---|---|
| 类型 | 计算优化 X20 | 计算优化型 X20 | 计算优化 X20 |
清除操作
由于可能会意外丢失数据,因此不能将 FLUSHALL 和 FLUSHDB Redis 命令用于驻留在异地复制组中的任何缓存实例。 改用位于“活动异地复制”工作窗格顶部的“刷新缓存”按钮。
异地复制指标
Azure托管 Redis 中的 Geo 复制正常指标可帮助监视异地复制群集的运行状况。 使用此指标监视异地副本之间的同步状态。
若要监视 Azure 门户中的 Geo 复制健康指标:
打开Azure门户并选择Azure托管 Redis 实例。
在“资源”菜单上,选择“监视”部分下的“指标”。
选择添加指标,然后选择地理复制健康状况指标。
如果需要,请为特定的异地副本应用筛选器。
可以配置警报,以便在异地复制运行状况指标超过 60 分钟连续发出不正常值 (0) 时通知你。
选择“新建预警规则”。
定义条件,以便当指标值为 0 持续至少 60 分钟(建议的时间)时触发。
为通知添加操作组,例如:电子邮件、短信等。
保存警报。
若要详细了解如何为 Redis Enterprise 缓存设置警报,请参阅监视 Redis 缓存中的警报部分。
重要
由于维护事件或缩放等常规操作(由Azure或客户启动),此指标可能会暂时显示为不正常。 为避免误报,我们建议设置 60 分钟的观察窗口,在该窗口中,指标若继续保持不正常状态,则会生成警报,因为它可能指示需要干预的问题。
可能导致地理副本之间同步问题的常见客户端问题
使用自定义井号标签 - 在 Redis 中使用自定义井号标签可能会导致数据在分片之间分布不均匀,这可能会导致异地副本中的性能问题和同步问题,因此,除非数据库需要执行多个关键作,否则避免使用自定义井号标签。
大型键大小 - 大型键可以在异地副本中带来同步问题。 为了保持平稳的性能和可靠的复制,我们建议在使用异地复制时将键大小保持在 500MB 以下。 如果单个键大小接近 2GB,缓存将面临地理复制健康问题。
使用 Azure CLI 或 PowerShell 刷新缓存
Azure CLI和 PowerShell 还可用于触发刷新操作。 有关使用Azure CLI的详细信息,请参阅 az redisenterprise 数据库刷新。 有关使用 PowerShell 的详细信息,请参阅 Invoke-AzRedisEnterpriseCacheDatabaseFlush。
重要
使用“刷新缓存”功能时要小心。 选择该按钮会删除当前缓存和异地复制组中链接的所有缓存中的所有数据。
使用 Azure 基于角色的访问控制管理对功能的访问权限。 应仅向授权用户授予刷新所有缓存的访问权限。