2014-06-10 25 views
1

我計劃將redis服務器遷移到一個運行sidekiq的新服務器,但不希望停止當前運行的應用程序。而且我不想使用仍然是alpha版本的redis羣集。 我的想法是要求sidekiq寫入新的redis服務器,但是從兩者都拉出來,這樣一旦舊redis中的工作人員完成後,新的工作人員就可以完全接管所有工作人員。我認爲這個解決方案是可行的,但我不知道如何實現它。配置多個服務器以支持sidekiq

這是我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

我相信最簡單的解決方案是運行兩個實例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 
相關問題