【问题标题】:DNS error in logs using elasticache使用 elasticache 的日志中的 DNS 错误
【发布时间】:2018-08-02 05:20:22
【问题描述】:

一个星期以来我一直收到这个奇怪的错误,这是堆栈跟踪

 ERROR (redisson-netty-1-4) [DNSMonitor(operationComplete:98)] Unable to resolve redis.***********.cache.amazonaws.com java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at io.netty.resolver.dns.DnsNameResolver.doResolveCached(DnsNameResolver.java:613)
at io.netty.resolver.dns.DnsNameResolver.doResolve(DnsNameResolver.java:593)
at io.netty.resolver.dns.DnsNameResolver.doResolve(DnsNameResolver.java:527)
at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:63)

应用是一个springboot API,使用redisson客户端连接elasticache。虽然我看到了这些错误,但 API 运行良好,没有任何错误。也无法在网上获得有关此的任何线索。这里还有其他人遇到过类似的情况吗?

我也在日志中出现了这个错误,然后是上面的错误

org.redisson.client.RedisTimeoutException: Redis server response timeout (3000 ms) occured for command: (HGET) with params: [packagesCache, PooledUnsafeDirectByteBuf(ridx: 0, widx: 3, cap: 256)] channel: [id: 0xdfd44ac3, L:/10.0.2.206:42857 - R:redis.kl3ise.0001.use1.cache.amazonaws.com/10.0.1.234:6379]
    at org.redisson.command.CommandAsyncService$11.run(CommandAsyncService.java:682)
    at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:663)
    at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:738)
    at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:466)
    at java.lang.Thread.run(Thread.java:748)

添加额外的日志

Request for schedule for student with access key ab947-cf32-4965-ab06-36d4e904899don date 2018-02-14org.redisson.client.RedisTimeoutException: Redis server response timeout (60000 ms) occured for command: (HEXISTS) with params: [analyzedStudyPlanCache, PooledUnsafeDirectByteBuf(ridx: 0, widx: 9, cap: 256)] channel: [id: 0xe4dc90da, L:/10.0.2.206:56685 – R:redis.kl3ise.0001.use1.cache.amazonaws.com/10.0.1.234:6379]

【问题讨论】:

    标签: java amazon-web-services redis amazon-elasticache redisson


    【解决方案1】:

    日志已经给出了提示Unable to resolve redis.***********.cache.amazonaws.com

    首先尝试检查您的实例是否可以解析(查找 Redis 服务器所在的位置),您可以这样做:

    $ host redis.****.cache.amazonaws.com
    

    或者一个简单的ping redis.****.cache.amazonaws.com,你可能不会得到 ping 响应,但至少它应该解析域(取回一些 IP 地址)

    如果您没有得到任何返回,可能是因为 elasticache 实例刚刚创建并且没有进行喷射传播,所以这就是您在日志中获取 do 条目的原因,如果实例已经启动并运行了一段时间然后检查您的 DNS 解析器是否设置正确。作为一个额外的测试,你可以尝试

    $ dig @8.8.8.8 redis.***cache.amazonaws.com +short
    

    这将使用 google 公共 DNS,如果您确实从该查询中得到答案,则问题出在您定义的名称服务器中,只需检查 /etc/resolv.conf

    如果您可以解析域,那么您接下来可以尝试检查 elasticache/redis 实例是否已启动并正在运行,并且您可以从您的实例访问它,通过终端执行此操作,您可以执行以下操作:

    redis-cli -h redis.***.cache.amazonaws.com
    

    如果不使用默认端口 6379,您可以使用

    redis-cli -h redis.***.cache.amazonaws.com -p XXXX 
    

    其中 XXXX 是配置的端口。

    如果您没有redis-cli 命令,您可以尝试远程登录,例如:

    telnet redis.***.cache.amazonaws.com 6379
    

    如果您确定实例已启动并运行并且可以解析名称但仍无法连接,请检查 AWS 端的安全组,可能已被阻止。

    【讨论】:

    • 这是一个老的redis集群,已经运行了一段时间,所以实例宕机是一个不太可能的事件,我不太明白你提到的关于解析器的事情,不是吗通过 API 默认完成?
    • 使用解析器我的意思是如果运行您的代码的实例/服务器可以解析 DNS 为您的 Redis 集群的名称,因为从您发布的日志看来它不能,也可能是某些安全组
    • 这不可能是真的,但它可以正常运行 5-6 天,然后突然出现这些错误,并且重新启动 API 后一切恢复正常
    • 我建议登录到您的代码所在的实例并检查您是否可以访问/连接到 Redis 服务器,一旦您验证它正在工作,监控您的日志并检查您是否仍然收到错误.事实是,由于某种原因,您的代码无法连接到 Redis,这也可能是由于某些网络瞬态。如果您仍然收到错误,请检查服务器名称,可能您正在尝试连接到不存在的服务器,检查一些拼写错误等。
    • 非常感谢您抽出宝贵的时间,但不幸的是,它都不起作用,Typo 被排除在外,因为它已配置到属性文件中,正如我之前所说,它可以正常工作几天。例如,自从我发布这个问题以来,没有发生过这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多