使用elasticache的日志中的DNS错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用elasticache的日志中的DNS错误相关的知识,希望对你有一定的参考价值。
自从一周以来,我一直在收到这个奇怪的错误,这里是堆栈跟踪
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]
日志已经提示Unable to resolve redis.***********.cache.amazonaws.com
。
首先尝试检查您的实例是否可以解析(找到Redis服务器的位置),您只需执行以下操作即可:
$ host redis.****.cache.amazonaws.com
或者一个简单的ping redis.****.cache.amazonaws.com
你可能不会得到ping响应,但至少它应该解析域(获取一些IP地址)
如果你没有得到任何回报,可能会发生弹性缓冲实例刚刚创建并且没有喷射传播,这就是你在日志中获取条目的原因,如果实例已启动并运行一段时间然后检查您的DNS解析器已正确设置。就像一个额外的测试你可以试试
$ dig @8.8.8.8 redis.***cache.amazonaws.com +short
这将使用谷歌公共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,例如:
telnet redis.***.cache.amazonaws.com 6379
如果您确定该实例已启动并且正在运行且可以解析该名称但仍无法连接,请检查AWS端的安全组,可能已被阻止。
以上是关于使用elasticache的日志中的DNS错误的主要内容,如果未能解决你的问题,请参考以下文章
“使用Node.js在AWS ElastiCach(Redis)上无法获得插槽分配”错误
Django Channels 2.4 和 Websockets 在 Elastic Beanstalk 和 ElastiCache 上给出 502 错误