了解 etcd Leader 选举 API
Understanding etcd Leader election APIs
我正在尝试理解 etcd 选举提供的各种功能 api 以及它们在语义上的含义。
在他们的官方文档中非常简单地提到了每个功能的作用,并且没有提供示例。
例如我们有方法:
func (e *Election) Campaign(ctx context.Context, val string) error
根据我的理解,活动用于在选举中登记节点以获得领导地位,它会被阻止,直到完成或出现某些错误。
func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election
这个我不太清楚为什么要恢复选举,假设node已经是leader了。
也许我缺乏理解是由于这里使用的语义。
既然我们必须使用共同的选举标识符,为什么单次选举还不够?
最后我的用例是运行几个节点并且只允许leader执行一些computation/updates,在什么情况下我必须创建新的选举如果单一选举不会够了。
在代码库中,ResumeElection
API 仅在 electionServer) Resign
和 electionServer) Proclaim
中被调用。
有评论
// 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 {
ResumeElection
的实现只是 return 一个结构。
// 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
.
我正在尝试理解 etcd 选举提供的各种功能 api 以及它们在语义上的含义。
在他们的官方文档中非常简单地提到了每个功能的作用,并且没有提供示例。 例如我们有方法:
func (e *Election) Campaign(ctx context.Context, val string) error
根据我的理解,活动用于在选举中登记节点以获得领导地位,它会被阻止,直到完成或出现某些错误。
func ResumeElection(s *Session, pfx string, leaderKey string, leaderRev int64) *Election
这个我不太清楚为什么要恢复选举,假设node已经是leader了。 也许我缺乏理解是由于这里使用的语义。
既然我们必须使用共同的选举标识符,为什么单次选举还不够?
最后我的用例是运行几个节点并且只允许leader执行一些computation/updates,在什么情况下我必须创建新的选举如果单一选举不会够了。
在代码库中,
ResumeElection
API 仅在electionServer) Resign
和electionServer) Proclaim
中被调用。有评论
// 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 {
ResumeElection
的实现只是 return 一个结构。
// 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
.