如何排查连接 Redis 实例出现 UnknownHostException 的问题

数据库NoSQL数据库技术服务知识库
问题描述

在连接云数据库 Redis 实例时,如果因 DNS 服务出现问题导致 ECS 解析连接地址失败,ECS 与 Redis 之间的网络连接将会中断。本文将介绍如何排查连接 Redis 实例出现的 UnknownHostException 问题。

问题分析

ECS 与 Redis 之间出现连接问题的原因多种多样,DNS 解析失败是其中较为常见的一种。 当出现 UnknownHostException 或者 failed to connect: redis-XXXXXXX.redis.ivolces.com could not be resolved 之类提示未知主机名或连接地址无法正常解析的报错时,请检查域名的正确性和 DNS 服务器设置,并刷新 DNS 缓存。

解决方案

1. 检查业务代码中设置的Redis连接地址是否正确。

您可以在Redis管理控制台连接管理页面查看 Redis 的私网连接地址或公网连接地址,如下图所示。 图片 图片

2. 检查ECS的 /etc/hosts 文件中是否加入了Redis的域名和IP的映射。

如果 Redis 实例的 IP 地址发生过改变,则该配置方式会引发无法正常连接 Redis 的问题。

3. 使用 dig 命令解析 Redis 的连接地址 redis-xxxxx.redis.ivolces.com,查看解析情况。

同时,使用 ping 或者 telnet 命令测试 Redis 连接地址,查看是否正常连通。如不成功请检查 DNS 配置是否正确。

4. 在ECS中使用 cat /etc/resolv.conf 命令,查看 /etc/resolv.conf 文件中是否正确设置了 DNS 服务器地址。

火山引擎平台上创建的云服务器实例默认使用私有网络中的内网 DNS 进行解析,即无需通过公网,直接通过内网 DNS 就可以访问云上服务。如果您需要使用其他公网 DNS 进行解析,可以修改默认的 DNS 服务器地址。 默认DNS服务器地址为:100.96.0.2、100.96.0.3。

cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 100.96.0.2
nameserver 100.96.0.3

5. 如您的客户端使用了其他 DNS 服务,请确保您使用的 DNS 服务可以正常解析云上服务。

可参考如下方法清除 DNS 缓存。

  • 清除 nscd 的 DNS 缓存。
service nscd restart
# 或者
service nscd reload
  • 清除 dnsmasq 的 DNS 缓存。
service dnsmasq restart
  • 清除 BIND 服务器中的 DNS 缓存 。
/etc/init.d/named restart
# 或者
rndc restart
参考文档

[1] https://www.volcengine.com/docs/6401/69222 如果您有其他问题,欢迎您联系火山引擎技术支持服务

65
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论