我有 2 个 EC2 实例 - 一个是生产应用程序,另一个是 Redis。我从第一个实例连接到 Redis。
这是我设置 Sidekiq 的方式:
Sidekiq.configure_server do |config|
config.redis = { url: "redis://deployer_redis@PUBLIC_IP:6379/#{env_num}",
namespace: "rails_app_#{Rails.env}" }
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://deployer_redis@PUBLIC_IP:6379/#{env_num}",
namespace: "rails_app_#{Rails.env}" }
end
当我重新启动 Redis 实例时,PUBLIC_IP 将会不同,并且 Rails 应用程序将无法连接到 Redis。
我尝试使用 PRIVATE_IP 代替 PUBLIC_IP(因为 PRIVATE_IP 在 期间不会改变),但没用。没有错误,只是作业没有被处理。
在应用程序中设置EC2实例的IP的推荐方法是什么?
编辑:
另外,当我 ssh 到服务器时,我应该使用哪个 IP?
答案1
如果您将 ElastiCache 与 Redis 结合使用,则应使用集群的 DNS。它通常看起来像这样redis.j5k8wa.0001.use1.cache.amazonaws.com
,您可以从节点配置中获取它。Amazon 建议CNAME
在您的 DNS 中创建记录作为他们提供的名称的别名。
如果你在自己的实例上运行 Redis,那么最简单的方法是为其使用私有静态 IP 地址。另一种选择是使用动态 DNS,但由于 DNS 传播延迟,这种设置很脆弱。
更新:使用弹性 IP 是您的第三种选择,但使用公共 IP 地址进行应用程序和 Redis 之间的内部通信不是很安全并且很浪费。