开启传输加密的集群模式AWS ElastiCache下redis-cli请求无法重定向
问题根因
开启集群模式+传输加密的AWS ElastiCache通过stunnel+redis-cli访问时触发重定向挂起的核心原因如下:
- redis-cli的
-c参数开启集群模式后,收到节点返回的SLOT重定向响应时,会直接尝试连接响应中返回的真实ElastiCache节点域名,而你本地仅配置了指向集群配置端点的stunnel隧道,没有为所有集群节点配置对应stunnel转发规则,导致请求无法送达被重定向的节点。 - ElastiCache节点开启传输加密后仅接受TLS连接,redis-cli重定向时发送的是明文Redis请求,未经过stunnel封装的请求会被节点直接拒绝,最终导致请求挂起。
可行解决方案
- 方案1:配置全节点stunnel转发
首先通过AWS控制台或aws elasticache describe-cache-clusters命令获取所有集群节点的域名,在你的stunnel配置文件中为每个节点单独添加转发条目,配置示例如下:
[elasticache-cluster-endpoint] client = yes accept = 127.0.0.1:6379 connect = 集群配置端点域名:6379 [elasticache-node-0001] client = yes accept = 127.0.0.1:6380 connect = 节点0001域名:6379 [elasticache-node-0002] client = yes accept = 127.0.0.1:6381 connect = 节点0002域名:6379 # 其余节点按相同规则依次添加
修改配置后重启stunnel服务,再使用redis-cli -c参数连接即可正常处理重定向逻辑。
方案2:使用原生支持TLS的集群客户端
如果不想配置多端口stunnel,可以直接使用支持集群模式+TLS的Redis客户端(如Redisson、Jedis集群模式),直接传入集群配置端点、开启TLS验证、配置访问密码即可自动处理重定向,无需额外隧道配置。方案3:临时调试用单节点查询
如果仅需要单次查询调试,可以先通过CLUSTER SLOTS命令查询目标key所属的槽位对应节点,单独为该节点配置stunnel转发后直接连接查询即可,无需配置所有节点。
内容的提问来源于stack exchange,提问作者user1805280
相关产品推荐
相关产品推荐

