Skip to content

Category archive for: Technologie

Elasticsearch : MasterNotDiscoveredException et discovery.zen.minimum_master_nodes

elasticsearch-logo-icon-lg
On ne présente plus Elasticsearch, ce moteur de recherche open source distribué et surtout très accessible.

Elasticsearch est très simple à mettre en oeuvre et à utiliser, mais la mise en place d’un cluster peut tout de même poser problème, en particulier pour la gestion du « master node ».

Le master node est le noeud du cluster qui est chargé de l’allocation des « shards » parmi les différents noeuds. Il est donc important qu’à un instant T, il y ait un et un seul master node.

————— Les master nodes et le split-brain —————

Imaginons qu’une interruption réseau empêche temporairement les noeuds de votre cluster de communiquer entre eux.
Certains noeuds ne pouvant plus parler au « master node » vont déclencher spontanément l’élection d’un nouveau master.

Le résultat de cette élection sera ce qu’on appelle un split-brain : le cluster se trouve séparé en deux avec deux « master node » différents (et donc une désynchronisation des indexations).

Il s’agit bien sûr d’une situation à éviter absolument. Heureusement, il existe une solution : modifier le paramètre discovery.zen.minimum_master_nodes, défini de la manière suivante :

The discovery.zen.minimum_master_nodes allows to control the minimum number of master eligible nodes a node should « see » in order to operate within the cluster.

La solution au « split-brain » consiste donc à définir discovery.zen.minimum_master_nodes avec le nombre de noeuds du cluster / 2 + 1. S’il y a 8 noeuds dans votre cluster, vous renseignerez alors cette valeur à 5.
Ainsi, 5 noeuds votants sont nécessaires à l’élection d’un nouveau master. 2 machines ne peuvent donc pas obtenir suffisamment de votes pour être élues en simultané.

————— MasterNotDiscoveredException —————

Voilà, tout va pour le mieux dans le meilleur des mondes, votre cluster fonctionne et … vous souhaitez déconnecter une partie de vos noeuds.

Imaginons que nous ayons 8 noeuds sur notre cluster et que nous souhaitions passer sur 4 noeuds. Le paramètre discovery.zen.minimum_master_nodes de départ vaut 5.

Il faut alors modifier à nouveau le paramètre discovery.zen.minimum_master_nodes pour prendre en compte le nouveau nombre de noeuds nécessaires à l’élection (4 / 2 + 1, donc 3). Cette modification peut s’effectuer avec curl via l’API settings :

curl -XPUT localhost:9200/_cluster/settings -d '{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 3
    }
}'

Voilà. Si on stoppe maintenant nos noeuds, le cluster continuera de tourner, n’est-ce pas ?
Oui … seulement si on ne coupe pas le master.

Si jamais le master node fait partie des noeuds arrêtés, les requêtes que vous effectuerez retourneront MasterNotDiscoveredException :

curl -XGET "http://localhost:9200/_cluster/health?pretty=true"
{
  "error" : "MasterNotDiscoveredException[waited for [30s]]",
  "status" : 503
}

————— Mais que se passe-t-il ? —————

Résumons :

  • Notre cluster comprenait 8 noeuds
  • Le « discovery.zen.minimum_master_nodes » vaut 5
  • Nous souhaitons passer à 4 noeuds
  • Nous avons modifié le « discovery.zen.minimum_master_nodes » à 3 (4 / 2 + 1)
  • On stoppe des noeuds quelconques pour se ramener à 4 noeuds => pas de soucis
  • Si le master est parmi les noeuds stoppés => MasterNotDiscoveredException

Tout se passe comme si le cluster n’appliquait plus le bon quota, puisqu’un nouveau master n’a pas été élu.

Voici mon analyse du problème :

  • La modification dynamique du paramètre « discovery.zen.minimum_master_nodes » via l’API « /_cluster/settings » est prise en compte par le master. C’est lui qui est chargé de redispatcher ce paramètre entre les noeuds
  • Si le master est stoppé, il ne peut plus servir de référence pour les paramètres dynamiques « /_cluster/settings », les noeuds utilisent donc le paramétrage par défaut (issu du elasticsearch.yml)

Bref, dans la mesure du possible, il est préférable de passer par le elasticsearch.yml pour modifier le « discovery.zen.minimum_master_nodes ».

Lytro – une nouvelle façon de prendre des photos : le champ de lumière

Voici une avancée sympathique dans le domaine de la photographie : le lytro.

Il s’agit d’une façon totalement différente de prendre des photos : au lieu de capturer une projection de lumière sur une surface plane, le lytro capture un champ de lumière (en gros, il s’agit de vecteurs de lumière qui sont enregistrés).

Gros avantage : vous pouvez effectuer votre mise au point APRES la prise de vue.

Exemple : voici une photo vue avec 2 mises au point différentes :

Plus d’exemples sur le site de lytro.

[ Lytro ]

OnLive : une démonstration bluffante en vidéo

Avez-vous entendu parler de OnLive ?

Il s’agit d’une technologie de jeu vidéo à la demande en cloud computing.

Le principe :

vous n’avez qu’à installer un petit plugin sur votre navigateur ou brancher un petit boîtier sur votre télé, et c’est parti !

Les jeux n’ont pas besoin d’être installé et vous n’avez pas besoin d’une bête de course : tout est exécuté sur des machines distantes surboostées !

Voici une vidéo de démonstration :

Tout ce que je peux dire, c’est que si ça marche aussi bien lors de l’ouverture du service, ce sera véritablement l’avenir du jeu vidéo.

Mais reste quand même les inévitables questions de débit et de fiabilité des connexions internet.

Alors, révolution ou pétard mouillé ? J’ai hâte de savoir !

[ Les vidéos de la présentation « technique » ] (donnée à l’université de Columbia par Steeve Perlman, le PDG d’OnLive)

[ Plus d’infos sur wikipedia ]

Présentation vidéo des technologies Google

Voici les vidéos d’une session du Ch’ti JUG consacrée aux technologies Google.

Didier Girard y a donné des démonstrations live et sans filet d’AppEngine, GWT, Android ou encore Wave.

1ère partie : Appengine

2ème partie : GWT et Android

3ème partie : Google Wave

Ayant dû partir avant la fin de ces présentations, je suis ravi de pouvoir les visualiser en ligne !

L’ensemble des vidéos du chtijug est disponible en suivant le lien suivant.

[ Les sessions chtijug en vidéo ]

OpenQRM : la virtualisation, c’est quoi ?

Voici une petite vidéo issue du site d’OpenQRM expliquant rapidement le déploiement de serveurs et d’applications sur des machines virtuelles (ou physiques) d’un datacenter.

Tout semble intuitif :

  • on compose sa machine
  • on ajoute les applications
  • on lance le déploiement
  • peu de temps après, on reçoit par mail une adresse IP et un couple login/password

Dans la pratique, je ne sais pas si c’est aussi limpide, mais le principe est alléchant.

[ OpenQRM ]
[ OnLAMP : An Introduction to openQRM ]