redis_failover - Automatic Redis Failover Client/Server

jieforest發表於2012-05-28

Redis Failoverattempts to provides a full automatic master/slave failover solution for Ruby.Redis does not provide an automatic failover capability when configured formaster/slave replication. When the master node dies, a new master must bemanually brought online and assigned as the slave's new master. This manualswitch-over is not desirable in high traffic sites where Redis is a criticalpart of the overall architecture. The existing standard Redis client for Rubyalso only supports configuration for a single Redis server. When usingmaster/slave replication, it is desirable to have all writes go to the master,and all reads go to one of the N configured slaves.


This gem attempts toaddress both the server and client problems. A redis failover server runs as abackground daemon and monitors all of your configured master/slave nodes. Whenthe server starts up, it automatically discovers who is the master and who arethe slaves. Watchers are setup for each of the redis nodes. As soon as a nodeis detected as being offline, it will be moved to an "unavailable"state. If the node that went offline was the master, then one of the slaveswill be promoted as the new master. All existing slaves will be automaticallyreconfigured to point to the new master for replication. All nodes marked asunavailable will be periodically checked to see if they have been brought backonline. If so, the newly available nodes will be configured as slaves andbrought back into the list of live servers. Note that detection of a node goingdown should be nearly instantaneous, since the mechanism used to keep tabs on anode is via a blocking Redis BLPOP call (no polling). This call fails nearlyimmediately when the node actually goes offline. To avoid false positives(i.e., intermittent flaky network interruption), the server will only mark anode as unavailable if it fails to communicate with it 3 times (this isconfigurable via --max-failures, see configuration options below).


This gem provides aRedisFailover::Client wrapper that is master/slave aware. The client isconfigured with a single host/port pair that points to redis failover server.The client will automatically connect to the server to find out the currentstate of the world (i.e., who's the current master and who are the currentslaves). The client also acts as a load balancer in that it will automaticallydispatch Redis read operations to one of N slaves, and Redis write operationsto the master. If it fails to communicate with any node, it will go back andask the server for the current list of available servers, and then optionallyretry the operation.



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/301743/viewspace-731261/,如需轉載,請註明出處,否則將追究法律責任。

相關文章