到Amazon ElastiCache Redis集群的redis-cli连接挂起

Bra*_*mon 3 amazon-web-services redis amazon-elasticache

我已经从源代码安装并编译了Redis,并试图连接到Amazon ElastiCache(Redis)集群。

我可以毫无问题地连接到默认本地主机,但是尝试连接到AWS终端节点会导致无限的挂断。

使用默认值:

$ redis-server /etc/redis.conf  # daemonized, uses localhost
$ redis-cli ping
PONG
$ sudo service redis_6379 status
Redis is running (12919)
$ redis-cli shutdown  # or sudo service redis_6379 stop
Run Code Online (Sandbox Code Playgroud)

现在,这是尝试连接到终端节点的尝试,它是有关该主题的AWS文档的副本:

redis-cli -c -h my_example_endpoint_name.eaogs8.ng.0001.use1.cache.amazonaws.com -p 6379 ping
Run Code Online (Sandbox Code Playgroud)

这会无限地挂起,而不会发出任何东西到stderr / stdout。

(请注意,这是一个示例端点名称;我已验证自己正在使用AWS控制台上列出的主要端点。)

我怀疑这可能与AWS端群集的安全组设置有关,但不确定具体可以/应该修改什么。我对可能阻止连接的建议表示赞赏,并可以根据需要提供有关群集本身的信息。

bit*_*ock 17

确认安全组并看到我们启用了“传输中加密”后,包含-a/--askpass提供密码的 redis-cli 命令仍然无限期挂起,并且该--verbose标志没有显示任何内容。首先要求自定义构建 redis-cli 的aws 文档是不必要的,但需要的将该标志包含--tls在命令中,然后它才能工作。

这种形式的命令应该有效

redis-cli -h <primary endpoint> --tls -p <port> -a <password> <optional command>,

例如。redis-cli -h master.redis.abc7bh.usw2.cache.amazonaws.com --tls -p 6379 -a password ping

redis-cli docker镜像版本4.0.10和6.2.6以及通过brew在mac上安装的redis-cli 6.2.6都可以工作。

要使用 docker 映像运行,您可以使用类似命令docker run -it redis:6.2.6 /bin/bash,然后运行上面的 redis-cli 命令。

  • `--tls` 就是为我做的! (3认同)

Bra*_*mon 9

连接被 EC2 实例的安全组禁止,并且它尝试连接的 ElastiCache 集群没有正确对齐。

从 AWS文档

所有 ElastiCache 集群都设计为可从 Amazon EC2 实例访问。最常见的场景是从同一 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon EC2 实例访问 ElastiCache 集群。

我采取的纠正步骤是:

  1. 导航到ElastiCache 仪表板> Redis,然后单击相关集群名称。这将显示一个安全组字段,其中值是组 ID,例如 sg-x8xxxxxx。
  2. 导航到https://console.aws.amazon.com/ec2 > 网络和安全 > 安全组下的安全组表。找到步骤 1 中的组 ID并记下其对应的组名称
  3. https://console.aws.amazon.com/ec2 > Instances > Instances导航到您的 EC2 管理控制台。对于您用来尝试连接到 Redis 集群的服务器,请注意安全组字段。这必须包括第 2 步中的任何组名。如果没有,您需要添加此安全组。选中服务器名称旁边的框,操作 > 网络 > 更改安全组。添加安全组名称,以便两个组件共享同一个 VPC。

您现在应该能够连接到类似(示例)的东西:

redis-cli -c -h mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com -p 6379 ping
Run Code Online (Sandbox Code Playgroud)


小智 6

我还看到redis-cli了无限期挂断的电话,但就我而言,它并非源于配置错误的安全组。

相反,它发生的原因是我创建了Redis集群,并且“传输中的加密”选项设置为“是”。这意味着我的数据库端点需要通过SSL隧道进行访问,而redis-cli事实并非如此。

对于我的应用程序,实际上并不需要加密,因此我创建了一个新的Redis集群,未选择该选项。可以在以下位置找到有关使用传输加密时需要执行的其他操作的更多详细信息:https : //aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/