领导选举 | ✔️ |
---|---|
日志复制 | ✔️ |
日志压缩 | ✔️ |
成员变更 | ✔️ |
状态机接口 | ✔️ |
客户端 | ✔️ |
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