配置多个服务器以支持sidekiq

时间:2014-06-10 07:26:02

标签: ruby redis sidekiq

我计划将redis服务器迁移到运行sidekiq的新服务器,但不想停止当前的应用程序运行。而且我不想使用仍然是alpha版本的redis集群。 我的想法是要求sidekiq写入新的redis服务器,但是从这两个服务器中提取,这样一旦旧redis中的工作人员完成,新的工作人员就可以完全接管所有工作人员。我认为这个解决方案是可行的,但我不知道如何实现它。

这是我的sidekiq.rb:

sidkiq_config = YAML.load(ERB.new(Rails.root.join('config/redis.yml').read).result)

Sidekiq.configure_server do |config|
  config.logger.level = Logger::ERROR
  config.redis = { :url => "redis://redis2.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
  config.redis = { :url => "redis://redis.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
end

Sidekiq.configure_client do |config|
  config.logger.level = Logger::ERROR
  config.redis = { :url => "redis://redis2.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
end

1 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是运行sidekiq的两个实例 - 一个从旧集群读取,一个从新集群读取

sidkiq_config = YAML.load(ERB.new(Rails.root.join('config/redis.yml').read).result)

Sidekiq.configure_server do |config|
  config.logger.level = Logger::ERROR
  if ENV['read_from_new']
    config.redis = { :url => "redis://redis2.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
  else 
    config.redis = { :url => "redis://redis.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
  end
end

Sidekiq.configure_client do |config|
  config.logger.level = Logger::ERROR
  config.redis = { :url => "redis://redis2.staging:6379", :namespace => "app_#{Rails.env}:sidekiq" }
end