node package manager
Stop wasting time. Easily manage code sharing in your team. Create a free org »

volatile-redis-cluster

Volatile Redis Cluster

This is a software implementation of a redis cluster where the data on the slave nodes does not need to be persistent. The architecture requires a single master redis node (which is used to track and coordinate the slaves) and any number of slave nodes which actually store the data. By default, no sharded data is stored on the master; it serves only to track the current list of slaves.

Running the Server(s)

Start the master (coordinator) redis server via the OS's normal means. Then run node ./lib/coordinator.js on localhost (you can also run the coordinator process on a separate server, and supply '-h HOST -p PORT' to point it to the actual master redis instance). The coordinator process connects to the master redis server and uses it for temporary data storage.

After the master is running, start the slave servers. Each slave server also has both a redis instance, and a node process the coordinates it. To run a slave, start the slave server, then run node ./lib/slave.js . You may need to supply options to the slave node process:

-h <SlaveRedisHost>
-p <SlaveRedisPort>
-w <SlaveWeight>
-H <MasterRedisHost>
-P <MasterRedisPort>

There are also some bash scripts provided to help:

./scripts/run-coordinator.sh

This will start the coordinator node process and connect to an already-running redis instance on localhost with the default port. It will run in the background.

./scripts/stop-coordinator.sh

Does what it says on the tin.

./scripts/run-slaves.sh

This will start BOTH the redis processes AND the node processes for the slaves. By default, it will start as many processes are there are cores on the machine. It instantiates the redis instances using custom configs in the current working directory.

This reads configuration in ./scripts/slave-config.sh and ./scripts/slave-redis.conf-template .

./scripts/stop-slaves.sh

Does what it says on the tin.

Using the Client

var ClusterClient = require('volatilerediscluster');
var clusterClient = new ClusterClient({
    host: /* Master Redis Host */,
    port: /* Master Redis Port */
});
clusterClient.getShardClient('my:redis:key', function(err, redis) {
        if (err) ...
        redis.get('my:redis:key', ...)
});