Skip to content
Redis Cluster Proxy
C++ Other
  1. C++ 97.5%
  2. Other 2.5%
Branch: master
Clone or download
Latest commit bafa430 May 2, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
backtracpp
core
cppformat
except
misc
syscalls
test
utils
.gitignore
LICENSE
Makefile
README.md
app.yaml
common.hpp
example.conf
main.cpp

README.md

A Redis cluster proxy.

Build

Requirements:

  • make and cmake
  • UNIX-like system with SO_REUSEPORT | SO_REUSEADDR support
  • epoll support
  • pthread
  • C++ compiler & lib with C++11 features, like g++ 4.8 or clang++ 3.2 (NOTE: install clang++ 3.2 on CentOS 6.5 won't compile because clang uses header files from gcc, which is version 4.4 without C++11 support)
  • Google Test (for test)

To build, just

make

turn on all debug logs

make MODE=debug

or compile with g艹

make COMPILER=g++

To link libstdc++ statically, use

make STATIC_LINK=1

to run test (just cover message parsing parts)

make runtest

run test with valgrind checking

make runtest CHECK_MEM=1

Run

cerberus CONFIG_FILE [ARGS]

The first argument is path of a configuration file, then optional arguments. Those specifies

  • bind / -b : (integer) local port to listen; could also specified
  • node / -n : (address) active nodes in a cluster; format should be host1:port1,host2:port2; could also set after cerberus launched, via the SETREMOTES command, see it below
  • thread / -t : (integer) number of threads
  • read-slave / -r : (optional, default off) set to "yes" to turn on read slave mode. A proxy in read-slave mode won't support writing commands like SET, INCR, PUBLISH, and it would select slave nodes for reading commands if possible. For more information please read here (CN).
  • read-slave-filter / -R : (optional, need read-slave set to "yes") if multiple slaves replicating one master, use the one whose host starts with this option value; for example, you have 10.0.0.1:7000 as a master, with 2 slave 10.0.1.1:8000 and 10.0.2.1:9000, and read-slave-filter set to 10.0.1, then 10.0.1.1:8000 is preferred. Note this option is no more than a string matching, so 10.0.1.1 and 10.0.10.1 won't be different on option value 10.0.1
  • cluster-require-full-coverage : (optional, default on) set to "no" to turn off full coverage mode, so proxy would keep serving when not all slots covered in a cluster.

The option set via ARGS would override it in the configuration file. For example

cerberus example.conf -t 8

set the program to 8 threads.

Commands in Particular

Restricted Commands Bypass

  • MGET : execute multiple GETs
  • MSET : execute multiple SETs
  • DEL : execute multiple DELs
  • RENAME : if source and destination are not in the same slot, execute a GET-SET-DEL sequence without atomicity
  • BLPOP / BRPOP : one list limited; might return nil value before timeout See detail (CN)
  • EVAL : one key limited; if any key which is not in the same slot with the argument key is in the lua script, a cross slot error would return

Extra Commands

  • PROXY / INFO: show proxy information, including threads count, clients counts, commands statistics, and remote redis servers
  • KEYSINSLOT slot count: list keys in a specified slot, same as CLUSTER GETKEYSINSLOT slot count
  • UPDATESLOTMAP: notify each thread to update slot map after the next operation
  • SETREMOTES host port host port ...: reset redis server addresses to arguments, and update slot map after that

Not Implemented

  • keys: KEYS, MIGRATE, MOVE, OBJECT, RANDOMKEY, RENAMENX, SCAN, BITOP,
  • list: BRPOPLPUSH, RPOPLPUSH,
  • set: SINTERSTORE, SDIFFSTORE, SINTER, SMOVE, SUNIONSTORE,
  • sorted set: ZINTERSTORE, ZUNIONSTORE,
  • pub/sub: PUBSUB, PUNSUBSCRIBE, UNSUBSCRIBE,

others: PFADD, PFCOUNT, PFMERGE, EVALSHA, SCRIPT, WATCH, UNWATCH, EXEC, DISCARD, MULTI, SELECT, QUIT, ECHO, AUTH, CLUSTER, BGREWRITEAOF, BGSAVE, CLIENT, COMMAND, CONFIG, DBSIZE, DEBUG, FLUSHALL, FLUSHDB, LASTSAVE, MONITOR, ROLE, SAVE, SHUTDOWN, SLAVEOF, SLOWLOG, SYNC, TIME,

For more information please read here (CN).

You can’t perform that action at this time.