webinaire 6 de la série « retour aux fondamentaux » : déploiement en production

43
MongoDB Europe 2016 Old Billingsgate, London 15 Novembre mongodb.com/europe 20% de discount avec le code RF20

Upload: mongodb

Post on 20-Jan-2017

175 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

MongoDB Europe 2016Old Billingsgate, London

15 Novembre

mongodb.com/europe

20% de discount avec le code RF20

Page 2: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Back to Basics 2016 : Webinar 6

Déploiement en productionRémi Forest

Senior Solution Architect

Page 3: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 4: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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é

Page 5: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Monitoring

Page 6: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Outils

• Command line:– mongostat– mongo shell– logs

• Outils tiers:– Nombreux plug-ins pour mongoDB

• MongoDB Cloud / Ops Manager

Page 7: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 8: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

8

Mongo shell

• Différentes commandes pour avoir des informations sur l’état de la base.– db.serverStatus()– db.stats()– db.hostInfo()– rs.status()

Page 9: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 10: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 11: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Architecture de Cloud/Ops Manager

Page 12: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Métriques et reporting

Page 13: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Visual Query Profiler

Page 14: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Intégration avec des outils tiers

Page 15: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Performances

Page 16: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Scalabilité Verticale (Scale Up)

Page 17: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Scalabilité horizontale (Scale Out)

Page 18: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 19: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Exemple de limitation due à la RAM

Page 20: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 21: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 22: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 23: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Sharded infrastructure

Page 24: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Disponibilité

Page 25: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

25

Disponibilité – Replica Sets

Node 1

Node 2 Node 3

Page 26: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

26

Replica Set Initialisation

Node 1

Node 2 Node 3

Node 1(Primary)

Node 2(Secondary)

Node 3(Secondary)

Replication Replication

Heartbeat

Page 27: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

27

Node 2(Secondary)

Node 3(Secondary)

Heartbeat

Primary Election

Node 1(Primary)

Replica Set - Failure

Page 28: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

28

Node 1(Primary)

Node 2(Primary)

Node 3(Secondary)

Heartbeat

Replication

Replica Set - Failover

Page 29: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

29

Node 2(Primary)

Node 3(Secondary)

Heartbeat

Replication

Node 1(Recovery)

Replication

Replica Set - Recovery

Page 30: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

30

Node 2(Primary)

Node 3(Secondary)

Heartbeat

Replication

Node 1(Secondary)

Replication

Replica Set - Recovered

Page 31: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Sauvegardes

Page 32: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

32

Outils et techniques

• Copie des fichiers

• Files system snapshot

• mongodump & mongorestore

• Ops / Cloud Manager

Page 33: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 34: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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 !

Page 35: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

35

Backup avec Ops / Cloud Manager

Replica Set Ops / Cloud Manager

HiddenReplica

BlockStore

Continuous backup Snapshots

Page 36: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 37: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Sécurité

Page 38: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 39: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Options de déploiement

Page 40: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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

Page 41: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

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.

Page 42: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production

Questions?

Page 43: Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production