2013/3/20 Fabio M. Di Nitto <[email protected]>

> On 3/20/2013 6:26 PM, eXeC001er wrote:
> >
> >
> > 2013/3/20 Fabio M. Di Nitto <[email protected]
> > <mailto:[email protected]>>
> >
> >     On 3/20/2013 5:27 PM, eXeC001er wrote:
> >
> >     >     >
> >     >     > The first Q:
> >     >     >
> >     >     > According to the tests that are part of corosync-sources i
> think
> >     >     that i can:
> >     >     >
> >     >     > 1. create a daemon that register a QDEVICE and will notify
> >     corosync
> >     >     > about the device (votequorum_qdevice_poll()).
> >     >     >
> >     >     > 2. implement a master/slave logic and if the qdevice on a
> node
> >     >     wins then
> >     >     > i call votequorum_qdevice_master_wins() on the node and
> corosync
> >     >     notify
> >     >     > another nodes about this, so i can say that the node is
> MASTER.
> >     >
> >     >     There is no votequorum_qdevice_master_wins() call... where did
> you
> >     >     find it?
> >     >
> >     >
> >     > I am researching corosync-2.3.0 sources.
> >
> >     whoops.. i wrote it and forgot about it..... getting old is bad :)
> >
> >     No it´s a bit more complicated than that.
> >
> >     corosync starts and load the config
> >     later on qdeviced starts and read the config
> >     qdeviced detects that it has to run in master_wins config:
> >      call votequorum_qdevice_master_wins(..., 1);
> >     that calls set a flags for the node and makes sure that the feature
> is
> >     enabled internally.
> >
> >
> > I thought about a different scenario:
> >
> > master_wins and cast_vote are different flags and they are used in
> > different cases.
> >
> > 1. uses only "cast_vote" and the flag can be used to decide that on a
> > node everything fine and the node is a member of cluster (the cluster
> > does not have master/slave)
> >
> > for example in a cluster (3 nodes) i have several qdevices on each node:
> > storage-qdevice and client-network-qdevice
>
> The API does not support multiple qdevices. This kind of implementation,
> where you need to poll multiple targets, can be multiplexed/proxy´d by
> the votequorum consumer.
>
> qdevice does not need to know how much to vote. That´s votequorum
> problem. How the qdevice implementation handles internal voting/scoring
> it´s qdevice implementation problem.
>
> >
> > config:
> > each qdevice has 2 votes
> > each node has 1 vote
> > expected votes = 7 votes (1 own vote + 1 vote from anoter node + 2 votes
> > from each qdevice)
>
> ^^^^ that won´t work. votequorum accepts only one value for qdevice votes.
>
> > 2. "master_wins" and "cast_vote" are used.
> >
> > in this case "cast_vote" will work as in case 1 and "master_wins" will
> > control master/slave
>
> The need to propagate the value for master_win and it´s status is to allow:
>
> node1 node2 node3 node4
>
> qdevice is master on node3 for example
>
> in case of a 50%/50% split you have:
>
> node1 node2 <- not quorate
>


please correct me if i am wrong

at start point on each node qdevice sets in corosync "master_wins=1", each
node is a memeber and node3 is master according to decision of qdevice.

so:
- node1, node2 and node4 have 4 votes
- node3 has 5 votes

at some point we a 50%/50% split:

node1 + node2  AND node3 + node4

so:
- node1, node2 have 2 votes
- node4 has 2 votes
- node3 has 3 votes

the quorum is 3 votes.

I see the following condition

 755     if ((qdevice_master_wins) &&
 756         (!quorate) &&
 757         (check_qdevice_master() == 1)) {


 758         log_printf(LOGSYS_LEVEL_DEBUG, "node is quorate as part of
master_wins partition");
 759         quorate = 1;
 760     }

and

 544 static int check_qdevice_master(void)


 545 {
 546     struct cluster_node *node = NULL;
 547     struct list_head *tmp;
 548     int found = 0;
 549
 550     ENTER();
 551
 552     list_iterate(tmp, &cluster_members_list) {
 553         node = list_entry(tmp, struct cluster_node, list);
 554         if ((node->state == NODESTATE_MEMBER) &&
 555             (node->flags & NODE_FLAGS_QDEVICE_MASTER_WINS) &&
 556             (node->flags & NODE_FLAGS_QDEVICE_CAST_VOTE)) {
 557                 found = 1;
 558         }
 559     }
 560
 561     LEAVE();
 562     return found;
 563 }

and i cannot understand how node4 is a part of master_wins partition.


> with the old cman quorum:
>
> node3 quorate
> node4 not quorate (that´s also why we force master_win in 2 node only)
>
> with the master_win flag set in votequorum:
>
> node3 quorate
> node4 quorate (because part of a partition with a master qdevice)
>
> note that node4 does not have the votes from qdevice at this point.
>
> Fabio
>
> _______________________________________________
> Openais mailing list
> [email protected]
> https://lists.linuxfoundation.org/mailman/listinfo/openais
>
_______________________________________________
Openais mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/openais

Reply via email to