webinaire 6 de la série « retour aux fondamentaux » : déploiement en production
TRANSCRIPT
MongoDB Europe 2016Old Billingsgate, London
15 Novembre
mongodb.com/europe
20% de discount avec le code RF20
Back to Basics 2016 : Webinar 6
Déploiement en productionRémi Forest
Senior Solution Architect
3
Rappel des épisodes précédents
• Webinar 1 – Introduction à NoSQL– Les différents types de bases NoSQL– MongoDB comme base orientée Documents
• Webinar 2 – Votre première application MongoDB– Création de database et de collections– CRUD, indexes et explain
• Webinar 3 – Schema Design– Modélisation de données avec MongoDB
• Webinar 4 – GeoSpatial and Text Indexes• Webinar 5 – Introduction à l’Aggregation Framework
4
Déploiement en production
• Prendre un projet en phase de développement et le mettre à disposition des utilisateurs finaux
• Du point de vue de la base de données, il faut garantir :– Le monitoring– Les performances– La disponibilité de l’application– Sauvegardes et disaster recovery– La sécurité
Monitoring
Outils
• Command line:– mongostat– mongo shell– logs
• Outils tiers:– Nombreux plug-ins pour mongoDB
• MongoDB Cloud / Ops Manager
7
Mongostat
• Accès aux statistiques principales : CRUD / Mémoire / Réseau• Se connecte à mongod ou mongos (sharded cluster)• Une mesure par seconde
>mongostat -h localhost --port 27017connected to: localhost:27017insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:24 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:25 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:26 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:27 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:28 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:29 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:30 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:31 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.1% 0 0|0 0|0 62b 5k 2 09:08:32 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:33
8
Mongo shell
• Différentes commandes pour avoir des informations sur l’état de la base.– db.serverStatus()– db.stats()– db.hostInfo()– rs.status()
9
Logs
• Niveau de logging ajustable> db.adminCommand( { setParameter:1, logLevel:1 } ){ "was" : 0, "ok" : 1 }
• Informations sur :– Performances– Efficacité des indexes– Opérations en cours
2016-08-31T13:55:02.047+0100 [conn7] update cms.articles query: { _id: ObjectId('532198379fb5ba99a6bd4063') } update: { $inc: { comment_count: 1 }, $push: { comments: { $each: [ { date: new Date(1399035302013), text: "Data locality provides an amazing performance boost over relational" } ], $slice: -10, $sort: { date: 1 } } } } nscanned:1 nscannedObjects:1 nmoved:1 nMatched:1 nModified:1 keyUpdates:0 numYields:0 locks(micros) w:33529 33ms
10
MongoDB Ops / Cloud Manager
– Déploiements en un clic, upgrades, tâches d’administration … jusqu’à 90% de gain de temps vs. des opérations manuelles
– Monitoring avec alerting, charts et tableaux de bord pour plus de 100 métriques.
– Gestion des sauvegardes / restaurations avec “point-in-time recovery” et support des clusters shardés
Architecture de Cloud/Ops Manager
Métriques et reporting
Visual Query Profiler
Intégration avec des outils tiers
Performances
Scalabilité Verticale (Scale Up)
Scalabilité horizontale (Scale Out)
18
Quand faut-il considérer le sharding ?
• Dès qu’une ressource constitue un goulet d’étranglement sur une machine ou un replica set:
• RAM• Disk IO• Storage• Concurrence
Exemple de limitation due à la RAM
20
Partitionnement des données
• Définition d’une clé de sharding• La clé de sharding permet de partitionner l’espace des données présentes• La clé de sharding doit exister dans tous les documents
21
Distribution des données• 1 seul chuck à l’origine• Taille max par défaut : 64MB• Dès qu’un chunk dépasse 64MB, MongoDB split et migre les chunks
automatiquement
22
Qu’est-ce qu’un shard ?
• Un shard est un élément d’un cluster qui contient une partie des données de la base• Un shard peut être un serveur stand-alone ou un replica set
Sharded infrastructure
Disponibilité
25
Disponibilité – Replica Sets
Node 1
Node 2 Node 3
26
Replica Set Initialisation
Node 1
Node 2 Node 3
Node 1(Primary)
Node 2(Secondary)
Node 3(Secondary)
Replication Replication
Heartbeat
27
Node 2(Secondary)
Node 3(Secondary)
Heartbeat
Primary Election
Node 1(Primary)
Replica Set - Failure
28
Node 1(Primary)
Node 2(Primary)
Node 3(Secondary)
Heartbeat
Replication
Replica Set - Failover
29
Node 2(Primary)
Node 3(Secondary)
Heartbeat
Replication
Node 1(Recovery)
Replication
Replica Set - Recovery
30
Node 2(Primary)
Node 3(Secondary)
Heartbeat
Replication
Node 1(Secondary)
Replication
Replica Set - Recovered
Sauvegardes
32
Outils et techniques
• Copie des fichiers
• Files system snapshot
• mongodump & mongorestore
• Ops / Cloud Manager
33
Sauvegarde niveau fichier
• Copie de fichier (lent) ou file system snapshot (plus rapide)• Attention à la cohérence des données !• Sauvegarde “offline” uniquement :
– Arrêt des services– db.fsyncLock() / db.fsyncUnlock() pour figer le disque (attention aux effets
de bord)– Backup d’un serveur secondaire (recommandé)
• Gestion complexe pour les environnements shardés
34
mongodump / mongorestore
• Création d’un fichier .bson• Stockage sur disque ou sur le réseau• Utilisation de --oplog pour une sauvegarde à chaud• Dump depuis un serveur secondaire recommandé• Attention à la cohérence des shards pour les clusters !
35
Backup avec Ops / Cloud Manager
Replica Set Ops / Cloud Manager
HiddenReplica
BlockStore
Continuous backup Snapshots
36
Recovery
• Restauration depuis une sauvegarde– Snapshot / mongodump / Cloud Manager– Redémarrage du noeud
• Resynchronisation à partir d’un autre noeud– Copie des fichiers– Synchronisation via réseau
Sécurité
38
Data Security
• Utilisez systématiquement SSL pour toutes les connexions• Créez des users, passwords et access roles pour toutes les databases• Utilisez le chiffrement si vos bases contiennent des données sensibles• Utilisez les fonctions d’audit si vous avez besoin d’assurer une traçabilité• Ne rendez pas vos bases accessibles depuis n’importe où !
MIIEowIBAAKCAQEAzfaU58nhc1moUquCDTbXbwkXKmc3LIBGqd4FmCeV4cM+GIh1RVtKGan4d+XTGa6OkyFZn9wW/cug831AokFBn3CJYzrkGHR8dDvGN/G0jIS8ftnVl/r69weYphF/nd9Nu6J0cwznr1XY0sv+3vlfnNXTRtEiIYyI20fsWrvjDO/IDksE14XCHQxQC6cSJ4YuoD+X+5FncmZnEPIMBLoZW1SeTTYp+VSKkB7MnBQH+Bi711G5FuW7OekskUI/96TMr8GYA9gavBlgUmSHmADrTayXEe6KtgIfN5byP3QJH8Cmi6VsLzmdTG8SPYu5N+0lzdDkisDdmCUTBgXkedaa6QIDAQABAoIBAGImUtmOdBijLjqPLr+bVdi9DUQQwdM8IfCLNEFJA/z9LNdGGBSAJ3TJcfW5GPtRGvJ0XyB2IqK5ai7+jlGEJYCUgXQ/OTmKMVC2t4Qrc+3Ox4Dv0ADIAta70Pu6tQUHyCRVi4bULIh6sYPq4L9jOTQlFbTWrpwsO3+7659lkBK2SfUFh4p5h1zUujtjAF4qAH8CqerMNiMl0ZAmkmQPPRqiLVstGVG4RPJnaNug2EUlQYgZBH3+QFchLLIKZimY8EnRE0rSptUirzZej1BLgaPolt6kqajWm5GMxBbQwnEkk/dc5BMyD0wJsZTgezF+tJwQwWHqxKqYRQPaF0FOtgECgYEA+yxgSmDSqws6X4SnqwLFOWu+7dwJCGF0mrTXI8HHNA0DmVymMJJQE3QGTSa0zHVsQ+cJ5ZM1Jrc+5lJMT1j2mfSObJFSHnBglXllb1utUsxv225UgK1q5mFylxXIVy1ZBs4qE9CaPnrJtSME7LmoV/sGnu1/aYXXaq1J2XXpFEECgYEA0evMaUwO7BkbQLvf3wG3
r1XY0sv+3vlfnNXTRtEiIYyI20fsWrvjDO/IDksE14XCHQxQC6cSJ4YuoD+X+5FncmZnEPIMBLoZW1SeTTYp+VSKkB7MnBQH+Bi711G5FuW7OekskUI/96TMr8GYA9gavBlgUmSHmADrTayXEe6KtgIfN5byP3QJH8Cmi6VsLzmdTG8SPYu5N+0lzdDkisDdmCUTBgXkedaa6QIDAQABAoIBAGImUtmOdBijLjqPLr+bVdi9DUQQwdM8IfCLNEFJA/z9LNdGGBSAJ3TJcfW5GPtRGvJ0XyB2IqK5ai7+jlGEJYCUgXQ/OTmKMVC2t4Qrc+3Ox4Dv0ADIAta70Pu6tQUHyCRVi4bULIh6sYPq4L9jOTQlFbTWrpwsO3+7659lkBK2SfUFh4p5h1zUujtjAF4qAH8CqerMNiMl0ZAmkmQPPRqiLVstGVG4RPJnaNug2EUlQYgZBH3+QFchLLIKZimY8EnRE0rSptUirzZej1BLgaPolt6kqajWm5GMxBbQwnEkk/dc5BMyD0wJsZTgezF+tJwQwWHqxKqYRQPaF0FOtgECgYEA+yxgSmDSqws6X4SnqwLFOWu+7dwJCGF0mrTXI8HHNA0DmVymMJJQE3QGTSa0zHVsQ+cJ5ZM1Jrc+5lJMT1j2mfSObJFSHnBglXllb1utUsxv225UgK1q5mFyMIIEowIBAAKCAQEAzfaU58nhc1moUquCDTbXbwkXKmc3LIBGqd4FmCeV4cM+GIh1RVtKGan4d+XTGa6OkyFZn9wW/cug831AokFBn3CJYzrkGHR8dDvGN/G0jIS8ftnVl/r69weYphF/nd9Nu6J0cwzn
Options de déploiement
40
Les différentes options de déploiement en production
• La plus simple – hardware et management assurés par MongoDB– MongoDB Atlas
• Un peu moins simple – infrastructure de management gérée par MongoDB, vous fournissez les serveurs (potentiellement dans le cloud)– MongoDB Cloud Manager
• Un peu plus compliqué – vous gérez tout, mais avec de bons outils– MongoDB Ops Manager
• Le plus compliqué – faire tout, tout seul, à la main– https://docs.mongodb.com
41
En résumé
• Dimensionnez votre infrastructure en fonction de votre working set• Privilégiez l’utilisation de replica sets• Shardez uniquement quand vous en avez besoin, pas avant !• Attention au choix de la clé de sharding• Choisissez une solution de sauvegarde adaptée à votre besoin• Soyez attentifs à la sécurité !
• En plus :– Utilisez toujours les dernières releases de MongoDB– Consultez-nous avant de passer en production ! La majorité des
problèmes sont liés à un manque d’expérience.
Questions?