分布式协议与算法实战
韩健
腾讯资深工程师
23193 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?

NewTCPTransport()
NewFileSnapshotStore()
NewBoltStore()
NewBoltStore()
TCPTransport
InmemSnapshotStore
FileSnapshotStore
DiscardSnapshotStore
raftboltdb
raftboltdb
DefaultConfig()
Transport
SnapshotStore
StableStore
LogStore
FSM
Config
Raft.State()
Raft.Leader()
RemoveServer()
AddNonvoter()
AddVoter()
BootstrapCluster()
NewRaft()
查看集群节点状态
移除集群节点
增加集群节点
创建Raft节点
Hashicorp Raft

该思维导图由 AI 生成,仅供参考

你好,我是韩健。
上一讲结束后,相信有的同学已经跃跃欲试,想把 Hashicorp Raft 使用起来了。不过,也有一些同学跟我反馈,说自己看到 Hashicorp Raft 的Godoc,阅读完接口文档后,感觉有些不知所措,无从下手,Hashicorp Raft 支持了那么多的函数,自己却不知道如何将这些函数使用起来。
这似乎是一个共性的问题,在我看来,之所以出现这个问题,是因为文档里虽然提到了 API 的功能,但并没有提如何在实际场景中使用这些 API,每个 API 都是孤立的点,缺乏一些场景化的线将它们串联起来。
所以,为了帮你更好地理解 Hashicorp Raft 的 API 接口,在实践中将它们用起来,我以“集群节点”为核心,通过创建、增加、移除集群节点,查看集群节点状态这 4 个典型的场景,具体聊一聊在 Hashicorp Raft 中,通过哪些 API 接口能创建、增加、移除集群节点,查看集群节点状态。这样一来,我们会一步一步,循序渐进地彻底吃透 Hashicorp Raft 的 API 接口用法。
我们知道,开发实现一个 Raft 集群的时候,首先要做的第一个事情就是创建 Raft 节点,那么在 Hashicorp Raft 中如何创建节点呢?

如何创建 Raft 节点

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Hashicorp Raft是一个用于构建分布式一致性系统的库,本文介绍了如何使用Hashicorp Raft的API接口来创建、增加、移除集群节点以及查看集群节点状态。文章首先详细解释了通过NewRaft()函数创建Raft节点的参数类型和创建过程。接着,讨论了如何增加集群节点,包括通过BootstrapCluster()函数启动第一个节点和通过AddVoter()函数将新节点加入到集群中。此外,还提到了移除节点的操作,以及通过RemoveServer()函数在领导者节点上移除节点的方法。同时,文章介绍了如何查看节点状态信息,包括通过Raft.Leader()函数查看当前领导者的地址信息和通过Raft.State()函数查看当前节点的状态。此外,还提到了Raft.Stats()函数用于查看集群的内部统计信息。总的来说,本文通过具体的代码示例和详细的解释,帮助读者了解了如何使用Hashicorp Raft的API接口来构建分布式一致性系统。读者可以通过本文了解到Hashicorp Raft的核心函数和参数类型,以及如何在实际场景中应用这些API接口,从而更好地理解和使用Hashicorp Raft库。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式协议与算法实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • Ethan Liu
    置顶
    老师 状态机的作用是什么,为什么一定要有这个呢

    作者回复: 加一颗星:)。本质上来说,状态机指的是有限状态机,它是一个数学模型。你可以这么理解:状态机是一个功能模块,用来处理一系列请求,最大的特点就是确定性,也就是说,对于相同的输入,不管重复运行多少次,最终的内部状态和输出都是相同的。 就像你敲击键盘,在Word文档上打字一样,你敲击键盘的顺序决定了Word文档上的文字,你按照相同的顺序敲击键盘,一定能敲出相同的文字,这就是一个现实版的状态机。 那么为什么在Multi-Paxos、Raft中需要状态机呢? 你想一下,Multi-Paxos、Raft都是共识算法,而共识算法是就一系列值达成共识的,达成共识后,这个值就不能改了。但有时候我们是需要更改数据的值的,比如KV存储,我们肯定需要更改指定key(比如X)对应的值,这时我们就可以通过状态机来解决这个问题。 比如,如果你想把X的值改为7,那你可以提议一个新的指令“SET X = 7”,当这个指令被达成共识并提交到状态机后,你查询到的值就是7了,也就成功修改了X的值。

    2020-06-24
    2
    9
  • Stony.修行僧
    讲讲增删改查背后的真相

    作者回复: 我是这么想的,“再多的鱼”也不如“渔”,是不是可以这样,结合17、18讲的内容,自己阅读源码探索真相呢,学习中遇到问题时,咱们一起讨论,或者我以加餐的形式作补充。这样就不仅能学到知识,还能掌握了独立学习的方法了:)。你觉得呢。

    2020-03-23
    2
    7
  • 盘胧
    这就很爽了,搭配一下文档看还是很吃力。加油

    作者回复: 加油!可以在使用中学习,比如,先了解个大概,在需要使用时再去查找和研究相关函数的用法。有疑问,欢迎留言,咱们一起讨论:)。

    2020-03-28
    2
  • 艾瑞克小霸王
    服务器ID是在什么地方设置的呢?node的config吗?

    作者回复: 自己指定的,具体实现,可以参考20讲的程序。

    2020-03-23
    1
  • 周龙亭
    非leader节点怎么启动呢?

    作者回复: 加一颗星:),将节点加入到集群时,需要在调用raft.NewRaft()启动后,需要将自己的节点信息同步给领导者,由领导者调用AddVoter()函数,将这个节点加入到集群中。之后调用raft.NewRaft()启动节点,就可以了,节点会先作为跟随者启动,如果此时没有领导者,将会发生心跳超时,和选举出新的领导者。

    2020-04-30
  • 东尘西土
    ip+端口号代表一个节点,构造单机集群

    作者回复: 加一颗星:),测试方便。

    2020-03-26
  • 请问加入集群的请求时Raft的哪个API或者RPC?

    作者回复: 将新节点的配置信息发送给领导者,然后领导者调用AddVoter()这个API,将新节点加入到集群中。

    2020-03-25
  • HuaMax
    集群最开始的时候,只有一个节点,我们让第一个节点通过 bootstrap 的方式启动,它启动后成为领导者 —————————————— 请问老师,节点不是通过投票成为领导者吗?是不是所有节点都是bootstrap方式启动,然后再竞争成为领导者?

    作者回复: 加一颗星:),这是工程实现,目标是为了便于管理节点,添加、移除。可以这么理解,一种特殊情况,创建了一个只包含一个节点的集群,这个节点是领导者。第一次创建集群时,使用。集群创建完后,节点正常启动就可以,默认都是跟随者,然后会因为等待领导者心跳超时,而选举出新的领导者。

    2020-03-23
    2
  • Heaven
    1.在启动节点的函数中,使用pid作为唯一区分,在内存中,进行内存地址的交流 2.利用端口号加localhost作为本地的不同标识,进行相关的启动
    2020-08-25
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部