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] Mise en place d'un ReplicaSet


Sujet :

NoSQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut [MongoDB] Mise en place d'un ReplicaSet
    Bonjour,

    J'ai actuellement MongoDB installé sur 1 machine virtuelle (sous Ubuntu).
    Afin d'éviter tout crash de la VM (Machine Virtuelle), je souhaite mettre un ReplicaSet avec 3 VM.

    J'ai donc
    - installé Mongo sur les 2 nouvelles VM.
    - indiqué le nom du replica dans "/etc/mongodb.conf" sur les 3 VM.
    - Redémarré MongoDB sur les 3 VM

    Dans ce cas, j'ai une erreur dans les logs qui dit "replSet I don't see a primary and I can't elect myself".

    J'ai trouvé une solution sur un site, mais je souhaiterais savoir si cette solution est vrai :
    Le truc serait de supprimer tous les fichiers "local.*" présent sur la VM n°1 (la déjà existante).

    Est-ce la bonne solution ? Y-a-t-il d'autres solutions ?

    Merci d'avance.

    Cordialement.

  2. #2
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Salut,

    Pour configurer un replica set il y a plusieurs opérations :
    Dans mongodb.conf pour chaque serveur mettre le nom du cluster : replSet = NomDuCluster
    Sur un des nœuds (et un seul !), se connecter en console et faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rsconf = {
                "_id": "NomDuCluster",
                "version": 1,
                "members": [{"_id": 1, "host": hostPremierSlave}, {"_id": 2, "host": hostSecondSlave}, , {"_id": 3, "host": hostMaster}]
            };
    rs.initiate();
    rs.reconfig(rsconf, {force:true});
    rs.status();
    Pour info j'ai fait un script fabric pour faciliter l'installation de Mongodb en cluster que tu peux trouver ici :

    https://github.com/hlassiege/fabric-...ter/mongodb.py

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    J'ai un petit problème avec le scénario donné.
    En effet, j'ai déjà tenté d'ajouter un replicaset, donc une mauvaise configuration est déjà présente.

    Comment faire pour annuler la configuration actuelle ? (mon master actuel est en premier dans la configuration, donc il sera "hostPremierSlave").

    Merci d'avance.

    Cordialement.

  4. #4
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    il faut utiliser rs.reconfig

    Dans certains cas ou tu veux reconfigurer alors que certains noeuds ne sont pas accessibles, tu peux forcer la reconfig. Cette page de doc explique ce cas :
    http://docs.mongodb.org/manual/tutor...lable-members/

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    J'avais testé le "reconfig" mais cela met mettait une erreur du type : "cela ne peut être exécuter que par le Master" hors les 3 étant en "STARTUP" cela ne m'a pas été possible.

    Par contre je n'ai pas testé avec "rs.reconfig(cfg, {force : true})". Cela annule-t-il le problème ?

    Donc normalement si je suis la procédure donnée : http://docs.mongodb.org/manual/tutor...econfiguration (partie "Reconfigure by Forcing the Reconfiguration") cela devrait fonctionner ?
    Faut-il forcément faire un backup du serveur (des données) ? Si oui, est-il possible de les réintégrer à un réplica déjà mis en place ?

    Cordialement.

  6. #6
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    En préambule, je préfère préciser que je ne suis pas expert sur les commandes "admin". Donc a prendre avec des pincettes.

    Quand j'ai eu à configurer un cluster, je n'avais pas de données donc j'utilisais l'option destroy/reinstall à chaque fois. Ce fut plus simple

    Si j'avais eu à le faire, dans le doute d'un crash, j'aurais utilisé un mongodump pour faire un backup, puis éteint 2 noeuds sur trois et utiliser le reconfigure sur le dernier afin de supprimer les noeuds du replica set (http://docs.mongodb.org/manual/tutor...ca-set-member/).
    Enfin j'aurais crashé les deux noeuds restants pour les relancer tout neuf.
    Ensuite, soit les données à synchroniser sont relativement faibles et j'aurais laissé la synchro de base, soit j'aurais copié les dbfiles (http://docs.mongodb.org/manual/tutor...et/#data-files)

    En espérant que ca serve.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Le temps de synchro est bien le problème.

    En effet j'ai entre 20 et 30Go de données actuellement...

    Par contre je me pose une question. Est-il possible de :
    - mettre en place le replica sur 3 autres VM
    - importer les données sur les 3 nouvelles VM.

    Cela permettrait de ne faire la bascule des données que si le replica est fonctionnel.
    La question serait alors : comment faire pour importer les anciennes données ? Juste en remplaçant toutes bases de données (ma BDD s'appelle "mobile" donc remplacer tous les "mobile.X") par les anciennes données ?

    Cela nécessitera-t-il de faire un "repairDatabase" ?

    Merci d'avance.

  8. #8
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Une copie des dbfiles me parait envisageable pour ce cas de figure (voir lien que j'ai mis dans le précédent message). En principe on utilise cette technique pour initier un slave mais la ce serait pour initier tous les membres d'un nouveau replica set. Ca devrait fonctionner.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    OK parfait, je vais essayer ça.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    Je viens de tester la manipulation et cela fonctionne parfaitement.

    Si cela peut servir à quelqu'un à l'avenir :

    Pour résumer, la manipulation est la suivante :
    - mise en place d'un ReplicaSet vierge (configurer 3 VM en Replica, voir plus haut)
    - arrêter les 3 Mongo
    - Copier les données souhaitées sur la VM master (tous les fichiers de Database, pour moi c'était tous les fichiers mobile.X de "/var/lib/mongodb")
    - Allumer la VM master puis se connecter à Mongo pour vérifier que l'on puisse récupérer les données (use madatabase;db.matable.find()
    Si tout est OK, passer sur les autres VM et :
    - supprimer tout ce qu'il y a dans "/var/lib/mongodb" (http://docs.mongodb.org/manual/tutor...-sync-a-member)
    - relancer Mongo et vérifier que les requêtes sont fonctionnelles (use mobile;db.matable.find(). Si message d'erreur "not master" alors faire un "rs.slaveOk(true)".
    - la synchronisation peut prendre quelques minutes selon les données à transférer.
    --> ne faire cette manipulation qu'une VM par une VM...

    Et voilà, le Replica est fonctionnel.

    Merci Hugo pour ton aide.

    NB : rs.slaveOk(true) est à faire sur chaque VM du replica, comme ça si le master passe slave, alors, aucun soucis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  2. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15
  3. mise en place serveur web intranet
    Par gui4593 dans le forum Installation
    Réponses: 7
    Dernier message: 01/01/2004, 18h18
  4. Mise en place d'index....??
    Par liv dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/12/2003, 11h04

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