目录

RedisRaft - 使用说明

警告
本文最后更新于 2024-04-14,文中内容可能已过时。

从官方仓库看测试可以分为两大类:

  • 功能测试:即单元测试、集成测试,https://github.com/RedisLabs/redisraft/tree/master/tests
  • 正确性测试:即混动工程测试,https://github.com/RedisLabs/redisraft/tree/master/jepsen

基于docker运行测试case

先运行一个容器

docker pull debian:buster
docker run -d debian:buster -- tail
docker exec -it 121df5d7a654 bash

进入容器后安装一些工具

apt-get -y -q update && apt-get install -qqy git wget build-essential virtualenv cmake

拉取redis、redisraft代码并编译

cd ~
git clone https://github.com/redis/redis.git
cd redis
make
cd ..

git clone https://github.com/RedisLabs/redisraft
cd redisraft 
mkdir build && cd build
cmake .. && make
cd ..

运行测试case

mkdir -p .env
virtualenv --python=python3 .env
. .env/bin/activate
pip install -r tests/integration/requirements.txt
cd build
make tests

测试结果

  • 集成测试 image image

  • 单元测试 image image

  • 详细日志 test.log

  • 如果要单独跑某个case

cd ~/redisraft
pytest tests/integration/test_snapshots.py::test_snapshot_delivery -v --log-cli-level=debug

基于Jepsen构建

Jepsen是Kyle Kingsbury使用Clojure编写的分布式系统测试框架。Clojure是运行在JVM之上的Lisp方言,提供了强大的函数式编程的支持。Leiningen是Clojure的项目构建工具,类似于Maven。事实上,Leiningen底层完全使用Maven的包管理机制,只是Leiningen的构建脚本不是pom.xml,而是project.clj,它本身就是Clojure代码。

cd jepsen/docker
./genkeys.sh
docker-compose build
docker-compose up -d
docker exec -w /jepsen jepsen-control \
    lein run test-all --ssh-private-key /root/.ssh/id_rsa \
        --follower-proxy \
        --time-limit 600 \
        --test-count 50 \
        --concurrency 4n \
        --nemesis partition,pause,kill,member \
        --redis-repo https://github.com/redis/redis \
        --redis-version unstable \
        --raft-repo https://github.com/redislabs/redisraft \
        --raft-version master

执行完前四个命令行后会发现启动了如下容器:

image

查看Dockerfile脚本发现,在 control 容器中你实际是部署了 https://github.com/redislabs/jepsen-redisraft ,这个仓库是使用Clojure编写的、基于jepsen的、用来测试redisraft的工具。

运行起来后可以通过网页 http://127.0.0.1:8080/ 查看

  • 运行记录 image

  • 某次运行详细信息(每个文件功能待分析) image

  • 得益于jepsen-redisraft,下载、编译、启动、读写数据、验证数据等操作都可以自动化完成 image