Redis::Sentinel
another redis automatic master/slave failover solution for ruby by using built-in redis sentinel.
it subscribes message with channel "+switch-master", when message received, it will disconnect current connection and connect to new master server.
Installation
Add this line to your application's Gemfile:
gem 'redis-sentinel'
And then execute:
$ bundle
Or install it yourself as:
$ gem install redis-sentinel
Usage
Specify the sentinel servers and master name
Redis.new(master_name: "master1", sentinels: [{host: "localhost", port: 26379}, {host: "localhost", port: 26380}])
Example
start redis master server, listen on port 16379
$ redis-server example/redis-master.conf
start redis slave server, listen on port 16380
$ redis-server example/redis-slave.conf
start 2 sentinel servers
$ redis-server example/redis-sentinel1.conf --sentinel
$ redis-server example/redis-sentinel2.conf --sentinel
run example/test.rb, which will query value of key "foo" every second.
$ bundle exec ruby example/test.rb
You will see output "bar" every second. Let's try the failover process.
- stop redis master server
- you will see error message output
- redis sentinel promote redis slave server to master
- then you will see correct "bar" output every second again
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request