mirror of
https://git.mills.io/kayos/bitraft.git
synced 2024-06-16 03:48:56 +00:00
87 lines
2.6 KiB
Markdown
87 lines
2.6 KiB
Markdown
# bitraft
|
|
|
|
![](https://git.mills.io/prologic/bitraft/workflows/Coverage/badge.svg)
|
|
![](https://git.mills.io/prologic/bitraft/workflows/Docker/badge.svg)
|
|
![](https://git.mills.io/prologic/bitraft/workflows/Go/badge.svg)
|
|
![](https://git.mills.io/prologic/bitraft/workflows/ReviewDog/badge.svg)
|
|
|
|
[![Go Report Card](https://goreportcard.com/badge/prologic/bitraft)](https://goreportcard.com/report/prologic/bitraft)
|
|
[![GitHub license](https://img.shields.io/github/license/prologic/bitraft.svg)](https://git.mills.io/prologic/bitraft)
|
|
[![Github all releases](https://img.shields.io/github/downloads/prologic/bitraft/total.svg)](https://git.mills.io/prologic/bitraft/releases)
|
|
|
|
A [Bitcask](https://git.mills.io/prologic/bitcask) Distributed Key/Value store
|
|
using [Raft](https://github.com/hashicorp/raft) for concensus with a
|
|
[Redis](https://redis.org) compatible API written in [Go](https://golang.org).
|
|
|
|
Based off of [kvnode](https://github.com/tidwall/kvnode).
|
|
(See [LICENSE.old](/LICENSE.old))
|
|
|
|
- Redis compatible API
|
|
- Bitcask disk-based storage
|
|
- Raft support with [Finn](https://github.com/tidwall/finn) commands
|
|
- Compatible with existing Redis clients
|
|
|
|
## Usage
|
|
|
|
```#!bash
|
|
$ go get git.mills.io/prologic/bitraft
|
|
$ bitraft
|
|
```
|
|
|
|
## Docker
|
|
|
|
You can also use the [Bitraft Docker Image](https://cloud.docker.com/u/prologic/repository/docker/prologic/bitraft):
|
|
|
|
```#!bash
|
|
$ docker pull prologic/bitraft
|
|
$ docker run -d -p 4920:4920 prologic/bitraft
|
|
```
|
|
|
|
## Example session
|
|
|
|
Commands:
|
|
|
|
```
|
|
SET key value
|
|
GET key
|
|
DEL key [key ...]
|
|
KEYS pattern
|
|
FLUSHDB
|
|
SHUTDOWN
|
|
```
|
|
|
|
## Backup and Restore
|
|
|
|
To backup data:
|
|
```
|
|
RAFTSNAPSHOT
|
|
```
|
|
This will creates a new snapshot in the `data/snapshots` directory.
|
|
Each snapshot contains two files, `meta.json` and `state.bin`.
|
|
The state file is the database in a compressed format.
|
|
The meta file is details about the state including the term, index, crc, and size.
|
|
|
|
Ideally you call `RAFTSNAPSHOT` and then store the state.bin on some other server like S3.
|
|
|
|
To restore:
|
|
- Create a new raft cluster
|
|
- Download the state.bin snapshot
|
|
- Pipe the commands using the `bitraft --parse-snapshot` and `redis-cli --pipe` commands
|
|
|
|
Example:
|
|
```
|
|
bitraft --parse-snapshot state.bin | redis-cli -h 10.0.1.5 -p 4920 --pipe
|
|
```
|
|
|
|
This will execute all of the `state.bin` commands on the leader at `10.0.1.5:4920`
|
|
|
|
|
|
For information on the `redis-cli --pipe` command see [Redis Mass Insert](https://redis.io/topics/mass-insert).
|
|
|
|
## License
|
|
|
|
bitraft source code is available under the MIT [License](/LICENSE).
|
|
|
|
Previously based off of [kvnode](https://github.com/tidwall/kvnode).
|
|
(See [LICENSE.old](/LICENSE.old))
|