{"id":1429,"date":"2014-02-21T21:21:57","date_gmt":"2014-02-21T19:21:57","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=1429"},"modified":"2014-07-11T16:23:03","modified_gmt":"2014-07-11T14:23:03","slug":"mongo-dans-tous-ses-etats-replication","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=1429","title":{"rendered":"Mongo Dans Tous Ses Etats &#8211; R\u00e9plication"},"content":{"rendered":"<p>Cette semaine, j&rsquo;ai eu l&rsquo;occasion de commencer \u00e0 \u00e9tudier le fonctionnement de la r\u00e9plication et du sharding avec MongoDB. Voici diverses informations provenant du <a href=\"http:\/\/docs.mongodb.org\/v2.4\/MongoDB-replication-guide.pdf\" target=\"_blank\">guide sur la r\u00e9plication<\/a>.<\/p>\n<h1>R\u00e9plication<\/h1>\n<p>La r\u00e9plication consiste \u00e0 \u00e9crire la donn\u00e9e sur plusieurs serveurs et r\u00e9pond ainsi au probl\u00e9matique de haute disponibilit\u00e9 et de redondance des donn\u00e9es. Elle permet, dans certains cas, d&rsquo;augmenter les capacit\u00e9s en lecture. Un replica set peut avoir jusqu&rsquo;\u00e0 12 membres dont 7 voteront \u00e0 la fois. Pour disposer de plus de 12 instances, il est n\u00e9cessaire de passer \u00e0 la r\u00e9plication ma\u00eetre-esclave.<\/p>\n<p>L&rsquo;architecture standard pour un replica set en production se compose de trois membres. Si l&rsquo;application se connecte \u00e0 plusieurs replica set, chacun doit avoir un nom diff\u00e9rent. Les membres s&rsquo;envoient des ping toutes les 2 secondes.<\/p>\n<p>Replica Set: Groupe de mongod disposant des m\u00eames (~~) donn\u00e9es.<\/p>\n<h2>Membres<\/h2>\n<p>On distingue deux types principaux de mongod dans un replica set: les primaires et les secondaires.<\/p>\n<h3>Primaire (Primary)<\/h3>\n<p>Il est unique et re\u00e7oit toutes les op\u00e9rations d&rsquo;\u00e9criture. Tous les changements sont conserv\u00e9s dans son <em>oplog.<\/em> Une \u00e9lection d&rsquo;un nouveau mongod primaire \u00e0 lieux, si l&rsquo;actuel ne communique avec aucun membre du replica set pendant 10s.<\/p>\n<h3>Secondaire (Secondary)<\/h3>\n<p>R\u00e9cup\u00e8re le oplog et applique les op\u00e9rations sur son jeu de donn\u00e9es. En cas d&rsquo;indisponibilit\u00e9 du primaire, un mongod secondaire sera \u00e9lu \u00e0 sa place.<\/p>\n<h3>Membre \u00e0 priorit\u00e9 0<\/h3>\n<p>Mongod secondaire qui ne peut pas devenir primaire et ne peut d\u00e9clencher d&rsquo;\u00e9lections. Permet de s&rsquo;assurer que seul les membres qui en ont les capacit\u00e9s deviendront primaire (distribution g\u00e9ographique, hardware). Il est conseill\u00e9 de s&rsquo;assurer que le datacenter principal contient les votants et les membres \u00e9ligibles.<\/p>\n<h3>Membre cach\u00e9<\/h3>\n<p>Invisible pour les applications clientes. Sont toujours des membres \u00e0 priorit\u00e9 0, ne peuvent devenir primaire mais peuvent voter. En cluster, mongos n&rsquo;interagit pas avec les membres cach\u00e9s.<\/p>\n<h3>Membre retard\u00e9<\/h3>\n<p>Refl\u00e8te un \u00e9tat retard\u00e9 de l&rsquo;\u00e9tat du groupe.<br \/>\nRequis:<br \/>\n* Doit \u00eatre un membre \u00e0 priorit\u00e9 0<br \/>\n* Devrait \u00eatre un membre cach\u00e9<br \/>\nLe d\u00e9lai doit \u00eatre plus petit que la capacit\u00e9 de oplog. Cette fonctionnalit\u00e9 est utile pour pouvoir appliquer un rollback (retour en arri\u00e8re) en cas d&rsquo;erreur humaine.<\/p>\n<h3>Arbitre (Arbiter)<\/h3>\n<p>Sa fonction est de voter en cas d&rsquo;\u00e9lection d&rsquo;un mongod primaire et permet d&rsquo;obtenir une majorit\u00e9 en cas d&rsquo;un nombre pair de membres.<br \/>\nImportant: Ne pas ajouter d&rsquo;arbitre sur les machines h\u00e9bergeant d\u00e9j\u00e0 un primaire ou un secondaire.<\/p>\n<h2>Strat\u00e9gies<\/h2>\n<p>D\u00e9ployer un nombre impair de membres pour s&rsquo;assurer qu&rsquo;un primaire pourra toujours \u00eatre \u00e9lu. Ajouter un arbitre si besoin.<br \/>\nTol\u00e9rance aux fautes: Correspond au nombre de membres auquel on soustrait la majorit\u00e9 requise pour \u00e9lire un nouveau mongod primaire.<br \/>\nAu moins un membre \u00e0 priorit\u00e9 0 dans un autre datacenter. Garder une majorit\u00e9 de membre au m\u00eame endroit.<\/p>\n<p>Le sharding est souvent une meilleur strat\u00e9gie pour augmenter les capacit\u00e9s en lecture et en \u00e9criture.<\/p>\n<h2>Read Preference Mode<\/h2>\n<p>* primary<br \/>\n* primaryPreferred<br \/>\n* secondary<br \/>\n* secondaryPreferred<br \/>\n* nearest<br \/>\nSeul primary permet d&rsquo;\u00eatre s\u00fbr d&rsquo;avoir des donn\u00e9es totalement \u00e0 jour.<br \/>\nUtiliser readPref() dans mongo shell pour acc\u00e9der aux pr\u00e9f\u00e9rences.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cette semaine, j&rsquo;ai eu l&rsquo;occasion de commencer \u00e0 \u00e9tudier le fonctionnement de la r\u00e9plication et du sharding avec MongoDB. Voici diverses informations provenant du guide sur la r\u00e9plication. R\u00e9plication La r\u00e9plication consiste \u00e0 \u00e9crire la donn\u00e9e sur plusieurs serveurs et r\u00e9pond ainsi au probl\u00e9matique de haute disponibilit\u00e9 et de redondance des donn\u00e9es. Elle permet, dans &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=1429\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Mongo Dans Tous Ses Etats &#8211; R\u00e9plication&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[126],"tags":[156,195],"class_list":["post-1429","post","type-post","status-publish","format-standard","hentry","category-logiciellibre","tag-mongodb","tag-replication"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/1429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1429"}],"version-history":[{"count":6,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/1429\/revisions"}],"predecessor-version":[{"id":1652,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/1429\/revisions\/1652"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}