A generic dynamo implementation for different k-v storage engines
Dynomite, inspired by Dynamo whitepaper, is a thin, distributed dynamo layer for different storage engines and protocols. Currently these include Redis and Memcached. Dynomite supports multi-datacenter replication and is designed for high availability.
The ultimate goal with Dynomite is to be able to implement high availability and cross-datacenter replication on storage engines that do not inherently provide that functionality. The implementation is efficient, not complex (few moving parts), and highly performant.
Every branch numbered like v0.5.9, v0.5.8 etc is stable and safe to use in production unless marked as pre-release. The dev branch is the development unstable branch. Over time master branch has fallen behind and is not maintained. We will eventually delete it and may or may not recreate it.
For questions or contributions, please consider reading CONTRIBUTING.md.
To build Dynomite from source with debug logs enabled and assertions disabled:
$ git clone [email protected]:Netflix/dynomite.git $ cd dynomite $ autoreconf -fvi $ ./configure --enable-debug=yes $ make $ src/dynomite -h
To build Dynomite in debug mode:
$ git clone [email protected]:Netflix/dynomite.git $ cd dynomite $ autoreconf -fvi $ CFLAGS="-ggdb3 -O0" ./configure --enable-debug=full $ make $ sudo make install
Usage: dynomite [-?hVdDt] [-v verbosity level] [-o output file] [-c conf file] [-p pid file]
Options: -h, --help : this help -V, --version : show version and exit -t, --test-conf : test configuration for syntax errors and exit -g, --gossip : enable gossip (default: disabled) -d, --daemonize : run as a daemon -D, --describe-stats : print stats description and exit -v, --verbosity=N : set logging level (default: 5, min: 0, max: 11) -o, --output=S : set logging file (default: stderr) -c, --conf-file=S : set configuration file (default: conf/dynomite.yml) -p, --pid-file=S : set pid file (default: off) -x, --admin-operation=N : set size of admin operation (default: 0)
Dynomite can be configured through a YAML 1.1 (YAML 1.1 is not JSON compatible) file specified by the -c or --conf-file command-line argument on process start. The configuration files parses and understands the following keys:
datacentermeans all communication between datacenters is encrypted but within a datacenter it is not.
rackmeans all communication between racks and regions is encrypted however communication between nodes within the same rack is not encrypted.
allmeans all communication between all nodes is encrypted. And
nonemeans none of the communication is encrypted.
For example, the configuration file in conf/dynomite.yml
Finally, to make writing syntactically correct configuration files easier, dynomite provides a command-line argument -t or --test-conf that can be used to test the YAML configuration file for any syntax error.
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0