排查 Azure Cache for Redis 连接问题

本文介绍如何排查将客户端应用程序连接到 Azure Redis 缓存的常见问题。 连接问题可能是由间歇性情况或不正确的缓存配置引起的。 本文分为间歇性问题和缓存配置问题。

间歇性连接问题

缓存配置连接问题

测试连接

可以使用 Redis 命令行工具 redis-cli 测试连接。 有关 Redis CLI 的详细信息,请参阅 将 Redis 命令行工具与 Azure Redis 缓存配合使用

如果 redis-cli 无法连接,则可以在 Azure PowerShell 中使用 PSPING 测试连接。

psping -q <cachename>:<port>

如果发送的数据包数等于收到的数据包数,则连接不会下降。

间歇性连接问题

客户端应用程序可能由于连接数量激增或者修补等事件而出现间歇性连接问题。

Kubernetes 托管应用程序

如果客户端应用程序托管在 Kubernetes 上,请检查运行客户端应用程序的群集节点或 Pod 是否处于内存、CPU 或网络压力之下。 运行客户端应用程序的 Pod 可能会受到在同一节点上运行的其他 Pod 的影响,并可能会限制 Redis 连接或 IO作。

如果使用 Istio 或任何其他服务网格,请确保服务网格代理保留端口 13000-1301915000-15019。 客户端使用这些端口与群集 Azure Redis 缓存中的节点通信,并可能导致这些端口上的连接问题。

基于 Linux 的客户端应用程

在 Linux 中使用乐观 TCP 设置可能会导致客户端应用程序出现连接问题。 有关详细信息,请参阅 Linux 托管客户端应用程序的 TCP 设置以及持续 15 分钟的连接停止

连接的客户端数

检查连接的客户端最大聚合值是否接近或高于缓存大小允许的最大连接数。 有关调整每个客户端连接大小的信息,请参阅 Azure Cache for Redis 性能

服务器维护

缓存可能会经历计划内或计划外服务器维护,在维护时段内对应用程序产生负面影响。 可以通过在 Azure 门户中检查缓存上的 错误(类型:故障转移) 指标来验证此问题。 若要尽量减少故障转移的影响,请参阅连接复原

连接配置问题

如果应用程序根本无法连接到 Azure Redis 缓存,则可能无法正确设置某些缓存配置。 以下部分提供如何确保正确配置缓存的建议。

防火墙规则

如果为 Azure Redis 缓存配置了防火墙,请确保将客户端 IP 地址添加到防火墙规则。 若要检查防火墙规则,请在缓存页的左侧导航菜单中的“设置”下选择“防火墙”。

第三方防火墙或外部代理

如果在网络中使用第三方防火墙或代理,请确保它允许 Azure Redis 缓存终结点 *.redis.cache.chinacloudapi.cn 和端口 63796380。 使用群集缓存或异地复制时,可能需要允许更多端口。

专用终结点配置

在 Azure 门户中,通过在缓存的左侧导航菜单中的“设置”下选择“专用终结点”来检查专用终结点配置。

  • “专用终结点 ”页上,确保正确设置 “启用公共网络访问 ”。

    • 创建专用终结点时,默认禁用公用网络访问。
    • 若要从缓存虚拟网络外部连接到缓存专用终结点,必须启用公用网络访问。
    • 如果删除专用终结点,请确保启用公共网络访问。
  • 选择 专用终结点 下的链接,并确保正确配置了专用终结点。 有关详细信息,请参阅使用新的 Azure Cache for Redis 实例创建专用终结点

  • 确保应用程序连接到 <cachename>.redis.cache.chinacloudapi.cn 端口 6380。 避免在配置或连接字符串中使用 <cachename>.privatelink.redis.cache.chinacloudapi.cn

  • 若要验证命令是否能够解析缓存的专用 IP 地址,请在链接至专用终结点的虚拟网络内运行类似 nslookup <hostname> 的命令。

公共 IP 地址变更

如果将任何网络或安全资源配置为使用缓存的公共 IP 地址,请检查缓存的公共 IP 地址是否已更改。 有关详细信息,请参阅 “依赖于主机名而不是公共 IP 地址”。

虚拟网络配置

检查虚拟网络配置,如下所示:

  • 确保为缓存分配虚拟网络。 在 Azure 门户中,选择缓存左侧导航菜单中的“设置”下的“虚拟网络”。
  • 确保客户端主机与缓存位于同一虚拟网络中。
  • 如果客户端应用程序与缓存位于不同的虚拟网络中,请为同一 Azure 区域中的两个虚拟网络启用对等互连。
  • 验证 入站出站 规则是否符合端口要求。

有关详细信息,请参阅 为高级 Azure Redis 缓存实例配置虚拟网络支持

使用 VNet 注入和高级缓存进行异地复制

支持在同一虚拟网络中的缓存之间进行异地复制。 在不同虚拟网络之间的缓存进行异地复制时,需注意以下事项:

  • 如果虚拟网络位于同一区域,则可以使用 虚拟网络对等互连VPN 网关 VNet 到 VNet 连接进行连接

  • 如果虚拟网络位于不同的区域,则不支持使用虚拟网络对等互连进行异地复制。 由于具有基本内部负载均衡器的约束,(区域 1)中的 VNet 1 客户端虚拟机无法使用其名称访问(区域 2)中的 VNet 2 缓存。 取而代之的是使用 VPN 网关 VNet 到 VNet 连接。 有关虚拟网络对等互连约束的详细信息,请参阅 虚拟网络对等互连要求和约束

若要有效配置虚拟网络并避免异地复制问题,必须正确配置入站和出站端口。 有关避免最常见的虚拟网络配置错误问题的详细信息,请参阅 异地复制对等端口要求

虽然可以将虚拟网络注入与高级缓存配合使用,但最好使用 Azure 专用链接。 有关详细信息,请参阅: