https://github.com/RedisLabs/redisraft
A Redis Module that make it possible to create a consistent Raft cluster from multiple Redis instances.
https://github.com/RedisLabs/redisraft
Last synced: about 1 month ago
JSON representation
A Redis Module that make it possible to create a consistent Raft cluster from multiple Redis instances.
- Host: GitHub
- URL: https://github.com/RedisLabs/redisraft
- Owner: RedisLabs
- License: other
- Created: 2018-02-15T20:03:18.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-18T12:19:07.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T03:07:55.667Z (9 months ago)
- Language: C
- Homepage:
- Size: 4.05 MB
- Stars: 813
- Watchers: 29
- Forks: 62
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-repositories - RedisLabs/redisraft - A Redis Module that make it possible to create a consistent Raft cluster from multiple Redis instances. (C)
README
# RedisRaft
> :warning: RedisRaft is still being developed and is not yet ready for any real production use. Please do not use it for any mission critical purpose at this time.
### Strongly-Consistent Redis Deployments
RedisRaft is a Redis module that implements the [Raft Consensus
Algorithm](https://raft.github.io/), making it possible to create strongly-consistent clusters of Redis servers.The Raft algorithm is provided by a [standalone Raft
library](https://github.com/redislabs/raft). This is a fork of the original library created by Willem-Hendrik Thiart, which is now actively maintained by Redis Ltd.## Main Features
* Strong consistency (in the language of [CAP](https://en.wikipedia.org/wiki/CAP_theorem), this system prioritizes consistency and partition-tolerance).
* Support for most Redis data types and commands
* Dynamic cluster configuration (adding / removing nodes)
* Snapshots for log compaction
* Configurable quorum or fast reads## Getting Started
### Building
To compile the module, you will need:
* Build essentials (a compiler, GNU make, etc.)
* CMake
* GNU autotools (autoconf, automake, libtool).To build:
git clone https://github.com/RedisLabs/redisraft.git
cd redisraft
mkdir build && cd build
cmake ..
make`redisraft.so` will be created under the project directory.
### Creating a RedisRaft Cluster
RedisRaft requires Redis build from the 'unstable' branch. Build Redis first:
git clone https://github.com/redis/redis
cd redis
make
make installTo create a three-node cluster, start the first node:
redis-server \
--port 5001 --dbfilename raft1.rdb \
--loadmodule /redisraft.so \
--raft.log-filename raftlog1.db \
--raft.addr localhost:5001Then initialize the cluster:
redis-cli -p 5001 raft.cluster init
Now start the second node, and run the `RAFT.CLUSTER JOIN` command to join it to the existing cluster:
redis-server \
--port 5002 --dbfilename raft2.rdb \
--loadmodule /redisraft.so \
--raft.log-filename raftlog2.db \
--raft.addr localhost:5002redis-cli -p 5002 RAFT.CLUSTER JOIN localhost:5001
Now add the third node in the same way:
redis-server \
--port 5003 --dbfilename raft3.rdb \
--loadmodule /redisraft.so \
--raft.log-filename raftlog3.db
--raft.addr localhost:5003redis-cli -p 5003 RAFT.CLUSTER JOIN localhost:5001
To query the cluster state, run the `INFO raft` command:
redis-cli -p 5001 INFO raft
Now you can start using this RedisRaft cluster. All [supported Redis commands](docs/Using.md) will be executed in a strongly-consistent manner using the Raft protocol.
## Documentation
Please consult the [documentation](docs/TOC.md) for more information.
## License
RedisRaft is licensed under the [Redis Source Available License 2.0 (RSALv2)](https://redis.com/legal/rsalv2-agreement) or the [Server Side Public License v1 (SSPLv1)](https://www.mongodb.com/licensing/server-side-public-license).