{"id":67254,"date":"2023-04-04T07:55:24","date_gmt":"2023-04-04T06:55:24","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=67254&#038;preview=true&#038;preview_id=67254"},"modified":"2023-08-24T14:33:25","modified_gmt":"2023-08-24T13:33:25","slug":"ensemble-repliques-mongodb","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/","title":{"rendered":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)"},"content":{"rendered":"<p>MongoDB est une base de donn\u00e9es <a href=\"https:\/\/kinsta.com\/fr\/blog\/mongodb-vs-mysql\/\">NoSQL<\/a> qui utilise des documents de type JSON avec des sch\u00e9mas dynamiques. Lorsque vous travaillez avec des bases de donn\u00e9es, il est toujours bon d&rsquo;avoir un plan d&rsquo;urgence au cas o\u00f9 l&rsquo;un de vos serveurs de base de donn\u00e9es tomberait en panne. En outre, vous pouvez r\u00e9duire les risques de d\u00e9faillance en utilisant un <a href=\"https:\/\/kinsta.com\/fr\/mykinsta\/\">outil de gestion astucieux<\/a> pour votre site WordPress.<\/p>\n<p>C&rsquo;est pourquoi il est utile d&rsquo;avoir plusieurs copies de vos donn\u00e9es. Cela permet \u00e9galement de r\u00e9duire les temps de latence en lecture. En m\u00eame temps, cela peut am\u00e9liorer l&rsquo;\u00e9volutivit\u00e9 et la disponibilit\u00e9 de la base de donn\u00e9es. C&rsquo;est l\u00e0 qu&rsquo;intervient la r\u00e9plication. Elle est d\u00e9finie comme la pratique consistant \u00e0 <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-sauvegarder-base-de-donnees-mysql-avec-phpmyadmin\/\">synchroniser<\/a> les donn\u00e9es entre plusieurs <a href=\"https:\/\/kinsta.com\/fr\/blog\/base-de-donnees-open-source\/\">bases de donn\u00e9es<\/a>.<\/p>\n<p>Dans cet article, nous allons nous plonger dans les diff\u00e9rents aspects saillants de la r\u00e9plication de MongoDB, comme ses caract\u00e9ristiques et son m\u00e9canisme, pour n&rsquo;en citer que quelques-uns.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Qu&rsquo;est-ce que la r\u00e9plication dans MongoDB ?<\/h2>\n<p>Dans MongoDB, les ensembles de r\u00e9pliques effectuent la r\u00e9plication. Il s&rsquo;agit d&rsquo;un groupe de serveurs qui conservent le m\u00eame ensemble de donn\u00e9es par le biais de la r\u00e9plication. Vous pouvez m\u00eame utiliser la r\u00e9plication MongoDB dans le cadre de l&rsquo;\u00e9quilibrage de la charge. Dans ce cas, vous pouvez r\u00e9partir les op\u00e9rations d&rsquo;\u00e9criture et de lecture sur toutes les instances, en fonction du cas d&rsquo;utilisation.<\/p>\n\n<h2>Qu&rsquo;est-ce qu&rsquo;un ensemble de r\u00e9pliques MongoDB ?<\/h2>\n<p>Chaque instance de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\">MongoDB<\/a> qui fait partie d&rsquo;un ensemble de r\u00e9pliques donn\u00e9 est un membre. Chaque ensemble de r\u00e9pliques doit avoir un membre principal et au moins un membre secondaire.<\/p>\n<p>Le membre principal est le premier point d&rsquo;acc\u00e8s aux transactions avec l&rsquo;ensemble de r\u00e9pliques. C&rsquo;est \u00e9galement le seul membre qui peut accepter des op\u00e9rations d&rsquo;\u00e9criture. La r\u00e9plication commence par copier l&rsquo;oplog (journal des op\u00e9rations) du membre principal. Ensuite, elle r\u00e9p\u00e8te les modifications enregistr\u00e9es sur les ensembles de donn\u00e9es respectifs des membres secondaires. Ainsi, chaque ensemble de r\u00e9pliques ne peut avoir qu&rsquo;un seul membre primaire \u00e0 la fois. Plusieurs membres primaires recevant des op\u00e9rations d&rsquo;\u00e9criture peuvent provoquer des conflits de donn\u00e9es.<\/p>\n<p>En g\u00e9n\u00e9ral, les applications n&rsquo;interrogent que le membre primaire pour les op\u00e9rations d&rsquo;\u00e9criture et de lecture. Vous pouvez concevoir votre configuration pour lire \u00e0 partir d&rsquo;un ou de plusieurs membres secondaires. Le transfert asynchrone de donn\u00e9es peut faire en sorte que les lectures des n\u0153uds secondaires servent de vieilles donn\u00e9es. Une telle configuration n&rsquo;est donc pas id\u00e9ale pour tous les cas d&rsquo;utilisation.<\/p>\n<h3>Fonctionnalit\u00e9s de l&rsquo;ensemble de r\u00e9pliques<\/h3>\n<p>Le m\u00e9canisme de basculement automatique diff\u00e9rencie les ensembles de r\u00e9pliques de MongoDB de leurs concurrents. En l&rsquo;absence d&rsquo;un n\u0153ud primaire, une \u00e9lection automatis\u00e9e parmi les n\u0153uds secondaires d\u00e9signe un nouveau n\u0153ud primaire.<\/p>\n<h3>Ensemble de r\u00e9pliques MongoDB vs Cluster MongoDB<\/h3>\n<p>Un ensemble de r\u00e9pliques MongoDB cr\u00e9e plusieurs copies du m\u00eame ensemble de donn\u00e9es sur les n\u0153uds de l&rsquo;ensemble de r\u00e9pliques. L&rsquo;objectif principal d&rsquo;un ensemble de r\u00e9pliques est :<\/p>\n<ul>\n<li>D&rsquo;offrir une solution de sauvegarde int\u00e9gr\u00e9e<\/li>\n<li>D&rsquo;augmenter la disponibilit\u00e9 des donn\u00e9es<\/li>\n<\/ul>\n<p>Un cluster MongoDB est une toute autre affaire. Il r\u00e9partit les donn\u00e9es sur plusieurs n\u0153uds au moyen d&rsquo;une cl\u00e9 de partage (shard key). Ce processus fragmente les donn\u00e9es en plusieurs morceaux appel\u00e9s \u00ab shards \u00bb. Ensuite, chaque morceau est copi\u00e9 sur un n\u0153ud diff\u00e9rent. Un cluster vise \u00e0 prendre en charge des ensembles de donn\u00e9es volumineux et des op\u00e9rations \u00e0 haut d\u00e9bit. Il y parvient en \u00e9chelonnant horizontalement la charge de travail.<\/p>\n<p>Voici la diff\u00e9rence entre un ensemble de r\u00e9pliques et un cluster, en termes simples :<\/p>\n<ul>\n<li>Un cluster distribue la charge de travail. Il stocke \u00e9galement des fragments de donn\u00e9es (shards) sur de nombreux serveurs.<\/li>\n<li>Un ensemble de r\u00e9pliques duplique compl\u00e8tement l&rsquo;ensemble de donn\u00e9es.<\/li>\n<\/ul>\n<p>MongoDB vous permet de combiner ces fonctionnalit\u00e9s en cr\u00e9ant une cluster de donn\u00e9es (sharded cluster). Dans ce cas, vous pouvez r\u00e9pliquer chaque shard sur un serveur secondaire. Cela permet \u00e0 un shard d&rsquo;offrir une redondance et une disponibilit\u00e9 des donn\u00e9es \u00e9lev\u00e9es.<\/p>\n<p>La maintenance et la configuration d&rsquo;un ensemble de r\u00e9pliques peuvent \u00eatre techniquement difficiles et prendre beaucoup de temps. Et trouver le bon service d&rsquo;h\u00e9bergement ? C&rsquo;est un tout autre casse-t\u00eate. Avec la multitude d&rsquo;options disponibles, il est facile de perdre des heures \u00e0 faire des recherches au lieu de d\u00e9velopper votre entreprise.<\/p>\n<p>Permettez-moi de vous pr\u00e9senter bri\u00e8vement un outil qui fait tout cela et bien plus encore, afin que vous puissiez vous consacrer pleinement \u00e0 votre service\/produit.<\/p>\n<p>La solution d&rsquo;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">h\u00e9bergement d&rsquo;applications<\/a> de Kinsta, \u00e0 laquelle plus de 55.000 d\u00e9veloppeurs font confiance, vous permet d&rsquo;\u00eatre op\u00e9rationnel en seulement 3 \u00e9tapes simples. Si cela vous semble trop beau pour \u00eatre vrai, voici d&rsquo;autres avantages li\u00e9s \u00e0 l&rsquo;utilisation de Kinsta :<\/p>\n<ul>\n<li><strong>Profitez de meilleures performances gr\u00e2ce aux connexions internes de Kinsta <\/strong>: Oubliez vos difficult\u00e9s avec les bases de donn\u00e9es partag\u00e9es. Passez \u00e0 des bases de donn\u00e9es d\u00e9di\u00e9es avec des connexions internes qui n&rsquo;ont pas de limites de nombre de requ\u00eates ou de nombre de lignes. Kinsta est plus rapide, plus s\u00fbr et ne vous facturera pas la bande passante\/le trafic interne.<\/li>\n<li><strong>Un ensemble de fonctionnalit\u00e9s con\u00e7u pour les d\u00e9veloppeurs <\/strong>: Faites \u00e9voluer votre application sur la plateforme robuste qui prend en charge Gmail, YouTube et Google Search. Soyez assur\u00e9 que vous \u00eates entre de bonnes mains.<\/li>\n<li><strong>Profitez de vitesses in\u00e9gal\u00e9es avec le centre de donn\u00e9es de votre choix <\/strong>: Choisissez la r\u00e9gion qui vous convient le mieux, \u00e0 vous et \u00e0 vos clients. Avec plus de 25 centres de donn\u00e9es au choix, les 300 PoP de Kinsta\u00a0 garantissent une vitesse maximale et une pr\u00e9sence mondiale pour votre site web.<\/li>\n<\/ul>\n<p>Essayez <a href=\"https:\/\/kinsta.com\/fr\/inscription\/?product_type=app-db\">gratuitement la solution d&rsquo;h\u00e9bergement d&rsquo;applications de Kinsta d\u00e8s aujourd&rsquo;hui<\/a> !<\/p>\n<h2>Comment fonctionne la r\u00e9plication dans MongoDB ?<\/h2>\n<p>Dans MongoDB, vous envoyez des op\u00e9rations d&rsquo;\u00e9criture au serveur primaire (n\u0153ud). Le serveur primaire attribue les op\u00e9rations aux serveurs secondaires, r\u00e9pliquant ainsi les donn\u00e9es.<\/p>\n<figure id=\"attachment_148331\" aria-describedby=\"caption-attachment-148331\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148331 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\" alt=\"Illustration du processus de r\u00e9plication de MongoDB\" width=\"1024\" height=\"763\"><\/a><figcaption id=\"caption-attachment-148331\" class=\"wp-caption-text\">Illustration du processus de r\u00e9plication de MongoDB (Image Source : <a href=\"https:\/\/www.mongodb.com\/basics\/replication\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB<\/a>)<\/figcaption><\/figure>\n<h3>Trois types de n\u0153uds MongoDB<\/h3>\n<p>Parmi les trois types de n\u0153uds MongoDB, deux ont d\u00e9j\u00e0 \u00e9t\u00e9 \u00e9voqu\u00e9s : les n\u0153uds primaires et les n\u0153uds secondaires. Le troisi\u00e8me type de n\u0153ud MongoDB qui s&rsquo;av\u00e8re utile lors de la r\u00e9plication est un arbitre. Le n\u0153ud arbitre n&rsquo;a pas de copie de l&rsquo;ensemble de donn\u00e9es et ne peut pas devenir un n\u0153ud primaire. Cela dit, l&rsquo;arbitre participe aux \u00e9lections du n\u0153ud primaire.<\/p>\n<p>Nous avons d\u00e9j\u00e0 mentionn\u00e9 ce qui se passe lorsque le n\u0153ud primaire tombe en panne, mais que se passe-t-il si les n\u0153uds secondaires ont mordu la poussi\u00e8re ? Dans ce cas, le n\u0153ud primaire devient secondaire et la base de donn\u00e9es devient inaccessible.<\/p>\n<h3>\u00c9lection des membres<\/h3>\n<p>Les \u00e9lections peuvent avoir lieu dans les sc\u00e9narios suivants :<\/p>\n<ul>\n<li>Initialisation d&rsquo;un ensemble de r\u00e9pliques<\/li>\n<li>Perte de connectivit\u00e9 avec le n\u0153ud primaire (qui peut \u00eatre d\u00e9tect\u00e9e par des battements de c\u0153ur)<\/li>\n<li>Maintenance d&rsquo;un ensemble de r\u00e9pliques \u00e0 l&rsquo;aide des m\u00e9thodes <code>rs.reconfig<\/code> ou <code>stepDown<\/code><\/li>\n<li>Ajout d&rsquo;un nouveau n\u0153ud \u00e0 un ensemble de r\u00e9pliques existant<\/li>\n<\/ul>\n<p>Un ensemble de r\u00e9pliques peut poss\u00e9der jusqu&rsquo;\u00e0 50 membres, mais seuls 7 ou moins peuvent voter lors d&rsquo;une \u00e9lection.<\/p>\n<p>Le temps moyen avant qu&rsquo;un cluster n&rsquo;\u00e9lise un nouveau primaire ne doit pas d\u00e9passer 12 secondes. L&rsquo;algorithme d&rsquo;\u00e9lection essaiera d&rsquo;avoir le secondaire avec la plus haute priorit\u00e9 disponible. En m\u00eame temps, les membres ayant une valeur de priorit\u00e9 de 0 ne peuvent pas devenir primaires et ne participent pas \u00e0 l&rsquo;\u00e9lection.<\/p>\n<figure id=\"attachment_148334\" aria-describedby=\"caption-attachment-148334\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148334 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\" alt=\"N\u0153ud secondaire devenant primaire\" width=\"900\" height=\"509\"><\/a><figcaption id=\"caption-attachment-148334\" class=\"wp-caption-text\">N\u0153ud secondaire devenant primaire (Image Source : <a href=\"https:\/\/medium.com\/condorlabs-engineering\/mongodb-replication-what-you-need-to-know-42a62a98b320\" target=\"_blank\" rel=\"noopener noreferrer\">Medium<\/a>)<\/figcaption><\/figure>\n<h3>Pr\u00e9occupation d&rsquo;\u00e9criture<\/h3>\n<p>En ce qui concerne la durabilit\u00e9, les op\u00e9rations d&rsquo;\u00e9criture disposent d&rsquo;un framework pour copier les donn\u00e9es dans un nombre sp\u00e9cifi\u00e9 de n\u0153uds. Vous pouvez m\u00eame offrir un retour d&rsquo;information au client. Ce framework est \u00e9galement connu sous le nom de \u00ab pr\u00e9occupation d&rsquo;\u00e9criture \u00bb Il comporte des membres porteurs de donn\u00e9es qui doivent accuser r\u00e9ception d&rsquo;un probl\u00e8me d&rsquo;\u00e9criture avant que l&rsquo;op\u00e9ration ne soit consid\u00e9r\u00e9e comme r\u00e9ussie. En g\u00e9n\u00e9ral, les ensembles de r\u00e9pliques ont une valeur de 1 comme pr\u00e9occupation d&rsquo;\u00e9criture. Par cons\u00e9quent, seul le primaire doit accuser r\u00e9ception de l&rsquo;\u00e9criture avant de renvoyer l&rsquo;accus\u00e9 de r\u00e9ception de la pr\u00e9occupation d&rsquo;\u00e9criture.<\/p>\n<p>Vous pouvez m\u00eame augmenter le nombre de membres n\u00e9cessaires pour acquitter l&rsquo;op\u00e9ration d&rsquo;\u00e9criture. Il n&rsquo;y a pas de limite au nombre de membres que vous pouvez avoir. Cependant, si ce nombre est \u00e9lev\u00e9, vous devrez faire face \u00e0 une latence importante. En effet, le client doit attendre l&rsquo;accus\u00e9 de r\u00e9ception de tous les membres. Vous pouvez \u00e9galement d\u00e9finir la pr\u00e9occupation d&rsquo;\u00e9criture de la \u00ab majorit\u00e9 \u00bb, qui calcule plus de la moiti\u00e9 des membres apr\u00e8s avoir re\u00e7u leur accus\u00e9 de r\u00e9ception.<\/p>\n<h3>Pr\u00e9f\u00e9rence de lecture<\/h3>\n<p>Pour les op\u00e9rations de lecture, vous pouvez mentionner la pr\u00e9f\u00e9rence de lecture qui d\u00e9crit comment la base de donn\u00e9es dirige la requ\u00eate vers les membres de l&rsquo;ensemble de r\u00e9pliques. En g\u00e9n\u00e9ral, le n\u0153ud principal re\u00e7oit l&rsquo;op\u00e9ration de lecture, mais le client peut indiquer une pr\u00e9f\u00e9rence de lecture pour envoyer les op\u00e9rations de lecture aux n\u0153uds secondaires. Voici les options possibles pour la pr\u00e9f\u00e9rence de lecture :<\/p>\n<ul>\n<li><strong>primaryPreferred <\/strong>: En g\u00e9n\u00e9ral, les op\u00e9rations de lecture proviennent du n\u0153ud principal, mais s&rsquo;il n&rsquo;est pas disponible, les donn\u00e9es sont extraites des n\u0153uds secondaires.<\/li>\n<li><strong>primary <\/strong>: Toutes les op\u00e9rations de lecture proviennent du n\u0153ud primaire.<\/li>\n<li><strong>secondary <\/strong>: Toutes les op\u00e9rations de lecture sont ex\u00e9cut\u00e9es par les n\u0153uds secondaires.<\/li>\n<li><strong>nearest <\/strong>: Ici, les demandes de lecture sont achemin\u00e9es vers le n\u0153ud accessible le plus proche, qui peut \u00eatre d\u00e9tect\u00e9 en ex\u00e9cutant la commande <code>ping<\/code>. Le r\u00e9sultat des op\u00e9rations de lecture peut provenir de n&rsquo;importe quel membre de l&rsquo;ensemble de r\u00e9pliques, qu&rsquo;il s&rsquo;agisse du n\u0153ud principal ou du n\u0153ud secondaire.<\/li>\n<li><strong>secondaryPreferred <\/strong>: Ici, la plupart des op\u00e9rations de lecture proviennent des n\u0153uds secondaires, mais si aucun d&rsquo;entre eux n&rsquo;est disponible, les donn\u00e9es sont extraites du n\u0153ud primaire.<\/li>\n<\/ul>\n<h3>Synchronisation des donn\u00e9es de l&rsquo;ensemble de r\u00e9plication<\/h3>\n<p>Pour maintenir des copies \u00e0 jour de l&rsquo;ensemble de donn\u00e9es partag\u00e9, les membres secondaires d&rsquo;un ensemble de r\u00e9pliques r\u00e9pliquent ou synchronisent les donn\u00e9es des autres membres.<\/p>\n<p>MongoDB exploite deux formes de synchronisation des donn\u00e9es. La synchronisation initiale pour alimenter les nouveaux membres avec l&rsquo;ensemble des donn\u00e9es. La r\u00e9plication pour ex\u00e9cuter les modifications en cours sur l&rsquo;ensemble des donn\u00e9es.<\/p>\n<h4>Synchronisation initiale<\/h4>\n<p>Lors de la synchronisation initiale, un n\u0153ud secondaire ex\u00e9cute la commande <code> init sync <\/code>\u00a0pour synchroniser toutes les donn\u00e9es du n\u0153ud principal avec un autre n\u0153ud secondaire contenant les donn\u00e9es les plus r\u00e9centes. Par cons\u00e9quent, le n\u0153ud secondaire utilise syst\u00e9matiquement la fonction <code> tailable cursor <\/code>\u00a0pour interroger les derni\u00e8res entr\u00e9es oplog dans la collection local.oplog.rs du n\u0153ud primaire et applique ces op\u00e9rations dans ces entr\u00e9es oplog.<\/p>\n<p>Depuis MongoDB 5.2, les synchronisations initiales peuvent \u00eatre bas\u00e9es sur la copie de fichiers ou logiques.<\/p>\n<h5>Synchronisation logique<\/h5>\n<p>Lorsque vous ex\u00e9cutez une synchronisation logique, MongoDB :<\/p>\n<ol>\n<li>D\u00e9veloppe tous les index de collection au fur et \u00e0 mesure que les documents sont copi\u00e9s pour chaque collection.<\/li>\n<li>Duplique toutes les bases de donn\u00e9es \u00e0 l&rsquo;exception de la base de donn\u00e9es locale. <code> mongod <\/code>\u00a0analyse chaque collection dans toutes les bases de donn\u00e9es sources et ins\u00e8re toutes les donn\u00e9es dans ses duplications de ces collections.<\/li>\n<li>Ex\u00e9cute toutes les modifications sur l&rsquo;ensemble des donn\u00e9es. En s&rsquo;appuyant sur l&rsquo;oplog de la source, <code> mongod <\/code>\u00a0met \u00e0 jour son ensemble de donn\u00e9es pour d\u00e9crire l&rsquo;\u00e9tat actuel de l&rsquo;ensemble de r\u00e9pliques.<\/li>\n<li>Extrait les enregistrements oplog nouvellement ajout\u00e9s pendant la copie des donn\u00e9es. Assurez-vous que le membre cible dispose de suffisamment d&rsquo;espace disque dans la base de donn\u00e9es locale pour stocker provisoirement ces enregistrements oplog pendant la dur\u00e9e de cette \u00e9tape de copie de donn\u00e9es.<\/li>\n<\/ol>\n<p>Lorsque la synchronisation initiale est termin\u00e9e, le membre passe de <code> STARTUP2 <\/code>\u00a0 \u00e0 <code> SECONDARY <\/code>.<\/p>\n<h5>Synchronisation initiale bas\u00e9e sur la copie de fichiers<\/h5>\n<p>D&#8217;embl\u00e9e, vous ne pouvez ex\u00e9cuter ce processus que si vous utilisez MongoDB Enterprise. Ce processus ex\u00e9cute la synchronisation initiale en dupliquant et en d\u00e9pla\u00e7ant les fichiers sur le syst\u00e8me de fichiers. Cette m\u00e9thode de synchronisation peut \u00eatre plus rapide que la synchronisation initiale logique dans certains cas. Gardez \u00e0 l&rsquo;esprit que la synchronisation initiale bas\u00e9e sur la copie de fichiers peut entra\u00eener des comptages inexacts si vous ex\u00e9cutez la m\u00e9thode count() sans pr\u00e9dicat de requ\u00eate.<\/p>\n<p>Mais cette m\u00e9thode a aussi ses limites :<\/p>\n<ul>\n<li>Lors d&rsquo;une synchronisation initiale bas\u00e9e sur une copie de fichier, vous ne pouvez pas \u00e9crire dans la base de donn\u00e9es locale du membre en cours de synchronisation. Vous ne pouvez pas non plus ex\u00e9cuter de sauvegarde sur le membre vers lequel la synchronisation est effectu\u00e9e ou sur le membre \u00e0 partir duquel la synchronisation est effectu\u00e9e.<\/li>\n<li>Lorsque vous utilisez le moteur de stockage crypt\u00e9, MongoDB utilise la cl\u00e9 source pour crypter la destination.<\/li>\n<li>Vous ne pouvez ex\u00e9cuter une synchronisation initiale qu&rsquo;\u00e0 partir d&rsquo;un seul membre \u00e0 la fois.<\/li>\n<\/ul>\n<h4>R\u00e9plication<\/h4>\n<p>Les membres secondaires r\u00e9pliquent les donn\u00e9es de mani\u00e8re coh\u00e9rente apr\u00e8s la synchronisation initiale. Les membres secondaires dupliquent l&rsquo;oplog de leur synchronisation \u00e0 partir de la source et ex\u00e9cutent ces op\u00e9rations dans le cadre d&rsquo;un processus asynchrone.<\/p>\n<p>Les membres secondaires sont capables de modifier automatiquement leur synchronisation \u00e0 partir de la source en fonction des changements dans le temps de ping et de l&rsquo;\u00e9tat de la r\u00e9plication des autres membres.<\/p>\n<h5>R\u00e9plication en continu<\/h5>\n<p>Depuis MongoDB 4.4, la synchronisation des sources envoie un flux continu d&rsquo;entr\u00e9es oplog \u00e0 leurs secondaires de synchronisation. La r\u00e9plication en continu r\u00e9duit le d\u00e9lai de r\u00e9plication dans les r\u00e9seaux \u00e0 forte charge et \u00e0 forte latence. Elle peut \u00e9galement :<\/p>\n<ul>\n<li>Diminuer le risque de perdre des op\u00e9rations d&rsquo;\u00e9criture avec <code>w:1<\/code> en raison d&rsquo;un basculement primaire.<\/li>\n<li>Diminuer la stagnation des lectures \u00e0 partir des serveurs secondaires.<\/li>\n<li>R\u00e9duire la latence des op\u00e9rations d&rsquo;\u00e9criture avec <code>w:\u201cmajority\u201d<\/code> et <code>w:&gt;1<\/code>. En bref, tout probl\u00e8me d&rsquo;\u00e9criture qui n\u00e9cessite une attente de r\u00e9plication.<\/li>\n<\/ul>\n<h5>R\u00e9plication multithread<\/h5>\n<p>MongoDB a l&rsquo;habitude d&rsquo;\u00e9crire des op\u00e9rations par lots \u00e0 travers plusieurs threads pour am\u00e9liorer la concurrence. MongoDB regroupe les lots par identifiant de document et applique chaque groupe d&rsquo;op\u00e9rations avec un thread diff\u00e9rent.<\/p>\n<p>MongoDB ex\u00e9cute toujours les op\u00e9rations d&rsquo;\u00e9criture sur un document donn\u00e9 dans son ordre d&rsquo;\u00e9criture original. Cela a chang\u00e9 dans MongoDB 4.0.<\/p>\n<p>\u00c0 partir de MongoDB 4.0, les op\u00e9rations de lecture qui ciblent les secondaires et sont configur\u00e9es avec un niveau de pr\u00e9occupation de lecture de <code>\u201cmajority\u201d<\/code> ou <code>\u201clocal\u201d<\/code> liront d\u00e9sormais \u00e0 partir d&rsquo;un instantan\u00e9 WiredTiger des donn\u00e9es si la lecture a lieu sur un secondaire o\u00f9 les lots de r\u00e9plication sont appliqu\u00e9s. La lecture \u00e0 partir d&rsquo;un instantan\u00e9 garantit une vue coh\u00e9rente des donn\u00e9es et permet \u00e0 la lecture de se produire simultan\u00e9ment avec la r\u00e9plication en cours sans avoir besoin d&rsquo;un verrou.<\/p>\n<p>Par cons\u00e9quent, les lectures secondaires n\u00e9cessitant ces niveaux de lecture n&rsquo;ont plus besoin d&rsquo;attendre que les lots de r\u00e9plication soient appliqu\u00e9s et peuvent \u00eatre trait\u00e9es au fur et \u00e0 mesure qu&rsquo;elles sont re\u00e7ues.<\/p>\n<h2>Comment cr\u00e9er un ensemble de r\u00e9pliques MongoDB ?<\/h2>\n<p>Comme nous l&rsquo;avons mentionn\u00e9 pr\u00e9c\u00e9demment, MongoDB g\u00e8re la r\u00e9plication par le biais d&rsquo;ensembles de r\u00e9pliques. Dans les prochaines sections, nous mettrons en \u00e9vidence quelques m\u00e9thodes que vous pouvez utiliser pour cr\u00e9er des ensembles de r\u00e9pliques pour votre cas d&rsquo;utilisation.<\/p>\n<h3>M\u00e9thode 1 : Cr\u00e9er un nouvel ensemble de r\u00e9pliques MongoDB sur Ubuntu<\/h3>\n<p>Avant de commencer, vous devez vous assurer que vous avez au moins trois serveurs fonctionnant sous Ubuntu 20.04, avec <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\">MongoDB<\/a> install\u00e9 sur chaque serveur.<\/p>\n<p>Pour configurer un ensemble de r\u00e9pliques, il est essentiel de fournir une adresse \u00e0 laquelle chaque membre de l&rsquo;ensemble de r\u00e9pliques peut \u00eatre joint par les autres membres de l&rsquo;ensemble. Dans ce cas, nous conservons trois membres dans l&rsquo;ensemble. Il est possible d&rsquo;utiliser des <a href=\"https:\/\/kinsta.com\/fr\/blog\/ip-statiques-ou-dynamiques\/\">adresses IP<\/a>, mais ce n&rsquo;est pas recommand\u00e9 car les adresses peuvent changer de mani\u00e8re inattendue. Une meilleure alternative consiste \u00e0 utiliser les noms d&rsquo;h\u00f4tes DNS logiques lors de la configuration des ensembles de r\u00e9pliques.<\/p>\n<p>Nous pouvons le faire en configurant le sous-domaine pour chaque membre de r\u00e9plication. Bien que cela puisse \u00eatre id\u00e9al pour un environnement de production, cette section explique comment configurer la r\u00e9solution <a href=\"https:\/\/kinsta.com\/fr\/blog\/que-sont-les-dns\/\">DNS<\/a> en \u00e9ditant les fichiers hosts respectifs de chaque serveur. Ce fichier nous permet d&rsquo;attribuer des noms d&rsquo;h\u00f4tes lisibles \u00e0 des adresses IP num\u00e9riques. Ainsi, si votre adresse IP change, il vous suffit de mettre \u00e0 jour les fichiers hosts sur les trois serveurs plut\u00f4t que de reconfigurer le jeu de r\u00e9pliques \u00e0 partir de z\u00e9ro !<\/p>\n<p>La plupart du temps, <code>hosts<\/code> est stock\u00e9 dans le r\u00e9pertoire <code>\/etc\/<\/code>. R\u00e9p\u00e9tez les commandes ci-dessous pour chacun de vos trois serveurs :<\/p>\n<pre><code class=\"language-markdown\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>Dans la commande ci-dessus, nous utilisons nano comme \u00e9diteur de texte, mais vous pouvez utiliser n&rsquo;importe quel \u00e9diteur de texte. Apr\u00e8s les premi\u00e8res lignes qui configurent l&rsquo;h\u00f4te local, ajoutez une entr\u00e9e pour chaque membre de l&rsquo;ensemble de r\u00e9pliques. Ces entr\u00e9es prennent la forme d&rsquo;une adresse IP suivie du nom lisible par l&rsquo;homme de votre choix. Vous pouvez leur donner le nom que vous souhaitez, mais veillez \u00e0 ce qu&rsquo;il soit descriptif afin de pouvoir diff\u00e9rencier chaque membre. Pour ce tutoriel, nous utiliserons les noms d&rsquo;h\u00f4tes ci-dessous :<\/p>\n<ul>\n<li>mongo0.replset.member<\/li>\n<li>mongo1.replset.member<\/li>\n<li>mongo2.replset.member<\/li>\n<\/ul>\n<p>En utilisant ces noms d&rsquo;h\u00f4tes, vos fichiers \/etc\/hosts ressembleraient aux lignes surlign\u00e9es suivantes :<\/p>\n<figure id=\"attachment_148336\" aria-describedby=\"caption-attachment-148336\" style=\"width: 1222px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148336 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\" alt=\"Noms d'h\u00f4tes\" width=\"1222\" height=\"339\"><\/a><figcaption id=\"caption-attachment-148336\" class=\"wp-caption-text\">Noms d&rsquo;h\u00f4tes<\/figcaption><\/figure>\n<p>Enregistrez et fermez le fichier.<\/p>\n<p>Apr\u00e8s avoir configur\u00e9 la r\u00e9solution DNS pour l&rsquo;ensemble de r\u00e9pliques, nous devons mettre \u00e0 jour les r\u00e8gles du pare-feu pour leur permettre de communiquer entre eux. Ex\u00e9cutez la commande <code>ufw<\/code> suivante sur mongo0 pour permettre \u00e0 mongo1 d&rsquo;acc\u00e9der au port 27017 de mongo0 :<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>\u00c0 la place du param\u00e8tre <code>mongo1_server_ip<\/code>, entrez l&rsquo;adresse IP r\u00e9elle de votre serveur mongo1. De plus, si vous avez mis \u00e0 jour l&rsquo;instance Mongo sur ce serveur pour utiliser un port autre que celui par d\u00e9faut, assurez-vous de modifier 27017 pour refl\u00e9ter le port utilis\u00e9 par votre instance MongoDB.<\/p>\n<p>Ajoutez maintenant une autre r\u00e8gle de pare-feu pour permettre \u00e0 Mongo2 d&rsquo;acc\u00e9der au m\u00eame port :<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>\u00c0 la place du param\u00e8tre <code>mongo2_server_ip<\/code>, saisissez l&rsquo;adresse IP r\u00e9elle de votre serveur mongo2. Mettez ensuite \u00e0 jour les r\u00e8gles de pare-feu pour vos deux autres serveurs. Ex\u00e9cutez les commandes suivantes sur le serveur mongo1, en veillant \u00e0 modifier les adresses IP \u00e0 la place du param\u00e8tre server_ip pour refl\u00e9ter celles de mongo0 et mongo2, respectivement :<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Enfin, ex\u00e9cutez ces deux commandes sur mongo2. Encore une fois, assurez-vous que vous saisissez les adresses IP correctes pour chaque serveur :<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>L&rsquo;\u00e9tape suivante consiste \u00e0 mettre \u00e0 jour le fichier de configuration de chaque instance de MongoDB afin d&rsquo;autoriser les connexions externes. Pour ce faire, vous devez modifier le fichier de configuration de chaque serveur afin de refl\u00e9ter l&rsquo;adresse IP et d&rsquo;indiquer l&rsquo;ensemble de r\u00e9pliques. Bien que vous puissiez utiliser l&rsquo;\u00e9diteur de texte de votre choix, nous utiliserons une fois de plus l&rsquo;\u00e9diteur de texte nano. Effectuons les modifications suivantes dans chaque fichier mongod.conf.<\/p>\n<p><strong>Sur mongo0 :<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo0.replset.member# replica set\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>Sur mongo1 :<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo1.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>Sur mongo2 :<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo2.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Si vous voulez changer la valeur de la directive de rs0, assurez-vous de remplacer le m\u00eame dans les commandes ci-dessus. Vous pouvez nommer la directive comme vous le souhaitez, mais veillez \u00e0 ce qu&rsquo;elle soit suffisamment descriptive. Une fois les mises \u00e0 jour termin\u00e9es, red\u00e9marrez le service mongod dans chaque instance pour recharger les configurations.<\/p>\n<\/aside>\n\n<pre><code class=\"language-markdown\">sudo systemctl restart mongod<\/code><\/pre>\n<p>Vous avez ainsi activ\u00e9 la r\u00e9plication pour l&rsquo;instance MongoDB de chaque serveur.<\/p>\n<p>Vous pouvez maintenant initialiser l&rsquo;ensemble de r\u00e9pliques en utilisant la m\u00e9thode <code>rs.initiate()<\/code>. Cette m\u00e9thode ne doit \u00eatre ex\u00e9cut\u00e9e que sur une seule instance MongoDB de l&rsquo;ensemble de r\u00e9plicas. Assurez-vous que le nom et le membre de l&rsquo;ensemble de r\u00e9pliques correspondent aux configurations que vous avez effectu\u00e9es dans chaque fichier de configuration pr\u00e9c\u00e9demment.<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"rs0\",\n    members: [\n      { _id: 0, host: \"mongo0.replset.member\" },\n      { _id: 1, host: \"mongo1.replset.member\" },\n      { _id: 2, host: \"mongo2.replset.member\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Si la m\u00e9thode renvoie \u00ab ok \u00bb : 1, cela signifie que l&rsquo;ensemble de r\u00e9pliques a \u00e9t\u00e9 d\u00e9marr\u00e9 correctement. Vous trouverez ci-dessous un exemple de ce \u00e0 quoi la sortie doit ressembler :<\/p>\n<pre><code class=\"language-markdown\"> \"ok\": 1,\n  \"$clusterTime\": {\n    \"clusterTime\": Timestamp(1612389071, 1),\n    \"signature\": {\n      \"hash\": BinData(0, \"AAAAAAAAAAAAAAAAAAAAAAAAAAA=\"),\n      \"keyId\": NumberLong(0)\n    }\n  },\n  \"operationTime\": Timestamp(1612389071, 1)\n}<\/code><\/pre>\n<h4>Arr\u00eater le serveur MongoDB<\/h4>\n<p>Vous pouvez arr\u00eater un serveur MongoDB en utilisant la m\u00e9thode <code>db.shutdownServer()<\/code>. Vous trouverez ci-dessous la syntaxe de cette m\u00e9thode. Les <a href=\"https:\/\/www.mongodb.com\/docs\/v5.0\/reference\/method\/db.shutdownServer\/#mongodb-method-db.shutdownServer\" target=\"_blank\" rel=\"noopener noreferrer\">param\u00e8tres<\/a><\/p>\n<pre><code class=\"language-markdown\">db.shutdownServer({\n  force: &lt;boolean&gt;,\n  timeoutSecs: &lt;int&gt;\n})<\/code><\/pre>\n<p>Cette m\u00e9thode peut \u00e9chouer si le membre de l&rsquo;ensemble de r\u00e9pliques MongoDB ex\u00e9cute certaines op\u00e9rations telles que la construction d&rsquo;index. Pour interrompre ces op\u00e9rations et forcer le membre \u00e0 s&rsquo;arr\u00eater, vous pouvez saisir le param\u00e8tre bool\u00e9en <code> force <\/code>\u00a0 \u00e0 true.<\/p>\n<h4>Red\u00e9marrer MongoDB avec &#8211;replSet<\/h4>\n<p>Pour r\u00e9initialiser la configuration, assurez-vous que chaque n\u0153ud de votre ensemble de r\u00e9pliques est arr\u00eat\u00e9. Supprimez ensuite la base de donn\u00e9es locale de chaque n\u0153ud. Red\u00e9marrez-le en utilisant le drapeau <code>\u2013replSet<\/code> et ex\u00e9cutez <code>rs.initiate()<\/code> sur une seule instance de MongoDB pour l&rsquo;ensemble de r\u00e9pliques.<\/p>\n<pre><code class=\"language-markdown\">mongod --replSet \"rs0\"<\/code><\/pre>\n<p><code>rs.initiate()<\/code> peut prendre un document optionnel de configuration de l&rsquo;ensemble de r\u00e9pliques, \u00e0 savoir :<\/p>\n<ul>\n<li>L&rsquo;option <code>Replication.replSetName<\/code> ou <code>\u2014replSet<\/code> pour sp\u00e9cifier le nom de l&rsquo;ensemble de r\u00e9pliques dans le champ <code>_id<\/code>.<\/li>\n<li>Le tableau des membres, qui contient un document pour chaque membre de l&rsquo;ensemble de r\u00e9pliques.<\/li>\n<\/ul>\n<p>La m\u00e9thode <code>rs.initiate()<\/code> d\u00e9clenche une \u00e9lection et choisit l&rsquo;un des membres comme membre principal.<\/p>\n<h4>Ajouter des membres \u00e0 l&rsquo;ensemble de r\u00e9pliques<\/h4>\n<p>Pour ajouter des membres \u00e0 l&rsquo;ensemble, d\u00e9marrez des instances mongod sur plusieurs machines. Ensuite, d\u00e9marrez un client Mongo et utilisez la commande <code>rs.add()<\/code>.<\/p>\n<p>La commande <code>rs.add()<\/code> a la syntaxe de base suivante :<\/p>\n<pre><code class=\"language-markdown\">rs.add(HOST_NAME:PORT)<\/code><\/pre>\n<p>Par exemple,<\/p>\n<p>Supposez que mongo1 est votre instance mongod et qu&rsquo;elle \u00e9coute sur le port 27017. Utilisez la commande client Mongo <code>rs.add()<\/code> pour ajouter cette instance \u00e0 l&rsquo;ensemble de r\u00e9pliques.<\/p>\n<pre><code class=\"language-markdown\">rs.add(\"mongo1:27017\")<\/code><\/pre>\n<p>Vous ne pouvez ajouter une instance mongod \u00e0 l&rsquo;ensemble de r\u00e9pliques que si vous \u00eates connect\u00e9 au n\u0153ud principal. Pour v\u00e9rifier que vous \u00eates connect\u00e9 au n\u0153ud principal, utilisez la commande <code>db.isMaster()<\/code>.<\/p>\n<h4>Supprimer des membres<\/h4>\n<p>Pour supprimer un membre, vous pouvez utiliser la commande <code>rs.remove()<\/code><\/p>\n<p>Pour cela, arr\u00eatez tout d&rsquo;abord l&rsquo;instance de mongod que vous souhaitez supprimer en utilisant la m\u00e9thode <code>db.shutdownServer()<\/code> dont nous avons parl\u00e9 plus haut.<\/p>\n<p>Ensuite, connectez-vous \u00e0 l&rsquo;instance primaire actuelle de l&rsquo;ensemble de r\u00e9pliques. Pour d\u00e9terminer le primaire actuel, utilisez <code>db.hello()<\/code> lorsque vous \u00eates connect\u00e9 \u00e0 n&rsquo;importe quel membre de l&rsquo;ensemble de r\u00e9pliques. Une fois que vous avez d\u00e9termin\u00e9 le primaire, ex\u00e9cutez l&rsquo;une des commandes suivantes :<\/p>\n<pre><code class=\"language-markdown\">rs.remove(\"mongodb-node-04:27017\")\nrs.remove(\"mongodb-node-04\")<\/code><\/pre>\n<figure id=\"attachment_148339\" aria-describedby=\"caption-attachment-148339\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148339 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\" alt=\"L'image ci-dessus montre que le n\u0153ud a \u00e9t\u00e9 supprim\u00e9 avec succ\u00e8s de l'ensemble de r\u00e9pliques.\" width=\"900\" height=\"267\"><\/a><figcaption id=\"caption-attachment-148339\" class=\"wp-caption-text\">L&rsquo;image ci-dessus montre que le n\u0153ud a \u00e9t\u00e9 supprim\u00e9 avec succ\u00e8s de l&rsquo;ensemble de r\u00e9pliques. (Source de l&rsquo;image : <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bmc<\/a>)<\/figcaption><\/figure>\n<p>Si l&rsquo;ensemble de r\u00e9pliques doit \u00e9lire un nouveau primaire, MongoDB peut d\u00e9connecter bri\u00e8vement le shell. Dans ce cas, il se reconnecte automatiquement. En outre, il peut afficher une erreur <code>DBClientCursor::init call()<\/code> failed m\u00eame si la commande r\u00e9ussit.<\/p>\n<h3>M\u00e9thode 2 : Configuration d&rsquo;un ensemble de r\u00e9pliques MongoDB pour le d\u00e9ploiement et les tests<\/h3>\n<p>En g\u00e9n\u00e9ral, vous pouvez configurer les ensembles de r\u00e9pliques pour les tests soit avec RBAC activ\u00e9, soit avec RBAC d\u00e9sactiv\u00e9. Dans cette m\u00e9thode, nous allons configurer les ensembles de r\u00e9pliques avec le contr\u00f4le d&rsquo;acc\u00e8s d\u00e9sactiv\u00e9 pour les <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpeur-full-stack\/\">d\u00e9ployer<\/a> dans un environnement de test.<\/p>\n<p>Tout d&rsquo;abord, cr\u00e9ez des r\u00e9pertoires pour toutes les instances qui font partie de l&rsquo;ensemble de r\u00e9pliques \u00e0 l&rsquo;aide de la commande suivante :<\/p>\n<pre><code class=\"language-markdown\">mkdir -p \/srv\/mongodb\/replicaset0-0  \/srv\/mongodb\/replicaset0-1 \/srv\/mongodb\/replicaset0-2<\/code><\/pre>\n<p>Cette commande cr\u00e9era des r\u00e9pertoires pour trois instances MongoDB : replicaset0-0, replicaset0-1 et replicaset0-2. D\u00e9marrez maintenant les instances MongoDB pour chacune d&rsquo;entre elles \u00e0 l&rsquo;aide de la s\u00e9rie de commandes suivante :<\/p>\n<p><strong>Pour le serveur 1 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27017 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>Pour le serveur 2 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27018 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>Pour le serveur 3 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27019 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p>Le param\u00e8tre <code>\u2013oplogSize<\/code> est utilis\u00e9 pour \u00e9viter que la machine ne soit surcharg\u00e9e pendant la phase de test. Il permet de r\u00e9duire l&rsquo;espace disque consomm\u00e9 par chaque disque.<\/p>\n<p>Maintenant, connectez-vous \u00e0 l&rsquo;une des instances \u00e0 l&rsquo;aide du shell Mongo en utilisant le num\u00e9ro de port ci-dessous.<\/p>\n<pre><code class=\"language-markdown\">mongo --port 27017<\/code><\/pre>\n<p>Nous pouvons utiliser la commande <code>rs.initiate()<\/code> pour lancer le processus de r\u00e9plication. Vous devrez remplacer le param\u00e8tre <code>hostname<\/code> par le nom de votre syst\u00e8me.<\/p>\n<pre><code class=\"language-markdown\">rs conf = {\n\n  _id: \"replicaset0\",\n\n  members: [\n\n    {  _id: 0,  host: \"&lt;hostname&gt;:27017},\n\n    {  _id: 1,  host: \"&lt;hostname&gt;:27018\"},\n\n    {  _id: 2,  host: \"&lt;hostname&gt;:27019\"}\n\n   ] }<\/code><\/pre>\n<p>Vous pouvez maintenant passer le fichier objet de configuration en param\u00e8tre de la commande initiate et l&rsquo;utiliser comme suit :<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(rsconf)<\/code><\/pre>\n<p>Et voil\u00e0 ! Vous avez r\u00e9ussi \u00e0 cr\u00e9er un ensemble de r\u00e9pliques MongoDB \u00e0 des fins de <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpeur-backend\/\">d\u00e9veloppement<\/a> et de test.<\/p>\n<h3>M\u00e9thode 3 : Transformer une instance autonome en un ensemble de r\u00e9pliques MongoDB<\/h3>\n<p>MongoDB permet \u00e0 ses utilisateurs de transformer leurs instances autonomes en ensembles de r\u00e9pliques. Alors que les instances autonomes sont principalement utilis\u00e9es pour la phase de test et de d\u00e9veloppement, les ensembles de r\u00e9pliques font partie de l&rsquo;environnement de production.<\/p>\n<p>Pour commencer, arr\u00eatons notre instance mongod \u00e0 l&rsquo;aide de la commande suivante :<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({\"shutdown\":\"1\"})<\/code><\/pre>\n<p>Red\u00e9marrez votre instance en utilisant le param\u00e8tre <code>\u2013repelSet<\/code> dans votre commande pour sp\u00e9cifier l&rsquo;ensemble de r\u00e9pliques que vous allez utiliser :<\/p>\n<pre><code class=\"language-markdown\">mongod --port 27017 \u2013 dbpath \/var\/lib\/mongodb  --replSet replicaSet1 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Vous devez sp\u00e9cifier le nom de votre serveur ainsi que l&rsquo;adresse unique dans la commande.<\/p>\n<p>Connectez le shell \u00e0 votre instance MongoDB et utilisez la commande initiate pour lancer le processus de r\u00e9plication et convertir avec succ\u00e8s l&rsquo;instance en un ensemble de r\u00e9pliques. Vous pouvez effectuer toutes les op\u00e9rations de base telles que l&rsquo;ajout ou la suppression d&rsquo;une instance \u00e0 l&rsquo;aide des commandes suivantes :<\/p>\n<pre><code class=\"language-markdown\">rs.add(\u201c&lt;host_name:port&gt;\u201d)<\/code><\/pre>\n<pre><code class=\"language-markdown\">rs.remove(\u201chost-name\u201d)<\/code><\/pre>\n<p>En outre, vous pouvez v\u00e9rifier l&rsquo;\u00e9tat de votre ensemble de r\u00e9pliques MongoDB \u00e0 l&rsquo;aide des commandes <code>rs.status()<\/code> et <code>rs.conf()<\/code>.<\/p>\n<h3>M\u00e9thode 4 : MongoDB Atlas &#8211; Une alternative plus simple<\/h3>\n<p>La r\u00e9plication et le <a href=\"https:\/\/kinsta.com\/fr\/blog\/sharding-mongodb\/\">sharding<\/a> peuvent fonctionner ensemble pour former ce que l&rsquo;on appelle un cluster shard\u00e9. Bien que l&rsquo;installation et la configuration puissent prendre beaucoup de temps, MongoDB Atlas est une meilleure alternative que les m\u00e9thodes mentionn\u00e9es ci-dessus.<\/p>\n<p>Il automatise vos ensembles de r\u00e9pliques, ce qui rend le processus facile \u00e0 mettre en \u0153uvre. Il peut d\u00e9ployer des ensembles de r\u00e9pliques globalement partag\u00e9s en quelques clics, ce qui permet la reprise apr\u00e8s sinistre, une <a href=\"https:\/\/kinsta.com\/fr\/blog\/adminer\/\">gestion<\/a> plus facile, la localit\u00e9 des donn\u00e9es et des d\u00e9ploiements multi-r\u00e9gionaux.<\/p>\n<p>Dans MongoDB Atlas, nous devons cr\u00e9er des clusters &#8211; il peut s&rsquo;agir d&rsquo;un ensemble de r\u00e9pliques ou d&rsquo;un cluster partag\u00e9. Pour un projet particulier, le nombre de n\u0153uds dans un cluster dans d&rsquo;autres r\u00e9gions est limit\u00e9 \u00e0 un total de 40.<\/p>\n<p>Cela exclut les clusters gratuits ou partag\u00e9s et les r\u00e9gions du cloud de Google qui communiquent entre elles. Le nombre total de n\u0153uds entre deux r\u00e9gions doit respecter cette contrainte. Par exemple, s&rsquo;il existe un projet dans lequel :<\/p>\n<ul>\n<li>La r\u00e9gion A a 15 n\u0153uds.<\/li>\n<li>La r\u00e9gion B a 25 n\u0153uds<\/li>\n<li>La r\u00e9gion C a 10 n\u0153uds<\/li>\n<\/ul>\n<p>Nous ne pouvons attribuer que 5 n\u0153uds suppl\u00e9mentaires \u00e0 la r\u00e9gion C,<\/p>\n<ol>\n<li>R\u00e9gion A+ R\u00e9gion B = 40 ; respecte la contrainte de 40, qui est le nombre maximum de n\u0153uds autoris\u00e9.<\/li>\n<li>R\u00e9gion B+ R\u00e9gion C = 25+10+5 (n\u0153uds suppl\u00e9mentaires allou\u00e9s \u00e0 C) = 40 ; respecte la contrainte de 40 qui est le nombre maximal de n\u0153uds autoris\u00e9.<\/li>\n<li>R\u00e9gion A+ R\u00e9gion C = 15+10+5 (n\u0153uds suppl\u00e9mentaires attribu\u00e9s \u00e0 C) = 30 ; respecte la contrainte de 40, qui est le nombre maximal de n\u0153uds autoris\u00e9.<\/li>\n<\/ol>\n<p>Si nous attribuons 10 n\u0153uds suppl\u00e9mentaires \u00e0 la r\u00e9gion C, ce qui fait que la r\u00e9gion C a 20 n\u0153uds, alors la r\u00e9gion B + la r\u00e9gion C = 45 n\u0153uds. Cela d\u00e9passerait la contrainte donn\u00e9e, et il se peut donc que vous ne puissiez pas cr\u00e9er un cluster multi-r\u00e9gions.<\/p>\n<p>Lorsque vous cr\u00e9ez un cluster, Atlas cr\u00e9e un conteneur r\u00e9seau dans le projet pour le fournisseur de cloud s&rsquo;il n&rsquo;\u00e9tait pas pr\u00e9sent auparavant. Pour cr\u00e9er un cluster d&rsquo;ensembles de r\u00e9pliques dans MongoDB Atlas, ex\u00e9cutez la commande suivante dans Atlas CLI :<\/p>\n<pre><code class=\"language-markdown\">atlas clusters create [name] [options]<\/code><\/pre>\n<p>Veillez \u00e0 donner un nom de cluster descriptif, car il ne peut pas \u00eatre modifi\u00e9 apr\u00e8s la cr\u00e9ation du cluster. L&rsquo;argument peut contenir des lettres ASCII, des chiffres et des traits d&rsquo;union.<\/p>\n<p><a href=\"https:\/\/www.mongodb.com\/docs\/atlas\/cli\/stable\/command\/atlas-clusters-create\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plusieurs options<\/a> sont disponibles pour la cr\u00e9ation d&rsquo;un cluster dans MongoDB en fonction de vos besoins. Par exemple, si vous souhaitez une sauvegarde continue dans le cloud pour votre cluster, d\u00e9finissez <code>--backup<\/code> sur true.<\/p>\n<h2>Gestion du d\u00e9lai de r\u00e9plication<\/h2>\n<p>Le d\u00e9lai de r\u00e9plication peut \u00eatre assez d\u00e9concertant. Il s&rsquo;agit d&rsquo;un d\u00e9lai entre une op\u00e9ration sur le primaire et l&rsquo;application de cette op\u00e9ration de l&rsquo;oplog au secondaire. Si votre entreprise traite de grands ensembles de donn\u00e9es, un d\u00e9lai est attendu dans une certaine limite. Cependant, des facteurs externes peuvent parfois contribuer \u00e0 augmenter le d\u00e9lai. Pour b\u00e9n\u00e9ficier d&rsquo;une r\u00e9plication \u00e0 jour, assurez-vous que :<\/p>\n<ol>\n<li>Vous acheminez votre trafic r\u00e9seau dans une bande passante stable et suffisante. La latence du r\u00e9seau joue un r\u00f4le important dans votre r\u00e9plication, et si le r\u00e9seau est insuffisant pour r\u00e9pondre aux besoins du processus de r\u00e9plication, il y aura des retards dans la r\u00e9plication des donn\u00e9es \u00e0 travers l&rsquo;ensemble de r\u00e9pliques.<\/li>\n<li>Vous disposez d&rsquo;un d\u00e9bit de disque suffisant. Si le syst\u00e8me de fichiers et l&rsquo;unit\u00e9 de disque du n\u0153ud secondaire ne sont pas en mesure de transf\u00e9rer les donn\u00e9es sur le disque aussi rapidement que le n\u0153ud primaire, le n\u0153ud secondaire aura du mal \u00e0 suivre. Par cons\u00e9quent, les n\u0153uds secondaires traitent les requ\u00eates d&rsquo;\u00e9criture plus lentement que le n\u0153ud principal. Il s&rsquo;agit d&rsquo;un probl\u00e8me courant dans la plupart des syst\u00e8mes multi-locataires, y compris les instances virtualis\u00e9es et les d\u00e9ploiements \u00e0 grande \u00e9chelle.<\/li>\n<li>Vous demandez un accus\u00e9 de r\u00e9ception d&rsquo;\u00e9criture apr\u00e8s un certain temps pour permettre aux n\u0153uds secondaires de rattraper le n\u0153ud principal, en particulier lorsque vous souhaitez effectuer une op\u00e9ration de chargement en masse ou d&rsquo;ingestion de donn\u00e9es n\u00e9cessitant un grand nombre d&rsquo;\u00e9critures sur le n\u0153ud principal. Les t\u00e2ches secondaires ne seront pas en mesure de lire l&rsquo;oplog assez rapidement pour suivre les changements, en particulier avec les probl\u00e8mes d&rsquo;\u00e9criture non acquitt\u00e9s.<\/li>\n<li>Vous identifiez les t\u00e2ches d&rsquo;arri\u00e8re-plan en cours d&rsquo;ex\u00e9cution. Certaines t\u00e2ches telles que les t\u00e2ches cron, les mises \u00e0 jour de serveur et les v\u00e9rifications de s\u00e9curit\u00e9 peuvent avoir des effets inattendus sur l&rsquo;utilisation du r\u00e9seau ou du disque, entra\u00eenant des retards dans le processus de r\u00e9plication.<\/li>\n<\/ol>\n<p>Si vous n&rsquo;\u00eates pas s\u00fbr qu&rsquo;il y ait un d\u00e9lai de r\u00e9plication dans votre application, ne vous inqui\u00e9tez pas &#8211; la section suivante traite des strat\u00e9gies de d\u00e9pannage !<\/p>\n<h2>D\u00e9pannage des ensembles de r\u00e9pliques MongoDB<\/h2>\n<p>Vous avez configur\u00e9 avec succ\u00e8s vos ensembles de r\u00e9pliques, mais vous remarquez que vos donn\u00e9es ne sont pas coh\u00e9rentes d&rsquo;un serveur \u00e0 l&rsquo;autre. Cette situation est tr\u00e8s alarmante pour les entreprises \u00e0 grande \u00e9chelle. Cependant, gr\u00e2ce \u00e0 des m\u00e9thodes de <a href=\"https:\/\/kinsta.com\/fr\/blog\/reparer-base-de-donnees-wordpress\/\">d\u00e9pannage rapides<\/a>, vous pouvez trouver la cause ou m\u00eame corriger le probl\u00e8me ! Vous trouverez ci-dessous quelques strat\u00e9gies courantes de d\u00e9pannage des d\u00e9ploiements d&rsquo;ensembles de r\u00e9pliques qui pourraient s&rsquo;av\u00e9rer utiles :<\/p>\n<h3>V\u00e9rifier l&rsquo;\u00e9tat des r\u00e9pliques<\/h3>\n<p>Nous pouvons v\u00e9rifier l&rsquo;\u00e9tat actuel de l&rsquo;ensemble de r\u00e9pliques et l&rsquo;\u00e9tat de chaque membre en ex\u00e9cutant la commande suivante dans une session mongosh connect\u00e9e \u00e0 l&rsquo;ensemble de r\u00e9pliques primaire.<\/p>\n<pre><code class=\"language-markdown\"> rs.status()<\/code><\/pre>\n<h3>V\u00e9rifier le d\u00e9lai de r\u00e9plication<\/h3>\n<p>Comme nous l&rsquo;avons vu pr\u00e9c\u00e9demment, le d\u00e9lai de r\u00e9plication peut \u00eatre un probl\u00e8me s\u00e9rieux car il rend les membres \u00ab retard\u00e9s \u00bb in\u00e9ligibles pour devenir rapidement primaires et augmente la possibilit\u00e9 que les op\u00e9rations de lecture distribu\u00e9es soient incoh\u00e9rentes. Nous pouvons v\u00e9rifier la longueur actuelle du journal de r\u00e9plication en utilisant la commande suivante :<\/p>\n<pre><code class=\"language-markdown\">rs.printSecondaryReplicationInfo()<\/code><\/pre>\n<p>Cette commande renvoie la valeur <code>syncedTo<\/code>, qui correspond \u00e0 l&rsquo;heure \u00e0 laquelle la derni\u00e8re entr\u00e9e oplog a \u00e9t\u00e9 \u00e9crite sur le serveur secondaire pour chaque membre. Voici un exemple de d\u00e9monstration :<\/p>\n<pre><code class=\"language-markdown\">source: m1.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary\nsource: m2.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary<\/code><\/pre>\n<p>Un membre retard\u00e9 peut afficher un retard de 0 seconde par rapport au membre principal lorsque la p\u00e9riode d&rsquo;inactivit\u00e9 sur le membre principal est sup\u00e9rieure \u00e0 la valeur <code> members[n].secondaryDelaySecs<\/code>.<\/p>\n<h3>Tester les connexions entre tous les membres<\/h3>\n<p>Chaque membre d&rsquo;un ensemble de r\u00e9pliques doit pouvoir se connecter \u00e0 tous les autres membres. Veillez toujours \u00e0 v\u00e9rifier les connexions dans les deux sens. La plupart du temps, les configurations de pare-feu ou les topologies de r\u00e9seau emp\u00eachent la connectivit\u00e9 normale et n\u00e9cessaire, ce qui peut bloquer la r\u00e9plication.<\/p>\n<p>Par exemple, supposons que l&rsquo;instance mongod se lie \u00e0 la fois \u00e0 localhost et au nom d&rsquo;h\u00f4te \u00ab ExampleHostname \u00bb qui est associ\u00e9 \u00e0 l&rsquo;adresse IP 198.41.110.1 :<\/p>\n<pre><code class=\"language-markdown\">mongod --bind_ip localhost, ExampleHostname<\/code><\/pre>\n<p>Pour se connecter \u00e0 cette instance, les clients distants doivent sp\u00e9cifier le nom d&rsquo;h\u00f4te ou l&rsquo;adresse IP :<\/p>\n<pre><code class=\"language-markdown\">mongosh --host ExampleHostname\nmongosh --host 198.41.110.1<\/code><\/pre>\n<p>Si un ensemble de r\u00e9pliques se compose de trois membres, m1, m2 et m3, et utilise le port par d\u00e9faut 27017, vous devez tester la connexion comme suit :<\/p>\n<p><strong>Sur m1 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m2 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Sur m2 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Sur m3 :<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m2 --port 27017<\/code><\/pre>\n<p>Si une connexion \u00e9choue dans n&rsquo;importe quelle direction, vous devez v\u00e9rifier la configuration de votre <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-qu-un-pare-feu\/\">pare-feu<\/a> et la reconfigurer pour autoriser les connexions.<\/p>\n<h2>Garantir des communications s\u00e9curis\u00e9es avec l&rsquo;authentification par fichier cl\u00e9<\/h2>\n<p>Par d\u00e9faut, l&rsquo;authentification par fichier cl\u00e9 dans MongoDB repose sur le m\u00e9canisme d&rsquo;authentification par r\u00e9ponse \u00e0 un d\u00e9fi sal\u00e9 (SCRAM). Pour ce faire, MongoDB doit lire et valider les informations d&rsquo;identification fournies par l&rsquo;utilisateur, qui comprennent une combinaison du nom d&rsquo;utilisateur, du mot de passe et de la base de donn\u00e9es d&rsquo;authentification connue par l&rsquo;instance sp\u00e9cifique de MongoDB. Il s&rsquo;agit du m\u00e9canisme exact utilis\u00e9 pour authentifier les utilisateurs qui fournissent un mot de passe lors de la connexion \u00e0 la base de donn\u00e9es.<\/p>\n<p>Lorsque vous activez l&rsquo;authentification dans MongoDB, le contr\u00f4le d&rsquo;acc\u00e8s bas\u00e9 sur les r\u00f4les (RBAC) est automatiquement activ\u00e9 pour l&rsquo;ensemble de r\u00e9pliques, et l&rsquo;utilisateur se voit attribuer un ou plusieurs r\u00f4les qui d\u00e9terminent son acc\u00e8s aux ressources de la base de donn\u00e9es. Lorsque le contr\u00f4le d&rsquo;acc\u00e8s bas\u00e9 sur les r\u00f4les est activ\u00e9, cela signifie que seul l&rsquo;utilisateur Mongo authentifi\u00e9 et disposant des privil\u00e8ges appropri\u00e9s peut acc\u00e9der aux ressources du syst\u00e8me.<\/p>\n<p>Le fichier cl\u00e9 agit comme un mot de passe partag\u00e9 pour chaque membre du cluster. Cela permet \u00e0 chaque instance Mongo de l&rsquo;ensemble de r\u00e9pliques d&rsquo;utiliser le contenu du fichier cl\u00e9 comme mot de passe partag\u00e9 pour authentifier les autres membres du d\u00e9ploiement.<\/p>\n<p>Seules les instances mongod ayant le bon fichier cl\u00e9 peuvent rejoindre l&rsquo;ensemble de r\u00e9pliques. La longueur d&rsquo;une cl\u00e9 doit \u00eatre comprise entre 6 et 1024 caract\u00e8res et ne peut contenir que des caract\u00e8res de l&rsquo;ensemble base64. Veuillez noter que MongoDB supprime les caract\u00e8res d&rsquo;espacement lors de la lecture des cl\u00e9s.<\/p>\n<p>Vous pouvez <strong>g\u00e9n\u00e9rer un fichier cl\u00e9<\/strong> \u00e0 l&rsquo;aide de diff\u00e9rentes m\u00e9thodes. Dans ce tutoriel, nous utilisons <code>openssl <\/code> pour g\u00e9n\u00e9rer une cha\u00eene complexe de 1024 caract\u00e8res al\u00e9atoires \u00e0 utiliser comme mot de passe partag\u00e9. Il utilise ensuite <code>chmod<\/code> pour modifier les autorisations de fichiers afin de fournir des autorisations de lecture uniquement au propri\u00e9taire du fichier. \u00c9vitez de stocker le fichier cl\u00e9 sur des supports de stockage qui peuvent \u00eatre facilement d\u00e9connect\u00e9s du mat\u00e9riel h\u00e9bergeant les instances de mongod, tels qu&rsquo;une cl\u00e9 USB ou un p\u00e9riph\u00e9rique de stockage connect\u00e9 au r\u00e9seau. Vous trouverez ci-dessous la commande permettant de g\u00e9n\u00e9rer un fichier cl\u00e9 :<\/p>\n<pre><code class=\"language-markdown\">openssl rand -base64 756 &gt; &lt;path-to-keyfile&gt;\nchmod 400 &lt;path-to-keyfile&gt;<\/code><\/pre>\n<p><strong>Copiez ensuite le fichier cl\u00e9 dans chaque membre de l&rsquo;ensemble de r\u00e9pliques<\/strong>. Assurez-vous que l&rsquo;utilisateur qui ex\u00e9cute les instances mongod est le propri\u00e9taire du fichier et qu&rsquo;il peut acc\u00e9der au fichier cl\u00e9. Une fois que vous avez fait ce qui pr\u00e9c\u00e8de, arr\u00eatez <strong>tous les membres de l&rsquo;ensemble de r\u00e9pliques<\/strong> en commen\u00e7ant par les secondaires. Une fois que tous les secondaires sont hors ligne, vous pouvez arr\u00eater le primaire. Il est essentiel de respecter cet ordre afin d&rsquo;\u00e9viter d&rsquo;\u00e9ventuels retours en arri\u00e8re. Arr\u00eatez maintenant l&rsquo;instance mongod en ex\u00e9cutant la commande suivante :<\/p>\n<pre><code class=\"language-markdown\">use admin\ndb.shutdownServer()<\/code><\/pre>\n<p>Une fois la commande ex\u00e9cut\u00e9e, tous les membres de l&rsquo;ensemble de r\u00e9pliques seront hors ligne. <strong>Red\u00e9marrez maintenant chaque membre de l&rsquo;ensemble de r\u00e9pliques avec le contr\u00f4le d&rsquo;acc\u00e8s activ\u00e9<\/strong>.<\/p>\n<p>Pour chaque membre de l&rsquo;ensemble de r\u00e9pliques, d\u00e9marrez l&rsquo;instance mongod avec le param\u00e8tre du fichier de configuration <code>security.keyFile<\/code> ou l&rsquo;option de ligne de commande <code>--keyFile<\/code>.<\/p>\n<p>Si vous utilisez un fichier de configuration, d\u00e9finissez<\/p>\n<ul>\n<li>security.keyFile au chemin du fichier cl\u00e9, et<\/li>\n<li>replication.replSetName au nom de l&rsquo;ensemble de r\u00e9pliques.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">security:\n  keyFile: &lt;path-to-keyfile&gt;\nreplication:\n  replSetName: &lt;replicaSetName&gt;\nnet:\n   bindIp: localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>D\u00e9marrez l&rsquo;instance mongod \u00e0 l&rsquo;aide du fichier de configuration :<\/p>\n<pre><code class=\"language-markdown\">mongod --config &lt;path-to-config-file&gt;<\/code><\/pre>\n<p>Si vous utilisez les options de la ligne de commande, d\u00e9marrez l&rsquo;instance mongod avec les options suivantes :<\/p>\n<ul>\n<li>&#8211;keyFile qui correspond au chemin d&rsquo;acc\u00e8s du fichier cl\u00e9, et<\/li>\n<li>&#8211;replSet le nom de l&rsquo;ensemble de r\u00e9pliques.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">mongod --keyFile &lt;path-to-keyfile&gt; --replSet &lt;replicaSetName&gt; --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Vous pouvez inclure des options suppl\u00e9mentaires en fonction de votre configuration. Par exemple, si vous souhaitez que des clients distants se connectent \u00e0 votre d\u00e9ploiement ou si les membres de votre d\u00e9ploiement sont ex\u00e9cut\u00e9s sur des h\u00f4tes diff\u00e9rents, sp\u00e9cifiez l&rsquo;option &#8211;bind_ip. Pour plus d&rsquo;informations, reportez-vous \u00e0 la section <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/release-notes\/3.6-compatibility\/#std-label-3.6-bind_ip-compatibility\" target=\"_blank\" rel=\"noopener noreferrer\">Modifications de la compatibilit\u00e9 de la liaison avec l&rsquo;h\u00f4te local<\/a>.<\/p>\n<p>Ensuite, <strong>connectez-vous \u00e0 un membre de l&rsquo;ensemble de r\u00e9plicas via l&rsquo;interface localhost<\/strong>. Vous devez ex\u00e9cuter mongosh sur la m\u00eame machine physique que l&rsquo;instance de mongod. Cette interface n&rsquo;est disponible que si aucun utilisateur n&rsquo;a \u00e9t\u00e9 cr\u00e9\u00e9 pour le d\u00e9ploiement et se ferme automatiquement apr\u00e8s la cr\u00e9ation du premier utilisateur.<\/p>\n<p>Nous lan\u00e7ons ensuite l&rsquo;ensemble de r\u00e9pliques. \u00c0 partir de mongosh, ex\u00e9cutez la m\u00e9thode <code>rs.initiate()<\/code>:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"myReplSet\",\n    members: [\n      { _id: 0, host: \"mongo1:27017\" },\n      { _id: 1, host: \"mongo2:27017\" },\n      { _id: 2, host: \"mongo3:27017\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Comme nous l&rsquo;avons vu pr\u00e9c\u00e9demment, cette m\u00e9thode permet d&rsquo;\u00e9lire l&rsquo;un des membres comme membre principal de l&rsquo;ensemble de r\u00e9pliques. Pour localiser le membre principal, utilisez <code>rs.status()<\/code>. Connectez-vous au membre principal avant de continuer.<\/p>\n<p><strong>Cr\u00e9ez maintenant l&rsquo;utilisateur administrateur<\/strong>. Vous pouvez ajouter un utilisateur en utilisant la m\u00e9thode <code>db.createUser()<\/code>. Veillez \u00e0 ce que l&rsquo;utilisateur ait au moins le r\u00f4le <code>userAdminAnyDatabase<\/code> dans la base de donn\u00e9es d&rsquo;administration.<\/p>\n<p>L&rsquo;exemple suivant cr\u00e9e l&rsquo;utilisateur \u00ab batman \u00bb avec le r\u00f4le <code>userAdminAnyDatabase<\/code> dans la base de donn\u00e9es de l&rsquo;administrateur :<\/p>\n<pre><code class=\"language-markdown\">admin = db.getSiblingDB(\"admin\")\nadmin.createUser(\n  {\n    user: \"batman\",\n    pwd: passwordPrompt(), \/\/ or cleartext password\n    roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Saisissez le mot de passe cr\u00e9\u00e9 pr\u00e9c\u00e9demment lorsque vous y \u00eates invit\u00e9.<\/p>\n<p>Ensuite, vous devez <strong>vous authentifier en tant qu&rsquo;utilisateur administrateur<\/strong>. Pour cela, utilisez <code>db.auth()<\/code> pour vous authentifier. Par exemple :<\/p>\n<p>db.getSiblingDB(\u00ab\u00a0admin\u00a0\u00bb).auth(\u00ab\u00a0batman\u00a0\u00bb, passwordPrompt()) \/\/ ou mot de passe en clair<\/p>\n<p>Vous pouvez \u00e9galement connecter une nouvelle instance de mongosh au membre de l&rsquo;ensemble de r\u00e9pliques primaire en utilisant les param\u00e8tres <code>-u &lt;username&gt;<\/code>,<code> -p &lt;password&gt;<\/code> et <code>--authenticationDatabase<\/code>.<\/p>\n<pre><code class=\"language-markdown\">mongosh -u \"batman\" -p  --authenticationDatabase \"admin\"<\/code><\/pre>\n<p>M\u00eame si vous ne sp\u00e9cifiez pas le mot de passe dans le champ de ligne de commande <code>-p<\/code>, mongosh vous demande le mot de passe.<\/p>\n<p>Enfin, <strong>cr\u00e9ez l&rsquo;administrateur du cluster<\/strong>. Le r\u00f4le <code>clusterAdmin<\/code> permet d&rsquo;acc\u00e9der aux op\u00e9rations de r\u00e9plication, telles que la configuration de l&rsquo;ensemble de r\u00e9pliques.<\/p>\n<p>Cr\u00e9ons un utilisateur administrateur de cluster et attribuons-lui le r\u00f4le <code>clusterAdmin<\/code> dans la base de donn\u00e9es admin :<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"admin\").createUser(\n  {\n    \"user\": \"robin\",\n    \"pwd\": passwordPrompt(),     \/\/ or cleartext password\n    roles: [ { \"role\" : \"clusterAdmin\", \"db\" : \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Saisissez le mot de passe lorsque vous y \u00eates invit\u00e9.<\/p>\n<p>Si vous le souhaitez, vous pouvez cr\u00e9er des utilisateurs suppl\u00e9mentaires pour permettre aux clients d&rsquo;interagir avec l&rsquo;ensemble de r\u00e9pliques.<\/p>\n<p>Et voil\u00e0 ! Vous avez bien activ\u00e9 l&rsquo;authentification par fichier cl\u00e9 !<\/p>\n\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>La r\u00e9plication est une exigence essentielle en mati\u00e8re de bases de donn\u00e9es, en particulier \u00e0 mesure que les entreprises se d\u00e9veloppent. Elle am\u00e9liore consid\u00e9rablement les <a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-apm\/\">performances<\/a>, la s\u00e9curit\u00e9 des donn\u00e9es et la disponibilit\u00e9 du syst\u00e8me. En parlant de performance, il est essentiel pour votre base de donn\u00e9es WordPress de surveiller les probl\u00e8mes de performance et de les rectifier \u00e0 temps, par exemple avec <a href=\"https:\/\/kinsta.com\/fr\/outil-apm\/\">Kinsta APM<\/a>, Jetpack et Freshping, pour n&rsquo;en citer que quelques-uns.<\/p>\n<p>La r\u00e9plication permet d&rsquo;assurer la protection des donn\u00e9es sur plusieurs serveurs et emp\u00eache vos serveurs de souffrir de temps d&rsquo;arr\u00eat importants (ou pire encore &#8211; de perdre toutes vos donn\u00e9es). Dans cet article, nous avons abord\u00e9 la cr\u00e9ation d&rsquo;un jeu de r\u00e9pliques et quelques conseils de d\u00e9pannage, ainsi que l&rsquo;importance de la r\u00e9plication. Utilisez-vous la r\u00e9plication MongoDB dans votre entreprise et s&rsquo;est-elle av\u00e9r\u00e9e utile ? Faites-nous part de vos commentaires dans la section ci-dessous !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MongoDB est une base de donn\u00e9es NoSQL qui utilise des documents de type JSON avec des sch\u00e9mas dynamiques. Lorsque vous travaillez avec des bases de donn\u00e9es, &#8230;<\/p>\n","protected":false},"author":199,"featured_media":67255,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1020],"class_list":["post-67254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-outils-developpement-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Un ensemble de r\u00e9pliques MongoDB est un groupe d&#039;instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)\" \/>\n<meta property=\"og:description\" content=\"Un ensemble de r\u00e9pliques MongoDB est un groupe d&#039;instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-04T06:55:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T13:33:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Un ensemble de r\u00e9pliques MongoDB est un groupe d&#039;instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)\",\"datePublished\":\"2023-04-04T06:55:24+00:00\",\"dateModified\":\"2023-08-24T13:33:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\"},\"wordCount\":7330,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\",\"name\":\"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\",\"datePublished\":\"2023-04-04T06:55:24+00:00\",\"dateModified\":\"2023-08-24T13:33:25+00:00\",\"description\":\"Un ensemble de r\u00e9pliques MongoDB est un groupe d'instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Outils de d\u00e9veloppement web\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/outils-developpement-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes) - Kinsta\u00ae","description":"Un ensemble de r\u00e9pliques MongoDB est un groupe d'instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/","og_locale":"fr_FR","og_type":"article","og_title":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)","og_description":"Un ensemble de r\u00e9pliques MongoDB est un groupe d'instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !","og_url":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-04-04T06:55:24+00:00","article_modified_time":"2023-08-24T13:33:25+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Un ensemble de r\u00e9pliques MongoDB est un groupe d'instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Jeremy Holcombe","Dur\u00e9e de lecture estim\u00e9e":"31 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)","datePublished":"2023-04-04T06:55:24+00:00","dateModified":"2023-08-24T13:33:25+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/"},"wordCount":7330,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/","url":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/","name":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","datePublished":"2023-04-04T06:55:24+00:00","dateModified":"2023-08-24T13:33:25+00:00","description":"Un ensemble de r\u00e9pliques MongoDB est un groupe d'instances MongoDB interconnect\u00e9es qui fournissent une redondance et une haute disponibilit\u00e9. D\u00e9ployez des ensembles de r\u00e9pliques et s\u00e9curisez vos donn\u00e9es !","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/03\/mongodb-replica-set.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/ensemble-repliques-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Outils de d\u00e9veloppement web","item":"https:\/\/kinsta.com\/fr\/sujets\/outils-developpement-web\/"},{"@type":"ListItem","position":3,"name":"Construire un ensemble de r\u00e9pliques MongoDB robuste en un temps record (4 m\u00e9thodes)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/67254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=67254"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/67254\/revisions"}],"predecessor-version":[{"id":72314,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/67254\/revisions\/72314"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/67254\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/67255"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=67254"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=67254"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=67254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}