GithubHelp home page GithubHelp logo

tempbottle / redis_failover Goto Github PK

View Code? Open in Web Editor NEW

This project forked from uolter/redis_failover

0.0 2.0 0.0 932 KB

python redis failover solution based on Apache ZooKeeper

Shell 1.69% Python 98.31%

redis_failover's Introduction

Redis Failover

Python Redis failover is a solution based on Apache ZooKeeper.

Note: This code is still to be considered beta quality, but already used in a production environment since December 2012 without any issue.

Authors:

It's more or less the Python version of the redis_failover Ruby solution by @ryanlecompte you can get from here https://github.com/ryanlecompte/redis_failover and which inspired us.

At the time we put in place the solution the redis stable version 2.6.2 does not already have a failover mechanism to rely on. Since we needed a python version to run within a REST Api application build on top of Flask (and redis of course) we developed our own solution

The solution is made of three main components:

  • Apache ZooKeeper: is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

  • RedisFailover client: is the redis failover client which wraps the 'standard' redis client redis-py providing a failover mechanism and a load balancing between the master and slaves redis 'cluster'.

  • RedisMonitor: is an high level sentinel responsible to watch over the redis nodes and promote a slave to master in case of the starting master crashes.

Technical Architecture

Architecture diagram

Installation

Both the client and the monitor have dependencies on other python packages you can install with pip or easy_install. For the client we also provided a setup script to install the required modules inside the python path.

pip install -r requirements.txt

will install all the dependecies which are:

  • redis >= 2.7.1 # redis python api client
  • zc-zookeeper-static >= 3.4.4 # ZooKeeper Python bindings
  • zc.zk >= 1.0.0 # high-level interfaces to the low-level zookeeper extension
  • zktools >= 0.3 # tools implementing higher level constructs such as Configuration and Lock

Note: The fork https://github.com/mkjsix/zktools (v. 0.3dev) is a copy of zktools which has been tested to work with our software. Please don't use zktool 0.2.1 as distributed via PyPi (http://pypi.python.org/pypi/zktools/0.2.1) because it's buggy (the zk lock eats all the CPU).

To quickly set up a ZooKeeper standalone server or a ZooKeeper cluster please refer to the official documentation ZooKeeper Getting Started Guide: http://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html

Since the RedisFailover client rely on a path the Monitor creates into ZooKeeper you must start Zookeeper first, then the Redis Monitor and evenutaly you can use the client.

The Redis Monitor can be executed as a command line script providing a set of basic configurations as simple options:

python start_monitor.py --help

Usage: start_monitor.py [options]

Options:
  -h, --help                              show this help message and exit

  -z, --zkhosts=ZK_HOSTS                  zookeeper list of host:port comma separated

  -p, --path=ZK_PATH                      zookeeper root path

  -r, --redishosts=RS_HOSTS               redis list of host:port comma separated

  -s, --sleeptime=SLEEP_TIME              waiting time in seconds between thread execution


e.g:
python start_monitor.py -p /redis/cluster -z localhost:2181,localhost:2182,localhost:2183 
-r localhost:6379,localhost:6389,localhost:6399 -s 30

It will start a monitor which speaks to the ZooKeeper cluster identified with localhost:2181 localhost:2182 localhost:2183 and will check the redis instances identified with localhost:6379 localhost:6389 localhost:6399. Every 30 sec each worker (process) sends a keep alive message to the master process which records the status and role (master / slave) of the redis servers to the ZooKeeper path /redis/cluster

Now, that the monitor is running and above all it notified to ZooKeeper the redis cluster scheme and status you can start playing with the client.

just open a python console:

from redis_failover import RedisFailover

rs = RedisFailover(hosts='localhost:2181,localhost:2182,localhost:2183', zk_path='/redis/cluster', db=0)

# celebrate !!!! rs is now the redis client … try some methods
rs.keys()
>>>

['ACTIVITY:max:QOL:20121017',
 'ACTIVITY:bob:QOL:20121029',
 'SERVICES',
 'AUTH:admin:secret',
 'SERVICE:QOL',
 ]

The client accepts as input parametes the list of ZooKeeper servers (comma separated) and the ZooKeeper path where he can get the list of redis servers. Behind the hood it also creates a connection pool for each readis server. Hereafter it is possibile to use all the redis commands as documented here: https://github.com/andymccurdy/redis-py since as already pointed out the failover client is more or less a wrapper of the standard python redis client.

Status

You can check the build history and unit test status on drone.io

License

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Copyright 2012 Sourcesense http://www.sourcesense.com

redis_failover's People

Contributors

uolter avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.