java - 使用 elasticache 的日志中的 DNS 错误

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

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

 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 地址)

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

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

这将使用谷歌公共(public) 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 端检查安全组,可能已被阻止。

关于java - 使用 elasticache 的日志中的 DNS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926042/

相关文章:

redis - 我对 K8s 中的 redis 不了解的地方

python - 如何在 Python-RQ 中创建多个 worker?

amazon-web-services - 在 AWS 中滚动、使用附加批处理滚动和不可变部署之间的区别?

nosql - 如果数据超过可用内存,Redis 数据存储会发生什么情况?

java - 实现删除链表最后一个节点的方法

java - AutoCompleteTextView选择结果后返回模型

amazon-web-services - 适用于只能访问特定 S3 存储桶的 IAM 组的 AWS CloudFormation 模板

iOS - AWS SNS 端点设置为禁用

java - 在 Java 中为 xml 添加新的根元素

java - Spring Boot Mongo Upsert 数组中的元素