Télécharger

Transcription

Télécharger
TP MongoDB
MongoDB est l’une des base de données composant le mouvement NoSQL (Not Only SQL).
L’intérêt de ce genre de bases de données se ressent dans la manipulation de très grosses
bases de données où le temps de réponse compte plus que l’intégrité des données.
MongoDB est une base documentaire dans laquelle les documents sont regroupés sous
forme de collections, les collections étant l’équivalent des tables du SQL. Chaque document
dispose d’une clé unique permettant de l’identifier dans la collection.
Importation de données dans une base
Installation de Mongodb :
Importation de données dans une base avec un fichier "csv" :
-d : définit le nom de la base où l'on souhaite importer les données
-c : définit le nom de la collection que l'on souhaite remplir
--type : définit le type de fichier importé
--file : définit le chemin où se situe le fichier de données
--headerline : pour utiliser la première ligne comme un nom de champs et non comme un
document distinct (concerne les fichiers de type "csv" et "tsv")
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 1
Ouverture du shell Mongodb :
La base de données "test" a bien été crée et n'est pas vide.
Connexion à la base de données "test" :
La collection "weather" a également bien été crée.
Vérifions que notre collection "weather" s'est remplie correctement :
Réplication de données
Afin d’assurer la redondance et la haute disponibilité, MongoDB possède une fonctionnalité
appelée "replica set" qui assure le basculement automatique et invisible des applications
clientes en cas de panne matérielle ou logicielle.
Le concept est de créer un groupe de serveur (set) qui possédera un nœud principal (master)
et n serveurs de backup (slaves). Si le nœud principal tombe, un autre nœud prendra le relai
automatiquement.
Le changement de master se fait via un système d'élection, ou chaque nœud actif du set
vote pour élire un nouveau master. Un nœud "arbitre", qui appartient au set mais ne reçoit
ou n'envoie aucune données peut être ajouté.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 2
L'ajout de cet arbitre est obligatoire dans le cas où le set ne comporte que 2 nœuds. En
effet, si le master tombe, il ne reste plus qu'un nœud qui votera pour lui même, il aura donc
1 voix sur 2, ce qui est insuffisant pour qu'il soit élu.
Un seul serveur est "master" et peut recevoir des lectures et des écritures, les autres sont
"slaves" et ne peuvent recevoir que des lectures.
Pour que le replica set fonctionne il faut donc au moins trois machines. Les données peuvent
être conservées uniquement sur la machine que nous allons configurer, les autres machines
doivent être vierges.
Dans le fichier de configuration /etc/mongodb.conf des trois machines, il faut ajouter ceci :
replSet = lannion
A chaque fois, on redémarre Mongodb :
/etc/init.d/mongodb restart
Ensuite, on se positionne sur la machine master et on se connecte à Mongodb.
On va configurer le replica set en indiquant le nom défini dans le fichier de configuration
auparavant et pour chaque machine, on renseigne leur adresse IP ainsi que le numéro du
port. L'élection sera automatique (ici le destin est forcé via arbiterOnly).
cfg = {
_id : "lannion",
members : [
{_id: 0, host : "192.168.0.22:27017"},
{_id: 1, host : "192.168.0.23:27018"},
{_id: 2, host : "192.168.0.21:27019", arbiterOnly : true }
]}
Maintenant, on initialise la configuration :
rs.initiate(cfg)
Après quelques secondes, on peut observer que l’invité a changé :
C’est bon la réplication est active, les données en insertions seront automatiquement
répliquées sur les autres instances. Cependant, le failover n’est pas encore en place,
l'application ne peut donc pas basculer seule d’une instance vers une autre.
Nous allons donc utiliser le sharding pour y parvenir de manière transparente.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 3
Partitionnement de données (sharding)
Les mécanismes de réplication sont intéressants dans la mesure où ils permettent de faire
évoluer les performances en lecture sur la base de données. Cependant avec ce système
l’écriture de données repose sur un seul serveur. Pour pallier à ce problème, il est nécessaire
d’utiliser la notion de sharding.
Concrètement, il nous faudra simplement arrêter nos trois instances et leur rajouter le
paramètre suivant permettant d’activer le sharding :
--shardsvr
Ensuite, on lance nos serveurs de configuration :
# mongod --port 27020 --configsvr --dbpath /data/configdb0
# mongod --port 27021 --configsvr --dbpath /data/configdb1
# mongod --port 27022 --configsvr --dbpath /data/configdb2
C’est ce serveur qui va stocker les informations utiles au bon fonctionnement du sharding.
On lance ensuite le routeur :
# mongos --port 27023 --configdb localhost:27020,localhost:27021,localhost:27022
Puis on se connecte sur le routeur :
$ mongo --port 27023
Enfin, on ajoute les nœud au shard :
> use test
> db.runCommand({addshard : "lannion/localhost:27017,localhost:27018,localhost:27019"})
Si l'ajout s'est effectué correctement, on obtient ce message :
{ "shardAdded" : "lannion", "ok" : 1 }
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 4
Par défaut, le sharding n’est pas activé. On peut l’activer au niveau d’une base de donnée ou
bien au niveau d’une collection. Ici nous activons le sharding sur toute la base de données.
> db.runCommand({enablesharding: "test"})
Puis nous définissons la clef à utiliser pour le sharding :
> db.runCommand({shardcollection: "test.weather", key:{"_id":1}})
Conclusion
La mise en place du sharding et de la réplication permet de rapidement mettre en place une
infrastructure fiable. Pour augmenter la capacité de montée en charge il suffira d’ajouter
des replica set au shard. MongoDB s’occupera automatiquement de répartir le stockage des
données et l’exécution des différentes requêtes. Pour augmenter la fiabilité, on pourra
également augmenter le nombre de noeud dans chaque replica set.
WILLM Geoffrey & EMERY Olivier
LP aGSRi
Page 5