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

Post on 20-Jan-2017

175 Views

Category:

Data & Analytics

0 Downloads

Preview:

Click to see full reader

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?

top related