IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NoSQL Discussion :

[MongoDB] Question sur le sharding


Sujet :

NoSQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [MongoDB] Question sur le sharding
    Bonjour,

    Je suis en train de tester une infrastructure MongoDB (3 config server, 1 mongos et 3 shard server) et j'ai une interrogation rendu a la fin du processus.

    Lorsque je me donne sur l'instance mongos et que je fais un db.printShardingStatus() j'obtiens les informations suivantes :

    Au fait, l'erreur du balancer date de ce matin !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    --- Sharding Status --- 
      sharding version: {
    	"_id" : 1,
    	"minCompatibleVersion" : 5,
    	"currentVersion" : 6,
    	"clusterId" : ObjectId("57ea6dc61d5d0ee0fe5d882f")
    }
      shards:
    	{  "_id" : "shard-repl",  "host" : "shard-repl/(liste de serveur)" }
      active mongoses:
    	"3.2.9" : 1
      balancer:
    	Currently enabled:  yes
    	Currently running:  no
    	Failed balancer rounds in last 5 attempts:  5
    	Last reported error:  could not find host matching read preference { mode: "primary" } for set shard-repl
    	Time of Reported error:  Tue Sep 27 2016 09:42:55 GMT-0400 (Est)
    	Migration Results for the last 24 hours: 
    		No recent migrations
      databases:
    	{  "_id" : "metric-old",  "primary" : "shard-repl",  "partitioned" : true }
    		metric-old.sessions
    			shard key: { "_id" : 1 }
    			unique: false
    			balancing: true
    			chunks:
    				shard-repl	1002
    			too many chunks to print, use verbose if you want to force print
    Ce qui me laisse croire que le sharding fonctionne. Toutefois, lorsque je vais sur l'une des instances mongod et effectue la commande :
    db.getCollection("sessions").getShardDistribution()


    J'obtiens : Collection metric-old.sessions is not sharded.

    Est-ce que j'aurais manqué une étape ? :-/

    Merci de votre aide

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    Désolé pour cette réponse plus que tardive, mais je suis en train de m'autoformer à MongoDB et je viens tout juste d'aborder cette semaine le concept de Sharding, juste après avoir abordé celui des Replica Sets.

    Je profite au passage pour informer nos lecteurs intéressés qu'il est possible de s'autoformer gratuitement sur le site de MongoDB, en suivant leurs cours en ligne :
    https://university.mongodb.com

    Et plus particulièrement la formation MongoDB pour les DBA :
    https://university.mongodb.com/courses/M102/about

    Ces formations sont très complètes, mais aussi chronophages en temps. Pour information, celle de DBA (mais aussi celle de développeur que je suis aussi) dure 7 semaines. Chaque semaine, vous avez en gros de 15 à 30 vidéos à regarder. d'une durée totale de 2 à 3 heures en cumulé.

    Après presque chaque vidéo, il y a un quiz, non noté. Et à la fin des vidéos, il y a 3 ou 4 exercices à faire chez soi. Ceux là donnent une note, et permet d'avoir à la fin un certificat électronique, si l'on a suivi au moins 65 % de la formation. Attention, chaque cours s'étale sur une semaine (du mardi 18h au mardi suivant 18h pour mon cas) et vous ne pouvez pas rendre vos exercices en retard.

    Pour finir, entre regarder les vidéos, les comprendre et prendre des notes (sinon on a vite fait d'oublier), faire les quiz et les exercices, moi j'y consacre entre 10 à 15h par semaine, et par formation, et pour moi on est bien loin des estimations du site avec 2 heures de vidéo et 3 heures d'exercices, soit un total de 5 heures.

    Bon je fais un nouveau message pour répondre à Winterhaze.

  3. #3
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour Winterhaze,

    Je suis en train de tester une infrastructure MongoDB : 3 config server, 1 mongos et 3 shard server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      shards:
    	{  "_id" : "shard-repl",  "host" : "shard-repl/(liste de serveur)" }
      active mongoses:
    Désolé mais non, tu n'as pas 3 Shard Servers, mais 1 seul Shard qui s'appuie sur un Replica Set.

    Si tu avais eu 3 Shards, on aurait alors 3 lignes (3 documents JSON) listant ces Shards, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      shards:
    	{  "_id" : "shard-repl-1",  "host" : "shard-repl-1/(liste de serveur)" }
    	{  "_id" : "shard-repl-2",  "host" : "shard-repl-2/(liste de serveur)" }
    	{  "_id" : "shard-repl-3",  "host" : "shard-repl-3/(liste de serveur)" }
      active mongoses:
    Sinon :
    Lorsque je me donne sur l'instance mongos et que je fais un db.printShardingStatus()
    Je pinaille un peu, mais on ne se donne pas sur l'instance mongos. On lance l'exécutable mongo qui est le client MongoDB et qui permet effectivement, selon le port que l'on précise, de se connecter à un process mongos qui est le routeur lorsque l'on utilise le Sharding, ou bien à un process mongod qui sert à gérer une base.

    Pour connaître l'état de son cluster shardé, tu as raison de te connecter sous mongos. et si la commande db.printShardingStatus() fonctionne, il y a plus simple en utilisant :
    Tout cela pour dire qu'il vaut mieux utiliser les commandes selon ce que l'on veut faire :
    - db.* pour tout ce qui est interrogation sur une base
    - sh.* pour tout ce qui est interrogation au niveau du cluster shardé
    - rs.* pour tout ce qui concerne les Replica Sets

    Ce qui me laisse croire que le sharding fonctionne.
    Oui au final, je suis d'accord. Ton cluster shardé fonctionne et d'après tes dires, il doit fonctionner sur :
    - 3 Config Servers
    - 1 Mongos
    - 1 seul Shard Server, lequel repose non pas sur un unique serveur, mais sur un Replica Set qui contient ta fameuse liste de serveurs


    Toutefois, lorsque je vais sur l'une des instances mongod
    Ben non. Pourquoi te connecter à un process mongod ?
    Se connecter à mongod, c'est valable lorsque l'on a des bases en standalone (seules) ou en Replica Set.

    Mais dès que l'on s'est monté une architecture sur un cluster shardé (avec du Replica Set ou pas), on se connecte à un routeur mongos qui lui connaît tout du cluster, car il est aussi bien relié aux Config Servers qu'aux Shard Servers, et il sait toujours à qui s'adresser parmi tous ces process.

    Dans un cluster shardé, on ne se connecte qu'à mongod pour des opérations d'administration uniquement, par exemple pour administrer le Replica Set. Sinon c'est mongos qu'il faut utiliser.


    Toutefois, lorsque je vais sur l'une des instances mongod et effectue la commande :
    db.getCollection("sessions").getShardDistribution()

    J'obtiens : Collection metric-old.sessions is not sharded.

    Est-ce que j'aurais manqué une étape ? :-/
    Ce n'est pas que tu as manqué une étape, c'est le fait d'être connecté à mongod qui te gêne. Ce process gère ta base de données metric-old, et pour ta collection sessions, il ne gère que des Chunks, et mongod ne sait pas si ta collection est shardée ou pas. Mongod n'a pas la vision entière du cluster.

    D'ailleurs pour ma part, j'ai une collection trades, et si je vais sur mongod, j'ai la même erreur que toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MongoDB Enterprise > db.getCollection("trades").getShardDistribution()
    Collection week6.trades is not sharded.

    Maintenant si je vais sur mongos, qui lui connait toute la configuration du cluster, car il a toutes lnformations (les métadonnées) en interrogeant les Config Servers, ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    MongoDB Enterprise mongos> db.getCollection("trades").getShardDistribution()
    
    Shard shard0000 at PC:27018
     data : 103.21MiB docs : 445382 chunks : 4
     estimated data per chunk : 25.8MiB
     estimated docs per chunk : 111345
    
    Shard shard0001 at PC:27020
     data : 128.52MiB docs : 554619 chunks : 4
     estimated data per chunk : 32.13MiB
     estimated docs per chunk : 138654
    
    Totals
     data : 231.74MiB docs : 1000001 chunks : 8
     Shard shard0000 contains 44.53% data, 44.53% docs in cluster, avg obj size on shard : 243B
     Shard shard0001 contains 55.46% data, 55.46% docs in cluster, avg obj size on shard : 242B


    Par contre, pour finir, je n'ai pas d'idée sur l'origine de cette erreur de Read Preference :

    Last reported error: could not find host matching read preference { mode: "primary" } for set shard-repl
    Par contre, c'est là qu'il faut te connecter à mongod de ton Replica Set, pour connaître son status :
    En espérant t'avoir aidé.

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 22h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 22h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 09h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 22h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo