You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@zookeeper.apache.org by Lee Eric <op...@gmail.com> on 2019/10/27 06:11:40 UTC

ZooKeeper Leader Election Question

Hi,

I have a dumb question about the way how zookeeper does leader election.

There is a quorum zk1(1,6), zk2(2,5) and zk3(3,5). The number in
parentheses is sid and latest zxid. So my question is, when each
server sends out the vote to other 2, say, zk1 and zk2 send the votes
to zk3. So zk3 has 2 votes (1,6) and (2,5). Now, based on the rules:

1. If (voteZxid > myZxid) or (voteZxid = myZxid and voteId > mySid),
keep the current vote.
2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to vote
Zxid.

So what zk3 vote would be? I'm confused because to compare zk1 and
zk3, the vote on zk3 is (1,6); but to compare zk2 and zk3, zk3 should
keep its vote.

So in this case, how the vote should be settled?

Thanks.

Eric

Re: ZooKeeper Leader Election Question

Posted by Zhewei Hu <zh...@gmail.com>.
Hi Eric,

I think Shay just gave an example. zk3 can get votes from either zk1 first
or zk2 first. Also, zk3 will wait for 200ms (finalizeWait) to make sure it
can (hopefully) get both votes from zk1 and zk2.

The rule ZK compares the votes is the one you mentioned above.

HTH,
Zhewei



--
Sent from: http://zookeeper-user.578899.n2.nabble.com/

Re: ZooKeeper Leader Election Question

Posted by Lee Eric <op...@gmail.com>.
Hi Shay,

I have a question here. Why zk3 compare the zk1 vote first then zk2
one? What's the rule zookeeper would compare the votes?

Thanks.

Eric

On Sun, Oct 27, 2019 at 7:31 PM Lee Eric <op...@gmail.com> wrote:
>
> Hi Shay,
>
> Thanks for your reply. It seems the PDF version has a typo on that
> part. Thank you for your clarifications.
>
> Eric
>
> On Sun, Oct 27, 2019 at 4:40 PM shay shimony <sh...@gmail.com> wrote:
> >
> > Hi Eric,
> >
> > I checked the Leader Elections section in the ZooKeeper book of Junqueira and Reed, and found that you have a mistake in the rules that you quoted - the '>' sign should be '<':
> >
> > 1. If (voteZxid < myZxid) or (voteZxid = myZxid and voteId < mySid),
> > keep the current vote.
> > 2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to vote zxid.
> >
> > When z3 compares votes from z1(1, 6) and its current vote (3, 5), it changes its vote to (1, 6).
> > Next, z3 compares (2, 5) and its current vote (1, 6), and keeps its current vote (1, 6).
> >
> > After these 2 iterations z3 will send again its vote to z1 and z2 - this time (1, 6).
> > Next, z3 and z1 form a quorum of 2, with z1 as leader and z3 as its follower.
> >
> > Hopefully z2 will be on the same page, similarly will join the quorum, and set itself as follower of z1 as well (normally it will).
> >
> > Hope it helps,
> > Shay
> >
> > On Sun, Oct 27, 2019 at 8:11 AM Lee Eric <op...@gmail.com> wrote:
> >>
> >> Hi,
> >>
> >> I have a dumb question about the way how zookeeper does leader election.
> >>
> >> There is a quorum zk1(1,6), zk2(2,5) and zk3(3,5). The number in
> >> parentheses is sid and latest zxid. So my question is, when each
> >> server sends out the vote to other 2, say, zk1 and zk2 send the votes
> >> to zk3. So zk3 has 2 votes (1,6) and (2,5). Now, based on the rules:
> >>
> >> 1. If (voteZxid > myZxid) or (voteZxid = myZxid and voteId > mySid),
> >> keep the current vote.
> >> 2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to vote
> >> Zxid.
> >>
> >> So what zk3 vote would be? I'm confused because to compare zk1 and
> >> zk3, the vote on zk3 is (1,6); but to compare zk2 and zk3, zk3 should
> >> keep its vote.
> >>
> >> So in this case, how the vote should be settled?
> >>
> >> Thanks.
> >>
> >> Eric

Re: ZooKeeper Leader Election Question

Posted by Lee Eric <op...@gmail.com>.
Hi Shay,

Thanks for your reply. It seems the PDF version has a typo on that
part. Thank you for your clarifications.

Eric

On Sun, Oct 27, 2019 at 4:40 PM shay shimony <sh...@gmail.com> wrote:
>
> Hi Eric,
>
> I checked the Leader Elections section in the ZooKeeper book of Junqueira and Reed, and found that you have a mistake in the rules that you quoted - the '>' sign should be '<':
>
> 1. If (voteZxid < myZxid) or (voteZxid = myZxid and voteId < mySid),
> keep the current vote.
> 2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to vote zxid.
>
> When z3 compares votes from z1(1, 6) and its current vote (3, 5), it changes its vote to (1, 6).
> Next, z3 compares (2, 5) and its current vote (1, 6), and keeps its current vote (1, 6).
>
> After these 2 iterations z3 will send again its vote to z1 and z2 - this time (1, 6).
> Next, z3 and z1 form a quorum of 2, with z1 as leader and z3 as its follower.
>
> Hopefully z2 will be on the same page, similarly will join the quorum, and set itself as follower of z1 as well (normally it will).
>
> Hope it helps,
> Shay
>
> On Sun, Oct 27, 2019 at 8:11 AM Lee Eric <op...@gmail.com> wrote:
>>
>> Hi,
>>
>> I have a dumb question about the way how zookeeper does leader election.
>>
>> There is a quorum zk1(1,6), zk2(2,5) and zk3(3,5). The number in
>> parentheses is sid and latest zxid. So my question is, when each
>> server sends out the vote to other 2, say, zk1 and zk2 send the votes
>> to zk3. So zk3 has 2 votes (1,6) and (2,5). Now, based on the rules:
>>
>> 1. If (voteZxid > myZxid) or (voteZxid = myZxid and voteId > mySid),
>> keep the current vote.
>> 2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to vote
>> Zxid.
>>
>> So what zk3 vote would be? I'm confused because to compare zk1 and
>> zk3, the vote on zk3 is (1,6); but to compare zk2 and zk3, zk3 should
>> keep its vote.
>>
>> So in this case, how the vote should be settled?
>>
>> Thanks.
>>
>> Eric

Re: ZooKeeper Leader Election Question

Posted by shay shimony <sh...@gmail.com>.
Hi Eric,

I checked the Leader Elections section in the ZooKeeper book of Junqueira
and Reed, and found that you have a mistake in the rules that you quoted -
the '>' sign should be '<':

1. If (voteZxid *<* myZxid) or (voteZxid = myZxid and voteId *<* mySid),
keep the current vote.
2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to
vote zxid.

When z3 compares votes from z1(1, 6) and its current vote (3, 5), it
changes its vote to (1, 6).
Next, z3 compares (2, 5) and its current vote (1, 6), and keeps its current
vote (1, 6).

After these 2 iterations z3 will send again its vote to z1 and z2 - this
time (1, 6).
Next, z3 and z1 form a quorum of 2, with z1 as leader and z3 as its
follower.

Hopefully z2 will be on the same page, similarly will join the quorum, and
set itself as follower of z1 as well (normally it will).

Hope it helps,
Shay

On Sun, Oct 27, 2019 at 8:11 AM Lee Eric <op...@gmail.com> wrote:

> Hi,
>
> I have a dumb question about the way how zookeeper does leader election.
>
> There is a quorum zk1(1,6), zk2(2,5) and zk3(3,5). The number in
> parentheses is sid and latest zxid. So my question is, when each
> server sends out the vote to other 2, say, zk1 and zk2 send the votes
> to zk3. So zk3 has 2 votes (1,6) and (2,5). Now, based on the rules:
>
> 1. If (voteZxid > myZxid) or (voteZxid = myZxid and voteId > mySid),
> keep the current vote.
> 2. Otherwise, change my vote by assigning myZxid to voteZxid and mySid to
> vote
> Zxid.
>
> So what zk3 vote would be? I'm confused because to compare zk1 and
> zk3, the vote on zk3 is (1,6); but to compare zk2 and zk3, zk3 should
> keep its vote.
>
> So in this case, how the vote should be settled?
>
> Thanks.
>
> Eric
>