Découverte de Elasticsearch

Bonjour,

Je découvre actuellement Elasticsearch, il me parait être une solution excellente dans mon projet actuel !

Je voudrais héberger Elasticsearch sur des postes de travail pour créer des "petits" noeuds. Chacun se connecterait à un trio de noeuds principaux hébergés sur des machines dédiées.

  1. Est-ce que Elasticsearch permet une sorte de hot-swap ? Permet-il de déconnecter et reconnecter un noeud sans que cela n'ai d'incidence sur le reste des noeuds ? (ici je parle bien entendu des "petits" noeuds, hébergés sur des postes de travail normaux, qu'on allume et qu'on éteind régulièrement).

  2. Quelle seraient les conséquences d'héberger des noeuds sur des postes de travail normaux ? (sur le cluster lui même, sur le réseau, sur les postes de travail).

Merci d'avance pour vos futurs interventions !

Morgan

Ton besoin est de synchroniser localement un cluster central ES avec un poste client qui puisse fonctionner en déconnecté ou d'avoir un noeud client, passerelle vers le cluster ES ?

Pour le premier cas, je ferais sans doute du snapshot et restore local assez régulièrement.
Pour le second cas, j'utiliserai un noeud client pur (no data, no master).

Tu peux en dire plus sur ton cas ?

Je voudrais pouvoir faire en sorte que les personnes qui travaillent, puisse le faire en étant déconnectées en cas de panne réseau par exemple.

L'association pour laquelle je travail dispose d'un parc informatique décentralisé sur une commune. Pour l'instant on a des serveurs de partages, mais quand il y a un problème c'est pratiquement tout le monde qui morfle.

L'idée, c'est de faire en sorte que chaque poste de travail puisse être un noeud du cluster afin que toutes les données soient partagée et accessibles, même lorsque le réseau rencontre des problèmes. Et qu'au pire des cas, le travailleur puisse continuer à travailler de manière local.
Pour te donner un exemple, dans mon bâtiment on s'est déjà retrouvé déconnecté de tout parce qu'une société tierce, faisant des travaux dans la rue, à littéralement couper notre ligne. Résultat, plus accès à rien.

Je voudrais pouvoir proposer une solution qui prend en compte la décentralisation.

Donc si j'ai bien compris dans mon cas, à chaque fois qu'un noeud client se reconnecte au cluster, il devrait entreprendre un restore local ?
Est-ce que cela prendrait en compte les éditions de document faite en local pendant une panne de réseau ?

EDIT :
Pour être plus précis, mon projet est de développé une application client AngularJS qui exploite l'API REST d'ES.
Elle serait locale et foncionnerait sur NodeWebKit pour pouvoir distribuer l'application facilement.

Là pour le moment, je ne pense pas qu'il y ait autre chose que faire du snapshot/restore ou de la recopie manuelle des fichiers sur chaque poste.

Mais honnêtement, je ne sais pas si acheter un routeur avec un clé 4G en backup ne serait pas plus simple... :slight_smile:

Avec elasticsearch, tu auras "un jour" l'API changes qui permettra de faire ce genre de chose mais là, je pense que c'est prématuré.

Faire en sorte que chaque poste client devienne un noeud du cluster va te créer beaucoup plus de problème que d'en résoudre.

Tu vas :

  • avoir de la latence réseau énorme à chaque indexation de nouveau document
  • devoir gérer en permanence le nombre de replica en fonction des postes connectés
  • avoir du gros traffic sur le réseau dès qu'un noeud va tomber si tu as mal géré ^^^

Donc si j'ai bien compris dans mon cas, à chaque fois qu'un noeud client se reconnecte au cluster, il devrait entreprendre un restore local ?

Non. Il va redistribuer les shards en fonction du nb de shards par index et du nb de replicas demandés.

Ok, là c'est beaucoup plus clair dans ma tête.
Donc, coté client et gestion des sauvegardes locales, c'est mon application qui gère localement elle même.

Est-ce plus réaliste par exemple de mettre une machine dédiée à ES dans chaque localisation géographique ?
En gros mettre un serveur ES dans chaque réseau local. Chaque client se connectant, via l'API REST, au serveur ES de son réseau local.

Oui complètement. Mais encore une fois, ne pas faire du multi datacenter aujourd'hui avec elasticsearch.

L'idéal à mon avis serait :

  • indexer dans le DC central
  • faire du snapshot et restore régulier (toutes les heures par exemple) vers tous les autres DC
  • en local utiliser un client qui essaye d'abord le cluster central et fallback sur le local si nécessaire

Okééé :smile:

Ça s'annonce bien !
Je vais taffer dans ce sens, merci beaucoup pour les infos !

Une dernière petite question, quand tu parles de faire du snapshot et restore, est-ce que ces opérations peuvent être automatisées directement dans ES ?

Non pas aujourd'hui.
Ca viendra peut-être avec Task Management API...