Opsworks:Rails 层连接到 Elasticache:Redis
Posted
技术标签:
【中文标题】Opsworks:Rails 层连接到 Elasticache:Redis【英文标题】:Opsworks : Rails Layer connect to Elasticache : Redis 【发布时间】:2014-12-30 15:16:45 【问题描述】:我正在尝试将我在 Opsworks 中运行的 Rails 应用程序连接到 Elasticache Redis 层。 我就是无法让它工作。
我目前的配置:
1 堆栈(2 个实例) 图层 - Rails 应用服务器 - mysql
rails 应用位于AWS-OpsWorks-Rails-App-Server
安全组中。
1 ElasticCache 集群
ES 集群在default security sg-ff58559a (VPC)(active)
安全组中。
我正在使用“主要端点”尝试连接。
此值在ElastiCache>复制组中可见 仪表板。
看起来类似于:<name>.oveuui.ng.0001.use1.cache.amazonaws.com:6379
在我的 rails 控制台中(在 SSH 进入 rails 层之后)我尝试:
>r = Redis.new(:url => 'redis://<name>.oveuui.ng.0001.use1.cache.amazonaws.com:6379')
>r.connected
结果是:
Redis::CannotConnectError: Timed out connecting to Redis on...
【问题讨论】:
【参考方案1】:如果您将集群启动到 Amazon Virtual Private Cloud (Amazon VPC) 中,则只能从在同一 Amazon VPC 中运行的 Amazon EC2 实例连接到您的 ElastiCache 集群。在这种情况下,您需要向集群授予网络入口。 将来自 Amazon VPC 安全组的网络入口授予集群:
1.登录 AWS 管理控制台并通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
2.在左侧导航窗格的网络和安全下,单击安全组。
3.在安全组列表中,单击您的 Amazon VPC 的安全组。如果您是 ElastiCache 新用户,此安全组将被命名为 default。
4.单击Inbound选项卡,然后执行以下操作:
一个。点击编辑。
b.点击添加规则。
c。在类型列中,选择自定义 TCP 规则。
d。在端口范围框中,键入缓存集群节点的端口号。此编号必须与您在启动集群时指定的编号相同。默认端口如下:
Memcached: port 11211
Redis: port 6379
e。在源框中,选择具有端口范围 (0.0.0.0/0) 的任何位置,以便您在 Amazon VPC 中启动的任何 Amazon EC2 实例都可以连接到您的 ElastiCache 节点。
f。点击保存。
http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/GettingStarted.AuthorizeAccess.html
【讨论】:
【参考方案2】:Amazon 只允许与您的 Elasticache 服务器在同一安全组中的服务器与其通信。
这篇博文将引导您完成将 Rails 服务器层添加到正确安全组的过程:http://aws.amazon.com/blogs/aws/using-aws-elasticache-for-redis-with-aws-opsworks/。它假定您在创建 Elasticache 集群时选择了“默认”安全组,情况似乎如此。如果是这样,请转到 OpsWorks ->(选择正确的堆栈)-> 层,然后单击 Rails 应用服务器层的安全性。你应该看到这个:
您要确保已添加“默认”安全组,然后重新启动您的实例。请注意,当我这样做时,它仍然不起作用。我决定在 EC2 控制台(而不是 OpsWorks 控制台)中查看我的实例的详细信息,发现我添加到层的新“默认”安全组实际上没有传播到我的实例。我不知道为什么会这样,所以我删除了实例并创建了一个全新的实例,并且这个新实例成功应用了“AWS-OpsWorks-Rails-App-Server”和“默认”安全组.因此,请记住这一点,以防万一出现问题并单击实例以查看其设置并确认两个安全组均已显示。
让我知道这是否适合你。
【讨论】:
以上是关于Opsworks:Rails 层连接到 Elasticache:Redis的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpsWorks 部署到 Rails 堆栈期间始终运行迁移
opsworks rails.env 与自定义 json rails_env 不匹配