Comment fonctionne la détection des nœuds terminés dans Erlang ?Comment net_ticktime influence-t-il le contrôle de la vivacité des nœuds dans Erlang ?

StackOverflow https://stackoverflow.com//questions/24061270

Question

J'ai défini la valeur net_ticktime sur 600 secondes.

net_kernel:set_net_ticktime(600)

Dans la documentation Erlang pour net_ticktime = TickTime :

Spécifie le temps de tick net_kernel.TickTime est donné en secondes.Une fois toutes les TickTime/4 secondes, tous les nœuds connectés sont cochés (si quelque chose d'autre a été écrit sur un nœud) et si rien n'a été reçu d'un autre nœud au cours des quatre (4) dernières fois, ce nœud est considéré comme étant en panne.Cela garantit que les nœuds qui ne répondent pas, pour des raisons telles que des erreurs matérielles, sont considérés comme étant en panne.

Le temps T, pendant lequel un nœud qui ne répond pas est détecté :

MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4

TickTime est par défaut de 60 (secondes).Ainsi, 45 < T < 75 secondes.

Note:Normalement, un nœud de terminaison est détecté immédiatement.

Mon problème: Mon TickTime est de 600 (secondes).Ainsi, 450 (7,5 minutes) < T < 750 secondes (12,5 minutes).Cependant, lorsque je définis net_ticktime sur tous les nœuds distribués dans Erlang sur la valeur 600 en cas de panne d'un nœud (par exemple.lorsque je ferme le shell Erlang), les autres nœuds reçoivent un message immédiatement et non selon la définition du ticktime.

Cependant, il est à noter que normalement un nœud de terminaison est détecté immédiatement mais je n'ai pas trouvé d'explication (ni dans la documentation Erlang, ni dans le livre électronique Erlang ou dans d'autres sources basées sur Erlang) de ce principe de réponse immédiate pour la terminaison de nœud dans Erlang distribué.Les nœuds dans un environnement distribué sont-ils périodiquement pingés à des intervalles plus petits que net_ticktime ou le nœud de destination envoie-t-il une sorte de message aux autres nœuds avant de se terminer ?S'il envoie un message, existe-t-il des scénarios dans lesquels, une fois terminé, le nœud ne peut pas envoyer ce message et doit recevoir une requête ping pour enquêter sur sa vivacité ?

Il est également noté dans la documentation Erlang que Distributed Erlang n'est pas très évolutif pour les clusters de plus de 100 nœuds, car chaque nœud conserve des liens vers tous les nœuds du cluster.L'algorithme d'investigation de la vivacité des nœuds (pinging, annonce de terminaison) est-il modifié avec l'augmentation de la taille du cluster ?

Était-ce utile?

La solution

Lorsque deux nœuds Erlang se connectent, une connexion TCP est établie entre eux.L'échec que vous induisez entraînerait la fermeture de la connexion par le système d'exploitation sous-jacent, avertissant ainsi l'autre nœud très rapidement.

Le tick réseau est utilisé pour détecter une connexion à un nœud distant qui semble être active mais ne transmet pas réellement de trafic, comme cela peut se produire lorsqu'un événement réseau isole un nœud.

Si vous souhaitez simuler une panne qui nécessiterait une coche pour être détectée, utilisez un pare-feu pour bloquer le trafic sur la connexion créée lors du premier ping des nœuds.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top