为什么我的 java 应用程序可以使用 lettuce 库访问 AWS elasticcache Redis 集群,但不能直接通过 redis-cli 访问?

为什么我的 java 应用程序可以使用 lettuce 库访问 AWS elasticcache Redis 集群,但不能直接通过 redis-cli 访问?

我有一个在使用 lettuce 的 EC2 实例中运行的 Java 应用程序(https://lettuce.io/)与 AWS ElasticCache 上的 redis 集群通信。

Java 应用程序可以毫无问题地连接。以下是 netstat 输出:

tcp6       0      0 10.0.56.94:45846        10.0.34.61:6379         ESTABLISHED
tcp6       0      0 10.0.56.94:33198        10.0.33.125:6379        ESTABLISHED
tcp6       0      0 10.0.56.94:57526        10.0.32.189:6379        ESTABLISHED

我已登录到同一个 ec2 实例并尝试使用它redis-cli来连接同一个集群。但是使用 redis-cli 却没有成功。

Java应用程序的Redis uri是这样的:

rediss://my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com:6379,my-project-0002-001.my-project.abczy.use1.cache.amazonaws.com:6379,my-project-0003-001.my-project.abczy.use1.cache.amazonaws.com:6379

然而,如果我将此 uri 应用于redis-cli,它会引发一个错误:“无效的 uri 方案”。

rediss如果我在 uri 中替换为,错误就会被抑制redis。但我仍然无法连接到集群。

我已经尝试过其他替代方案(但它们只是“什么也不做”:根本没有错误消息。根本没有显示任何内容。)

直接连接到节点

redis-cli -c -h my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com -p 6379 -a auth_token

连接到配置端点

redis-cli -c -h  clustercfg.my-project.abczy.use1.cache.amazonaws.com -p 6379 -a auth_token

直接使用 IP

# Use netstat to find out the IPs
redis-cli -c -h 10.0.34.61 -p 6379 -a auth_token

直接使用IP而不使用-cflag

redis-cli -h 10.0.34.61 -p 6379 -a auth_token

我如何才能找出 redis-cli 无法连接的原因?有什么方法可以追踪路由吗?

答案1

根据文档,redis-cli 不支持 SSL 或 TLS:

要从启用了传输加密的 ElastiCache for Redis 节点访问数据,您可以使用支持安全套接字层 (SSL) 的客户端。但是,redis-cli 不支持 SSL 或传输层安全性 (TLS)。

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/in-transit-encryption.html#connect-tls

您可以使用 stunnel 作为解决方法:

setuid = root
setgid = root
pid = /var/run/stunnel.pid
debug = 7 
delay = yes
options = NO_SSLv2
options = NO_SSLv3
[redis-cli]
   client = yes
   accept = 127.0.0.1:6379
   connect = my-project-0001-001.my-project.abczy.use1.cache.amazonaws.com:6379
[redis-cli-replica1]
   client = yes
   accept = 127.0.0.1:6380
   connect = my-project-0002-001.my-project.abczy.use1.cache.amazonaws.com:6379
[redis-cli-replica2]
   client = yes
   accept = 127.0.0.1:6381
   connect = my-project-0003-001.my-project.abczy.use1.cache.amazonaws.com:6379

启动隧道

sudo stunnel /etc/stunnel/redis-cli.conf

使用 redis-cli 连接:

 redis-cli -c -h localhost-p 6379 -a auth_token

相关内容