| 领导选举 | ✔️ |
|---|---|
| 日志复制 | ✔️ |
| 日志压缩 | ✔️ |
| 成员变更 | ✔️ |
| 状态机接口 | ✔️ |
| 客户端 | ✔️ |
| Read Index | ✔️ |
|---|---|
| Lease Read | ✔️ |
我们以一个简单的运行在raft上的k-v server为例
假设集群配置为5节点
# cluster nodes
node 127.0.0.1 8000
node 127.0.0.1 8001
node 127.0.0.1 8002
node 127.0.0.1 8003
node 127.0.0.1 8004
然后,你可以打开5个终端,在每个终端分别执行
$ ./serv 8000.conf
$ ./serv 8001.conf
$ ./serv 8002.conf
$ ./serv 8003.conf
$ ./serv 8004.conf
这样就可以将集群跑起来了
你可以动态改变节点的存活情况来观察raft的工作原理
raft-node接收的用户消息格式为<user>msg\r\n,响应格式由上层状态机(k-v)与客户端约定- 目前
k-v只支持set和get,所以响应有3种:+ok\r\n,-err\r\n,$reply\r\n
- 目前
- 如果
raft-node发现自己不是leader,就会发送<host>host\r\n以帮助客户端重定向到leader