In the last article I introduced how to install and use redis sentinel. As I’m using ruby, I need to use this new redis configuration with ruby (on rails).
For ruby on rails use redis-sentinel gem.
Then your redis initializer will look like
sentinels = [ { host: '10.0.0.1', port: 17700 }, { host: '10.0.0.2', port: 17700 }, { host: '10.0.0.3', port: 17700 }, { host: '10.0.0.4', port: 17700 } ] # redis master name from sentinel.conf is 'master' Redis.current = Redis.new(master_name: 'master', sentinels: sentinels)
You can use your redis then as usual.
When using sidekiq, configuration is pretty simple too
require 'sidekiq/web' require 'redis-sentinel' require 'sidetiq/web' rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..' rails_env = ENV['RAILS_ENV'] || 'development' sentinels = [ { host: '10.0.0.1', port: 17700 }, { host: '10.0.0.2', port: 17700 }, { host: '10.0.0.3', port: 17700 }, { host: '10.0.0.4', port: 17700 } ] redis_conn = proc { Redis.current = Redis.new(master_name: 'master', sentinels: sentinels) } redis = ConnectionPool.new(size: 10, &redis_conn) Sidekiq.configure_server do |config| config.redis = redis end Sidekiq.configure_client do |config| config.redis = redis end
You can test your configuration. Run rails console and test with
Loading production environment (Rails 3.2.16) 1.9.3p448 :001 > Redis.current.keys("*").count => 746 1.9.3p448 :002 > Redis.current => #<Redis client v3.0.5 for redis://10.0.0.2:6379/0>
if you see “127.0.0.1:6379”, something is probably wrong. Then try to set/get some key and check Redis.current once again.