集群建立的命令 #138
marsevilspirit
started this conversation in
General
集群建立的命令
#138
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
ref: OpenAtomFoundation/pikiwidb#136
建集群需要实现的三条指令
RAFT.NODE ADD [id] [address:port]
# redis 中 join 指令的实现 ret = redisAsyncCommand(ConnGetRedisCtx(conn), handleNodeAddResponse, conn, "RAFT.NODE ADD %d %s:%u", rr->config.id, rr->config.addr.host, rr->config.addr.port);
主要改动
编译问题:
我直接将我目前的提交 rebase 到了潘磊的分支上,但 pikiwidb 可执行文件好像还没有链接 braft 库,需要进一步修改才能编译成功。
引入了四个文件:
指令实现
RAFT.CLUSTER INIT <id>
RAFT.CLUSTER JOIN [addr:port]
比较麻烦的一个指令,需要向 Leader 发送 ADD 请求。
参考现有的主从实现,会在收到指令时,建立一个连接,建立连接前,会将当前 client 指针等信息保存在 PRaft 中,用于稍后主动回复。
当前线程先不回复 client,所以把消息清空。
client->Clear();
连接建立成功后,会走到 g_pikiwidb->OnNewConnection(obj) 这里
最终在 OnConnect() 中调用 PRaft 的接口,向主节点发送 ADD 请求。
而 pikiwidb 收到消息时,会判断当前连接是否属于 Join 指令发起的连接,如果是,则处理对应的回复。并且从 PRaft 中获取之前发送 join 指令的 client,向其发送回复,这里指令流程才完整结束。
Beta Was this translation helpful? Give feedback.
All reactions