【问题标题】:redis-cli connection to Amazon ElastiCache Redis cluster hangs up与 Amazon ElastiCache Redis 集群的 redis-cli 连接挂起
【发布时间】:2019-02-02 05:21:36
【问题描述】:

我已经从源代码安装和编译了 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

现在,这里尝试连接到端点,从AWS documentation on the topic复制:

redis-cli -c -h my_example_endpoint_name.eaogs8.ng.0001.use1.cache.amazonaws.com -p 6379 ping

这会无限挂起,而不会向 stderr/stdout 发出任何内容。

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

我怀疑这可能与 AWS 端集群的安全组设置有关,但不确定具体可以/应该修改哪些内容。我很欣赏有关可能阻止连接的建议,并且可以根据需要提供有关集群本身的信息。

【问题讨论】:

  • 有没有办法使用一个命令连接到所有集群?

标签: amazon-web-services redis amazon-elasticache


【解决方案1】:

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

来自 AWS docs

所有 ElastiCache 集群都旨在从 Amazon EC2 实例进行访问。最常见的场景是从同一 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon EC2 实例访问 ElastiCache 集群。

我采取的纠正措施是:

  1. 导航到ElastiCache Dashboard > Redis 并单击有问题的集群名称。这将显示一个安全组字段,其中值为 组 ID,例如 sg-x8xxxxxx。
  2. 导航到https://console.aws.amazon.com/ec2 > 网络和安全 > 安全组下的安全组表。找到第 1 步中的Group ID,并记下其对应的Group Name
  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

【讨论】:

  • 一直被卡住和困惑,直到我意识到我的 EC2 实例在 VPC“dan-test”中,而我的 redis 在 VPC“dan-other-test”中 - 这是弄清楚它的触发器出来,谢谢!
【解决方案2】:

我还看到对 redis-cli 的调用无限挂断,但在我的情况下,它并非源于错误配置的安全组。

相反,它发生是因为我创建了我的 Redis 集群,并将“传输中加密”选项设置为“是”。这意味着我的数据库端点需要通过 SSL 隧道访问,redis-cli 不这样做。

对于我的应用程序,传输中的加密实际上并不是必需的,因此我创建了一个未选择该选项的新 Redis 集群。可以在此处找到有关使用传输中加密时需要采取不同措施的更多详细信息: https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/

【讨论】:

  • 我有encryption in transit = true,这只是意味着我需要提供密码 (-a),然后我可以通过该 VPC 中的 ec2 实例通过 redis-cli 连接。不确定我的设置有什么不同,但效果很好。
  • 有同样的问题,没有意识到TransitEncryptionEnabled字段的影响。感谢您的信息!
  • 对于遇到相同问题的任何人,请参阅docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/… 上有关如何与 redis-cli 连接的文档
  • 我遇到了同样的问题。我将传输中的加密设置为否,我能够通过 redis-cli 连接到 redis。
【解决方案3】:

在确认安全组并看到我们启用了“传输中加密”后,我们的 redis-cli 命令(包括提供密码的-a/--askpass)仍然无限期挂起,--verbose 标志是'什么都没有显示。 aws docs 首先调用 redis-cli 的自定义构建是不必要的,但 需要将 --tls 标志作为命令的一部分包含在内,然后它就可以工作了。 p>

这种形式的命令应该可以工作

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2015-11-21
    • 2019-09-12
    • 2020-03-31
    • 2016-07-13
    • 2018-05-21
    • 2019-07-13
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多