2016-05-17 5 views
1

J'apprends radeau à partir de zéro avec le Raft paper, et je ne peux pas comprendre le processus d'élection des dirigeants. Je lis dans un chef que 5.4.1 doit avoir dans son journal toutes les entrées engagées du cluster:RAFT restrictions électorales

Raft utilise une approche plus simple où il garantit que toutes les entrées engagés de termes précédents sont présents sur chaque nouveau leader à partir du moment de son élection, sans avoir besoin de transférer ces entrées au leader. Raft utilise le processus de vote pour empêcher un candidat de gagner une élection à moins que son journal contienne toutes les entrées validées.

Mais plus tard, il est dit qu'un candidat détient toutes les entrées engagées si elle est au moins aussi mise à jour comme tout autre journal dans la majorité. Et le mécanisme pour déterminer cela à jour est de comparer l'index et le terme des dernières entrées. Le journal avec le terme le plus élevé sur la dernière entrée sera plus à jour.

Cela ne pourrait-il pas conduire à une situation dans laquelle un leader a été élu sans toutes les entrées validées précédentes? Par exemple:

enter image description here

Dans ce cas, si le serveur 4 a échoué, le serveur 2 pourrait devenir chef de file, car il a une entrée avec un plus grand terme que la majorité. Mais il n'aurait pas dans son journal les deux entrées validées du terme 2. Est-ce exact? Je me méprends sur quelque chose mais je peux obtenir ce que c'est ...

Répondre

2

La question est, comment les journaux sont-ils arrivés à cet état en premier lieu? Ce n'est pas possible.

Ainsi, il ressemble à:

* Server 2 is leader for term 1 
* Server 1 is leader for term 2 
* Server 2 (perhaps) is leader for term 3 
* Server 4 is leader for term 4 

Mais serveur 2 ne pouvait pas avoir été le chef de file pour un mandat de 3 parce qu'il n'a pas pu obtenir des votes basé sur le fait que la dernière entrée dans son journal aurait été à partir du terme 1. Si un autre serveur était leader pour le terme 3, il doit avoir écrit une entrée pour le terme 3 dans son journal s'il y a une entrée du terme 3 dans le journal du serveur 2. Mais s'il y avait une autre entrée pour le terme 3 dans le journal d'un autre serveur, un serveur avec des entrées du terme 2 n'aurait pas pu être élu puisqu'il n'y en aurait que deux. Même si le serveur 3 avait des entrées du terme 2 dans son journal, il n'aurait pas pu être élu à cette position car il y aurait toujours trois autres serveurs avec des entrées du terme 2 aux index supérieurs dans le journal. Donc, je pense que vous devez décrire comment le cluster s'est trouvé dans un état dans lequel le serveur 2 aurait pu gagner une élection qui mettrait une entrée du terme 3 dans son journal à l'index 4. Il est important de noter que l'élection Le protocole ne concerne pas seulement les termes, mais aussi les indices. Si les dernières entrées de deux serveurs ont le même terme, le serveur avec le dernier index supérieur est considéré comme plus à jour.

+0

Je comprends ce que vous dites, mais ma question est différente. Par exemple, dans l'exemple que vous venez d'énoncer, ce que je ne comprends pas, c'est comment le serveur 2 pourrait devenir leader pour le terme 3 (supposé) quand probablement les deux premières entrées du terme 2 ont été validées. – vandermies

+0

Le serveur 2 ne pouvait pas devenir le leader du terme 3. Pendant une élection, le dernier terme du serveur 2 serait 1. Le serveur 2 ne peut être élu pour le trimestre 3 car la majorité des autres serveurs - serveur 1, 4 et 5 - ont des entrées du terme 2 dans leurs journaux. C'est mon point. Cette histoire n'est pas possible. – kuujo

+0

Ok, donc juste pour m'assurer que je l'obtiens: la restriction qui dit que devenir un serveur doit avoir toutes les entrées validées est ensuite implémentée indirectement en étudiant les termes et les index des autres logs pendant le vote. Pas par une variable qui indique quelles entrées sont validées? Est-ce exact? – vandermies