【问题标题】:How can I use the Chef JSON to set a redis and sidekiq configuration如何使用 Chef JSON 设置 redis 和 sidekiq 配置
【发布时间】:2015-07-15 02:13:51
【问题描述】:

我正在将 AWS OpsWorks 用于带有 Redis 和 Sidekiq 的 Rails 应用程序,并希望执行以下操作:

  • 为 redis 覆盖 maxmemory 配置
  • 仅在选定的 EC2 实例上运行 Redis 和 Sidekiq

我当前的 JSON 配置只有 database.yml 覆盖:

{
  "deploy": {
    "appname": {
      "database": {
        "username": "user",
        "password": "password",
        "database": "db_production",
        "host": "db.host.com",
        "adapter": "mysql2"
      }
    }
  }
}

【问题讨论】:

标签: redis chef-infra aws-opsworks


【解决方案1】:

覆盖 redis 的 maxmemory 配置

看看你选择的 Redis 食谱是否为你提供了一个属性来设置/提供自定义配置值。我知道主要的redisio 可以让您设置配置值,就像我在堆栈上那样(我相信我设置了磁盘缓存的路径)

仅在选定的 EC2 实例上运行 Redis 和 Sidekiq

这部分很简单:为 Redis(或 Redis/Sidekiq)创建一个层,并向该层添加一个实例。

现在,由于 Redis 与 Rails 服务器位于不同的实例上,因此您不一定知道 Redis 服务器的 IP 地址是什么。特别是因为您可能希望使用内部 EC2 IP 地址而不是框的公共 IP 地址(使用内部地址意味着您已经在默认防火墙内)。

Sooo...如果您还没有,您可能需要为您的应用编写自定义说明书。在您的attributes/default.rb 中编写如下代码:

redis_instance_details = nil
redis_stack_name = "REDIS"

redis_instance_name, redis_instance_details = node["opsworks"]["layers"][redis_stack_name]["instances"].first

redis_server_dns = "127.0.0.1"
if redis_instance_details
  redis_server_dns = redis_instance_details["private_dns_name"]
end

然后稍后在属性文件中将您的 redis 配置设置为您的 redis_hostname(也许使用它来设置:

default[:deploy][appname][:environment_variables][:REDIS_URL] = "redis://#{redis_server_dns}:#{redis_port_number}"

希望这会有所帮助!

【讨论】:

  • 我实际上最终使用了 Elasticache for Redis,并使用自定义说明书来设置连接参数。然后使用opsworks_sidekiq 在其之上设置一个 Sidekiq 工作层。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2022-12-03
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
相关资源
最近更新 更多