gpt4 book ai didi

go - 了解 etcd Leader 选举 API

转载 作者:行者123 更新时间:2023-12-05 04:36:00 26 4
gpt4 key购买 nike

我试图理解 etcd election api 提供的各种功能以及它们在语义上的含义。

在他们的官方文档中非常简单地提到了每个功能的作用,并且没有提供示例。例如我们有方法:

func (e *Election) Campaign(ctx context.Context, val string) error

根据我的理解,campaign 用于在选举中登记节点以获得领导地位,它会被阻止,直到实现或出现某些错误。

func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election

这个我不太确定为什么要恢复选举,假设node已经是leader了。也许我缺乏理解是由于这里使用的语义。

既然我们必须使用一个共同的选举标识符,为什么单次选举还不够呢?

最后我的用例是运行多个节点并且只允许领导者进行一些计算/更新,在什么情况下如果单次选举不够我必须创建新的选举。

最佳答案

  1. 在代码库中,ResumeElection API 仅在electionServer) ResignelectionServer) Proclaim 中调用。

  2. 有一些评论

// Resign lets a leader start a new election.
func (e *Election) Resign(ctx context.Context) (err error) {

// Proclaim lets the leader announce a new value without another election.
func (e *Election) Proclaim(ctx context.Context, val string) error {
  1. ResumeElection 的实现只是返回一个结构。
// ResumeElection initializes an election with a known leader.
func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election {
return &Election{
keyPrefix: pfx,
session: s,
leaderKey: leaderKey,
leaderRev: leaderRev,
leaderSession: s,
}
}

因此,您的问题的答案是:ResumeElection 的对面是 NewElection,而不是 Campaign

更多的是,当客户端已经有一个领导者,并且想要改变集群的状态(设置一个变量或放弃领导者)。它将调用 ResumeElection 而不是 Campaign

关于go - 了解 etcd Leader 选举 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70899475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com