{"id":51328,"date":"2023-03-16T07:47:12","date_gmt":"2023-03-16T07:47:12","guid":{"rendered":"https:\/\/kinsta.com\/se\/?p=51328&#038;preview=true&#038;preview_id=51328"},"modified":"2023-08-30T14:39:14","modified_gmt":"2023-08-30T14:39:14","slug":"mongodb-replika-uppsattning","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/","title":{"rendered":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)"},"content":{"rendered":"<p>MongoDB \u00e4r en <a href=\"https:\/\/kinsta.com\/blog\/mongodb-vs-mysql\/\">NoSQL<\/a>-databas som anv\u00e4nder JSON-liknande dokument med dynamiska scheman. N\u00e4r du arbetar med databaser s\u00e5 \u00e4r det alltid bra att ha en beredskapsplan om en av dina databasservrar skulle g\u00e5 s\u00f6nder. Du b\u00f6r d\u00e4rf\u00f6r minska risken f\u00f6r att n\u00e5got s\u00e5dant ska h\u00e4nda genom att utnyttja ett <a href=\"https:\/\/kinsta.com\/se\/mykinsta\/\">smart hanteringsverktyg<\/a> f\u00f6r din WordPress-webbplats.<\/p>\n<p>Det \u00e4r med andra ord bra att ha m\u00e5nga kopior av dina data. Detta minskar \u00e4ven l\u00e4sf\u00f6rdr\u00f6jningarna. Samtidigt s\u00e5 kan det f\u00f6rb\u00e4ttra databasens skalbarhet och tillg\u00e4nglighet. Det \u00e4r h\u00e4r som replikering kommer in i bilden. Replikering definieras som en praxis d\u00e4r man <a href=\"https:\/\/kinsta.com\/blog\/mysql-backup-database\/\">synkroniserar<\/a> data mellan flera <a href=\"https:\/\/kinsta.com\/blog\/open-source-database\/\">databaser<\/a>.<\/p>\n<p>I den h\u00e4r artikeln s\u00e5 kommer vi att dyka ner i de olika framtr\u00e4dande aspekterna av MongoDB-replikering, som exempelvis dess funktioner och mekanismer.<\/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>Vad \u00e4r replikering i MongoDB?<\/h2>\n<p>I MongoDB s\u00e5 utf\u00f6r replika-upps\u00e4ttningar en replikering. Detta \u00e4r en grupp servrar som uppr\u00e4tth\u00e5ller samma datam\u00e4ngd genom replikering. Du kan \u00e4ven anv\u00e4nda MongoDB-replikering som en del av belastningsutj\u00e4mning. H\u00e4r kan du f\u00f6rdela skriv- och l\u00e4soperationer \u00f6ver alla instanser, baserat p\u00e5 anv\u00e4ndningsomr\u00e5det.<\/p>\n\n<h2>Vad \u00e4r en MongoDB-replikaupps\u00e4ttning?<\/h2>\n<p>En <a href=\"https:\/\/kinsta.com\/blog\/what-is-mongodb\/\">MongoDB-instans<\/a> som ing\u00e5r i en viss replika-upps\u00e4ttning \u00e4r en medlem. Varje replika-upps\u00e4ttning m\u00e5ste ha en prim\u00e4r medlem och minst en sekund\u00e4r medlem.<\/p>\n<p>Den prim\u00e4ra medlemmen \u00e4r den prim\u00e4ra \u00e5tkomstpunkten f\u00f6r transaktioner med replika-upps\u00e4ttningen. Det \u00e4r \u00e4ven den enda medlemmen som kan acceptera skrivoperationer. Replikering kopierar f\u00f6rst den prim\u00e4ra medlemmens oplog (operationslogg). D\u00e4refter s\u00e5 upprepar den de loggade \u00e4ndringarna p\u00e5 sekund\u00e4rernas respektive datam\u00e4ngder. Som ett resultat s\u00e5 kan varje replika-upps\u00e4ttning endast ha en prim\u00e4r medlem \u00e5t g\u00e5ngen. Om flera prim\u00e4ra enheter tar emot skrivoperationer s\u00e5 kan detta exempelvis leda till datakonflikter.<\/p>\n<p>Vanligtvis s\u00e5 fr\u00e5gar applikationen endast efter den prim\u00e4ra medlemmen f\u00f6r skriv- och l\u00e4soperationer. Du kan utforma din installation s\u00e5 att den l\u00e4ser fr\u00e5n en eller flera av de sekund\u00e4ra medlemmarna. Asynkron data\u00f6verf\u00f6ring kan leda till att sekund\u00e4ra noders l\u00e4sningar serverar gamla data. Som ett resultat s\u00e5 \u00e4r ett s\u00e5dant arrangemang inte idealiskt f\u00f6r alla anv\u00e4ndningsomr\u00e5den.<\/p>\n<h3>Funktioner f\u00f6r replika-upps\u00e4ttningar<\/h3>\n<p>Mekanismen f\u00f6r automatisk failover skiljer MongoDB: s replika-upps\u00e4ttningar fr\u00e5n konkurrenterna. I avsaknad av en prim\u00e4r s\u00e5 v\u00e4ljer en automatiserad omr\u00f6stning bland de sekund\u00e4ra noderna en ny prim\u00e4r.<\/p>\n<h3>MongoDB Replika-upps\u00e4ttning vs MongoDB-kluster<\/h3>\n<p>En MongoDB replika-upps\u00e4ttning skapar olika kopior av samma datam\u00e4ngd i replika-upps\u00e4ttningsnoderna. Det prim\u00e4ra syftet med en replika-upps\u00e4ttning \u00e4r att:<\/p>\n<ul>\n<li>Erbjuda en inbyggd s\u00e4kerhetskopieringsl\u00f6sning<\/li>\n<li>\u00d6ka tillg\u00e4ngligheten av data<\/li>\n<\/ul>\n<p>Ett MongoDB-kluster \u00e4r en helt annan sak. Det distribuerar data \u00f6ver m\u00e5nga noder med hj\u00e4lp av en shardnyckel. Denna process fragmenterar data i m\u00e5nga delar som kallas shards. D\u00e4refter s\u00e5 kopieras varje shard till en annan nod. Ett kluster syftar till att st\u00f6dja stora datam\u00e4ngder och verksamhet med h\u00f6g genomstr\u00f6mning. Detta uppn\u00e5s genom att arbetsbelastningen skalas horisontellt.<\/p>\n<p>H\u00e4r \u00e4r skillnaden mellan en replika-upps\u00e4ttning och ett kluster, i lekmannatermer:<\/p>\n<ul>\n<li>Ett kluster f\u00f6rdelar arbetsbelastningen. Det lagrar \u00e4ven datafragment (shards) p\u00e5 m\u00e5nga servrar.<\/li>\n<li>En replika-upps\u00e4ttning duplicerar datam\u00e4ngden helt och h\u00e5llet.<\/li>\n<\/ul>\n<p>MongoDB g\u00f6r det m\u00f6jligt att kombinera dessa funktioner genom att skapa ett sharded kluster. H\u00e4r kan du replikera varje shard till en sekund\u00e4r server. Som ett resultat s\u00e5 kan en shard erbjuda en h\u00f6g redundans och datatillg\u00e4nglighet.<\/p>\n<p>Att underh\u00e5lla och konfigurera en replika-upps\u00e4ttning kan vara tekniskt p\u00e5frestande och tidskr\u00e4vande. Och att hitta r\u00e4tt hosting-leverant\u00f6r? Det \u00e4r en helt annan huvudv\u00e4rk. Med s\u00e5 m\u00e5nga alternativ d\u00e4r ute s\u00e5 \u00e4r det l\u00e4tt att sl\u00f6sa bort timmar p\u00e5 att g\u00f6ra efterforskning i st\u00e4llet f\u00f6r att bygga upp ditt f\u00f6retag.<\/p>\n<p>L\u00e5t mig ge dig en kort information om ett verktyg som g\u00f6r allt detta och mycket mer, s\u00e5 att du kan \u00e5terg\u00e5 till att jobba med din tj\u00e4nst\/produkt.<\/p>\n<p>Kinsta&#8217;s l\u00f6sning f\u00f6r <a href=\"https:\/\/sevalla.com\/application-hosting\/\">applikationshosting<\/a> \u00e4r betrodd av \u00f6ver 55 000 utvecklare. Du kan komma ig\u00e5ng med den med endast 3 enkla steg. Om detta l\u00e5ter f\u00f6r bra f\u00f6r att vara sant s\u00e5 finns h\u00e4r n\u00e5gra fler f\u00f6rdelar med att anv\u00e4nda Kinsta:<\/p>\n<ul>\n<li><strong>Njut av b\u00e4ttre prestanda med Kinsta&#8217;s interna anslutningar<\/strong>: Gl\u00f6m dina problem med delade databaser. Byt till dedikerade databaser med interna anslutningar. Som ett resultat s\u00e5 slipper du begr\u00e4nsningar i fr\u00e5ga om antalet s\u00f6kfr\u00e5gor eller antal rader. Kinsta \u00e4r snabbare, s\u00e4krare och kommer inte att fakturera dig f\u00f6r intern bandbredd\/trafik.<\/li>\n<li><strong>En funktionsupps\u00e4ttning som \u00e4r skr\u00e4ddarsydd f\u00f6r utvecklare<\/strong>: Skala din applikation p\u00e5 den robusta plattformen som st\u00f6der Gmail, YouTube och Google Search. Du kan vara s\u00e4ker p\u00e5 att du \u00e4r i trygga h\u00e4nder.<\/li>\n<li><strong>Njut av o\u00f6vertr\u00e4ffade hastigheter med ett datacenter som du sj\u00e4lv v\u00e4ljer<\/strong>: V\u00e4lj den region som fungerar b\u00e4st f\u00f6r dig och dina kunder. Med \u00f6ver 25 datacenter att v\u00e4lja mellan s\u00e5 har Kinsta 300+ PoP: s som garanterar en maximal hastighet och en global n\u00e4rvaro f\u00f6r din webbplats.<\/li>\n<\/ul>\n<p>Prova <a href=\"https:\/\/kinsta.com\/se\/registrering\/?product_type=app-db\">Kinsta&#8217;s l\u00f6sning f\u00f6r applikationshosting kostnadsfritt idag<\/a>!<\/p>\n<h2>Hur fungerar replikering i MongoDB?<\/h2>\n<p>I MongoDB s\u00e5 skickar du skrivoperationer till den prim\u00e4ra servern (noden). Den prim\u00e4ra servern tilldelar operationerna \u00f6ver sekund\u00e4ra servrar och replikerar data.<\/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 av MongoDB's replikeringsprocess (Bildk\u00e4lla: MongoDB)\" width=\"1024\" height=\"763\"><\/a><figcaption id=\"caption-attachment-148331\" class=\"wp-caption-text\">Illustration av MongoDB&#8217;s replikeringsprocess (Bildk\u00e4lla: <a href=\"https:\/\/www.mongodb.com\/basics\/replication\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB<\/a>)<\/figcaption><\/figure>\n<h3>Tre typer av MongoDB-noder<\/h3>\n<p>Av de tre typerna av MongoDB-noder s\u00e5 har tv\u00e5 dykt upp tidigare: prim\u00e4ra och sekund\u00e4ra noder. Den tredje typen av MongoDB-noder som \u00e4r anv\u00e4ndbar vid replikering \u00e4r en arbiter. Arbiter-noden har ingen kopia av datam\u00e4ngden och kan inte bli en prim\u00e4r nod. Med detta sagt s\u00e5 deltar arbiter-noden i valen av prim\u00e4rnod.<\/p>\n<p>Vi har tidigare n\u00e4mnt vad som h\u00e4nder n\u00e4r den prim\u00e4ra noden g\u00e5r ner, men vad h\u00e4nder om detta h\u00e4nder f\u00f6r de sekund\u00e4ra noderna? I det scenariot s\u00e5 blir den prim\u00e4ra noden sekund\u00e4r och databasen blir o\u00e5tkomlig.<\/p>\n<h3>Val av medlem<\/h3>\n<p>Valet kan ske i f\u00f6ljande scenarier:<\/p>\n<ul>\n<li>Initialisering av en replika-upps\u00e4ttning<\/li>\n<li>F\u00f6rlust av anslutning till den prim\u00e4ra noden (som kan uppt\u00e4ckas med hj\u00e4lp av heartbeat)<\/li>\n<li>Underh\u00e5ll av en replika-upps\u00e4ttning med hj\u00e4lp av metoderna <code>rs.reconfig<\/code> eller <code>stepDown<\/code><\/li>\n<li>L\u00e4gg till en ny nod till en befintlig replika-upps\u00e4ttning<\/li>\n<\/ul>\n<p>En replika-upps\u00e4ttning kan ha upp till 50 medlemmar, men endast 7 eller f\u00e4rre kan r\u00f6sta i ett val.<\/p>\n<p>Den genomsnittliga tiden innan ett kluster v\u00e4ljer en ny prim\u00e4r nod b\u00f6r inte \u00f6verstiga 12 sekunder. Val-algoritmen kommer att f\u00f6rs\u00f6ka att ha den sekund\u00e4ra med den h\u00f6gsta prioriteringen tillg\u00e4nglig. Samtidigt s\u00e5 kan medlemmarna med prioritetsv\u00e4rdet 0 inte bli prim\u00e4ra och deltar inte i valet.<\/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=\"Sekund\u00e4r nod som blir prim\u00e4r (Bildk\u00e4lla: Medium)\" width=\"900\" height=\"509\"><\/a><figcaption id=\"caption-attachment-148334\" class=\"wp-caption-text\">Sekund\u00e4r nod som blir prim\u00e4r (Bildk\u00e4lla: <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>Write Concern<\/h3>\n<p>F\u00f6r h\u00e5llbarhetens skull s\u00e5 har skriv-operationer en ram f\u00f6r att kopiera data i ett visst antal noder. Du kan till och med erbjuda feedback till klienten med detta. Det h\u00e4r ramverket \u00e4r \u00e4ven k\u00e4nt som &#8221;write concern&#8221;. Det har datav\u00e4rdiga medlemmar som m\u00e5ste bekr\u00e4fta ett skrivintresse innan operationen returneras som lyckad. Generellt s\u00e5 har replika-upps\u00e4ttningarna v\u00e4rdet 1 som ett skrivproblem. Som ett resultat s\u00e5 \u00e4r det bara den prim\u00e4ra som ska bekr\u00e4fta skrivningen innan den returnerar bekr\u00e4ftelsen f\u00f6r skriv-beg\u00e4randet.<\/p>\n<p>Du kan \u00e4ven \u00f6ka antalet medlemmar som beh\u00f6ver bekr\u00e4fta skriv-operationen. Det finns inget tak f\u00f6r hur m\u00e5nga medlemmar som du kan ha. Men om antalet \u00e4r h\u00f6gt s\u00e5 m\u00e5ste du hantera en h\u00f6g latenstid. Detta beror p\u00e5 att klienten m\u00e5ste v\u00e4nta p\u00e5 bekr\u00e4ftelse fr\u00e5n alla medlemmar. Du kan \u00e4ven st\u00e4lla in skriv-beg\u00e4randet f\u00f6r &#8221;majoriteten&#8221;.&#8221; Detta ber\u00e4knar mer \u00e4n h\u00e4lften av medlemmarna efter att de har f\u00e5tt sin bekr\u00e4ftelse.<\/p>\n<h3>L\u00e4spreferens<\/h3>\n<p>F\u00f6r l\u00e4sh\u00e4ndelser s\u00e5 kan du ange l\u00e4spreferensen. Den beskriver hur databasen styr beg\u00e4randet till medlemmarna i replika-upps\u00e4ttningen. Det \u00e4r generellt endast den prim\u00e4ra noden som tar emot l\u00e4shanteringen, men klienten kan ange en l\u00e4spreferens f\u00f6r att skicka l\u00e4shanteringen till sekund\u00e4ra noder. H\u00e4r \u00e4r alternativen f\u00f6r l\u00e4spreferensen:<\/p>\n<ul>\n<li><strong>primaryPreferred<\/strong>: Om den prim\u00e4ra noden inte \u00e4r tillg\u00e4nglig s\u00e5 h\u00e4mtas data fr\u00e5n de sekund\u00e4ra noderna.<\/li>\n<li><strong>primary<\/strong>: Alla l\u00e4sh\u00e4ndelser kommer fr\u00e5n den prim\u00e4ra noden.<\/li>\n<li><strong>secondary<\/strong>: Alla l\u00e4sh\u00e4ndelser utf\u00f6rs av de sekund\u00e4ra noderna.<\/li>\n<li><strong>Closest<\/strong>: H\u00e4r dirigeras l\u00e4s-beg\u00e4randena till den n\u00e4rmast n\u00e5bara noden, som kan uppt\u00e4ckas genom att k\u00f6ra kommandot <code>ping<\/code>. Resultatet av l\u00e4sh\u00e4ndelserna kan komma fr\u00e5n vilken medlem som helst i replika-upps\u00e4ttningen, oavsett om det \u00e4r den prim\u00e4ra eller den sekund\u00e4ra.<\/li>\n<li><strong>secondaryPreferred<\/strong>: H\u00e4r kommer de flesta l\u00e4soperationer fr\u00e5n de sekund\u00e4ra noderna. Om ingen av dem \u00e4r tillg\u00e4nglig s\u00e5 h\u00e4mtas uppgifterna dock fr\u00e5n den prim\u00e4ra noden.<\/li>\n<\/ul>\n<h3>Synkronisering av data i replika-upps\u00e4ttningar<\/h3>\n<p>F\u00f6r att uppr\u00e4tth\u00e5lla uppdaterade kopior av den delade datam\u00e4ngden s\u00e5 replikerar eller synkroniserar sekund\u00e4ra medlemmar i en replika-upps\u00e4ttning data fr\u00e5n andra medlemmar.<\/p>\n<p>MongoDB utnyttjar tv\u00e5 former av datasynkronisering. Dels initial synkronisering f\u00f6r att fylla nya medlemmar med hela datam\u00e4ngden. Det nyttjas \u00e4ven en replikering f\u00f6r att utf\u00f6ra l\u00f6pande \u00e4ndringar i den fullst\u00e4ndiga datam\u00e4ngden.<\/p>\n<h4>Initial synkronisering<\/h4>\n<p>Under den initiala synkroniseringen s\u00e5 k\u00f6r en sekund\u00e4r nod kommandot <code> init sync <\/code>. Som ett resultat s\u00e5 synkroniseras alla data fr\u00e5n den prim\u00e4ra noden till en annan sekund\u00e4r nod som inneh\u00e5ller de senaste uppgifterna. Den sekund\u00e4ra noden utnyttjar d\u00e4rf\u00f6r konsekvent funktionen <code> tailable cursor <\/code>. Detta g\u00f6rs f\u00f6r att fr\u00e5ga efter de senaste oplog-posterna i samlingen local.oplog.rs i den prim\u00e4ra noden. Sedan till\u00e4mpas dessa operationer i dessa oplog-poster.<\/p>\n<p>Fr\u00e5n MongoDB 5.2 s\u00e5 kan inledande synkroniseringar vara filkopieringsbaserade eller logiska.<\/p>\n<h5>Logisk synkronisering<\/h5>\n<p>N\u00e4r du utf\u00f6r en logisk synkronisering s\u00e5 utf\u00f6r MongoDB:<\/p>\n<ol>\n<li>Utveckling av alla samlingsindex n\u00e4r dokumenten kopieras f\u00f6r varje samling.<\/li>\n<li>Duplikering av alla databaser utom den lokala databasen. <code> mongod <\/code> skannar varje samling i alla k\u00e4lldatabaser och l\u00e4gger in alla data i sina dubbletter av dessa samlingar.<\/li>\n<li>Utf\u00f6rande av alla \u00e4ndringar i datam\u00e4ngden. Genom att utnyttja op-loggen fr\u00e5n k\u00e4llan s\u00e5 uppgraderar <code> mongod <\/code> sin datam\u00e4ngd f\u00f6r att beskriva replika-upps\u00e4ttningens aktuella tillst\u00e5nd.<\/li>\n<li>Extrahering av nytillkomna oplog-poster under datakopieringen. MongoDB ser till att m\u00e5lmedlemmen har tillr\u00e4ckligt med diskutrymme i den lokala databasen f\u00f6r att prelimin\u00e4rt lagra dessa oplog-poster under hela datakopieringsfasen.<\/li>\n<\/ol>\n<p>N\u00e4r den f\u00f6rsta synkroniseringen \u00e4r klar s\u00e5 \u00f6verg\u00e5r medlemmen fr\u00e5n <code> STARTUP2 <\/code> till <code> SECONDARY <\/code>.<\/p>\n<h5>Initial synkronisering baserad p\u00e5 filkopiering<\/h5>\n<p>Du kan endast utf\u00f6ra detta om du anv\u00e4nder MongoDB Enterprise. Den h\u00e4r processen k\u00f6r den f\u00f6rsta synkroniseringen genom att duplicera och flytta filerna i filsystemet. Denna synkroniseringsmetod kan i vissa fall vara snabbare \u00e4n logisk initial synkronisering. T\u00e4nk p\u00e5 att en filkopieringsbaserad initial synkronisering kan leda till felaktiga ber\u00e4kningar om du k\u00f6r count()-metoden utan ett fr\u00e5gepredikat.<\/p>\n<p>Men den h\u00e4r metoden har \u00e4ven sina begr\u00e4nsningar:<\/p>\n<ul>\n<li>Under en filkopieringsbaserad inledande synkronisering s\u00e5 kan du inte skriva till den lokala databasen f\u00f6r den medlem som synkroniseras. Som ett resultat s\u00e5 kan du inte heller k\u00f6ra en s\u00e4kerhetskopiering av den medlem som synkroniseras till eller den medlem som synkroniseras ifr\u00e5n.<\/li>\n<li>N\u00e4r MongoDB utnyttjar den krypterade lagringsmotorn s\u00e5 anv\u00e4nds k\u00e4llnyckeln f\u00f6r att kryptera destinationen.<\/li>\n<li>Du kan endast k\u00f6ra en f\u00f6rsta synkronisering fr\u00e5n en given medlem \u00e5t g\u00e5ngen.<\/li>\n<\/ul>\n<h4>Replikering<\/h4>\n<p>Sekund\u00e4ra medlemmar replikerar data konsekvent efter den f\u00f6rsta synkroniseringen. De duplicerar op-loggningen fr\u00e5n deras synkronisering fr\u00e5n k\u00e4llan och utf\u00f6r dessa operationer i en asynkron process.<\/p>\n<p>Dessa medlemmar kan automatiskt \u00e4ndra sin synkronisering fr\u00e5n k\u00e4llan vid behov p\u00e5 grundval av f\u00f6r\u00e4ndringar i ping-tiden och tillst\u00e5ndet f\u00f6r andra medlemmars replikering.<\/p>\n<h5>Str\u00f6mmad replikering<\/h5>\n<p>Fr\u00e5n och med MongoDB 4.4 s\u00e5 skickar synkronisering fr\u00e5n k\u00e4llor en kontinuerlig str\u00f6m av oplog-poster till deras synkroniserande sekund\u00e4rer. Str\u00f6mmad replikering minskar replikerings-f\u00f6rdr\u00f6jningen i n\u00e4tverk med h\u00f6g belastning och h\u00f6g latens. Som ett resultat av denna replikering s\u00e5 g\u00e4ller \u00e4ven detta:<\/p>\n<ul>\n<li>Risken minskas f\u00f6r att f\u00f6rlora skrivoperationer med <code>w:1<\/code> p\u00e5 grund av prim\u00e4rt felbyte.<\/li>\n<li>Stelheten minskas vid l\u00e4sning fr\u00e5n sekund\u00e4ra replikor.<\/li>\n<li>V\u00e4ntetiden minskas f\u00f6r skrivoperationer med <code>w:\u201cmajority\u201d<\/code> och <code>w:&gt;1<\/code>. Kort sagt, alla skrivproblem som beh\u00f6ver v\u00e4nta p\u00e5 replikering.<\/li>\n<\/ul>\n<h5>Replikering med flera tr\u00e5dar<\/h5>\n<p>MongoDB skriver operationer i omg\u00e5ngar genom flera tr\u00e5dar f\u00f6r att f\u00f6rb\u00e4ttra samtidigheten. Det grupperar partierna efter dokument-ID och till\u00e4mpar varje grupp av operationer med en annan tr\u00e5d.<\/p>\n<p>MongoDB utf\u00f6r alltid skrivoperationer p\u00e5 ett givet dokument i dess ursprungliga skrivordning. Detta \u00e4ndrades i MongoDB 4.0.<\/p>\n<p>Fr\u00e5n och med MongoDB 4.0 s\u00e5 har l\u00e4sh\u00e4ndelser som \u00e4r riktade mot sekund\u00e4ra dokument och som \u00e4r konfigurerade med en l\u00e4ss\u00e4kerhetsniv\u00e5 p\u00e5 <code>\u201cmajority\u201d<\/code> eller <code>\u201clocal\u201d<\/code> \u00e4ndrats. De kommer nu att l\u00e4sas fr\u00e5n en WiredTiger-snapshot av data om l\u00e4sningen sker p\u00e5 ett sekund\u00e4rt dokument d\u00e4r replikerings-batcherna till\u00e4mpas. L\u00e4sning fr\u00e5n en \u00f6gonblicksbild garanterar en enhetlig bild av data och g\u00f6r att l\u00e4sningen sker samtidigt med den p\u00e5g\u00e5ende replikeringen utan att den beh\u00f6ver l\u00e5sas.<\/p>\n<p>Som ett resultat s\u00e5 beh\u00f6ver sekund\u00e4rl\u00e4sningar som kr\u00e4ver dessa l\u00e4ss\u00e4kerhetsniv\u00e5er inte l\u00e4ngre v\u00e4nta p\u00e5 att replikerings-batcher ska till\u00e4mpas utan kan hanteras n\u00e4r de tas emot.<\/p>\n<h2>S\u00e5 h\u00e4r skapar du en MongoDB replika-upps\u00e4ttning<\/h2>\n<p>Som vi n\u00e4mnde tidigare s\u00e5 hanterar MongoDB replikering genom replika-upps\u00e4ttningar. Under de kommande avsnitten s\u00e5 kommer vi att belysa n\u00e5gra metoder som du kan anv\u00e4nda f\u00f6r att skapa replikaupps\u00e4ttningar f\u00f6r ditt anv\u00e4ndningsomr\u00e5de.<\/p>\n<h3>Metod 1: Skapa en ny MongoDB replika-upps\u00e4ttning p\u00e5 Ubuntu<\/h3>\n<p>Innan vi b\u00f6rjar s\u00e5 m\u00e5ste du se till att du har minst tre servrar som k\u00f6r Ubuntu 20.04, med <a href=\"https:\/\/kinsta.com\/blog\/what-is-mongodb\/\">MongoDB<\/a> installerat p\u00e5 varje server.<\/p>\n<p>F\u00f6r att skapa en replika-upps\u00e4ttning s\u00e5 \u00e4r det viktigt att ange en adress d\u00e4r varje medlem av replika-upps\u00e4ttningen kan n\u00e5s av andra i upps\u00e4ttningen. I det h\u00e4r fallet s\u00e5 har vi tre medlemmar i upps\u00e4ttningen. Vi kan anv\u00e4nda <a href=\"https:\/\/kinsta.com\/se\/blog\/statiska-vs-dynamiska-ip\/\">IP-adresser<\/a>, men detta rekommenderas inte eftersom adresserna kan \u00e4ndras ov\u00e4ntat. Ett b\u00e4ttre alternativ kan vara att anv\u00e4nda de logiska DNS-hostnamnen n\u00e4r man konfigurerar replika-upps\u00e4ttningar.<\/p>\n<p>Vi kan g\u00f6ra detta genom att konfigurera underdom\u00e4nen f\u00f6r varje replika-medlem. \u00c4ven om detta kan vara idealiskt f\u00f6r en produktionsmilj\u00f6 s\u00e5 kommer det h\u00e4r avsnittet att beskriva hur man konfigurerar <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-ar-dns\/\">DNS<\/a>-uppl\u00f6sning genom att redigera varje servers respektive hosts-fil. Med denna fil s\u00e5 kan vi tilldela l\u00e4sbara hostnamn till numeriska IP-adresser. Om din IP-adress \u00e4ndras s\u00e5 \u00e4r det enda som du beh\u00f6ver g\u00f6ra att uppdatera hosts-filerna p\u00e5 de tre servrarna. Som ett resultat s\u00e5 slipper du konfigurera om replika-upps\u00e4ttningen fr\u00e5n grunden!<\/p>\n<p>F\u00f6r det mesta s\u00e5 lagras <code>hosts<\/code> i katalogen <code>\/etc\/<\/code>. Upprepa nedanst\u00e5ende kommandon f\u00f6r var och en av dina tre servrar:<\/p>\n<pre><code class=\"language-markdown\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>I kommandot ovan s\u00e5 anv\u00e4nder vi nano som textredigerare, men du kan anv\u00e4nda vilken textredigerare som du vill. Efter de f\u00f6rsta raderna som konfigurerar localhost s\u00e5 l\u00e4gger du till en post f\u00f6r varje medlem i replika-upps\u00e4ttningen. Dessa poster har formen av en IP-adress f\u00f6ljt av ett m\u00e4nniskol\u00e4sbart namn som du v\u00e4ljer. Du kan kalla dem vad du vill, men se till att de \u00e4r beskrivande s\u00e5 att du kan skilja mellan varje medlem. I den h\u00e4r handledningen s\u00e5 kommer vi att anv\u00e4nda nedanst\u00e5ende hostnamn:<\/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>Med dessa hostnamn s\u00e5 skulle dina \/etc\/hosts-filer se ut som f\u00f6ljande markerade rader:<\/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=\"Illustration av hostnamn\" width=\"1222\" height=\"339\"><\/a><figcaption id=\"caption-attachment-148336\" class=\"wp-caption-text\">Illustration av hostnamn<\/figcaption><\/figure>\n<p>Spara och st\u00e4ng filen.<\/p>\n<p>Efter att ha konfigurerat DNS-uppl\u00f6sningen f\u00f6r replika-upps\u00e4ttningen s\u00e5 m\u00e5ste vi uppdatera brandv\u00e4ggsreglerna s\u00e5 att de kan kommunicera med varandra. K\u00f6r f\u00f6ljande <code>ufw<\/code>-kommando p\u00e5 mongo0 f\u00f6r att ge mongo1 tillg\u00e5ng till port 27017 p\u00e5 mongo0:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>I st\u00e4llet f\u00f6r parametern <code>mongo1_server_ip<\/code> s\u00e5 anger du mongo1-serverns faktiska IP-adress. Har du uppdaterat Mongo-instansen p\u00e5 den h\u00e4r servern s\u00e5 att den anv\u00e4nder en annan port \u00e4n standardporten? Se d\u00e5 till att \u00e4ndra 27017 s\u00e5 att den motsvarar den port som din MongoDB-instans anv\u00e4nder.<\/p>\n<p>L\u00e4gg nu till ytterligare en brandv\u00e4ggsregel f\u00f6r att ge mongo2 tillg\u00e5ng till samma port:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Ange mongo2-serverns faktiska IP-adress i st\u00e4llet f\u00f6r parametern <code>mongo2_server_ip<\/code>. Uppdatera sedan brandv\u00e4ggsreglerna f\u00f6r dina tv\u00e5 andra servrar. K\u00f6r f\u00f6ljande kommandon p\u00e5 mongo1-servern och se till att \u00e4ndra IP-adresserna i st\u00e4llet f\u00f6r parametern server_ip. Som ett resultat s\u00e5 motsvarar de mongo0&#8217;s respektive mongo2&#8217;s IP-adresser:<\/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>K\u00f6r slutligen dessa tv\u00e5 kommandon p\u00e5 mongo2. Se \u00e5terigen till att du anger r\u00e4tt IP-adresser f\u00f6r varje server:<\/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>N\u00e4sta steg \u00e4r att uppdatera konfigurationsfilen f\u00f6r varje MongoDB-instans s\u00e5 att externa anslutningar till\u00e5ts. F\u00f6r att till\u00e5ta detta s\u00e5 m\u00e5ste du \u00e4ndra konfigurationsfilen p\u00e5 varje server s\u00e5 att IP-adressen och replika-upps\u00e4ttningen anges. \u00c4ven om du kan anv\u00e4nda vilken textredigerare som du vill, s\u00e5 anv\u00e4nder vi \u00e5terigen textredigeraren nano. L\u00e5t oss g\u00f6ra f\u00f6ljande \u00e4ndringar i varje mongod.conf-fil.<\/p>\n<p><strong>P\u00e5 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>P\u00e5 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>P\u00e5 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>Om du vill \u00e4ndra direktivv\u00e4rdet fr\u00e5n rs0, se till att du ers\u00e4tter detta i ovanst\u00e5ende kommandon. Du kan namnge direktivet till vad du vill, men det m\u00e5ste vara tillr\u00e4ckligt beskrivande. N\u00e4r uppdateringarna \u00e4r klara s\u00e5 startar du om mongod-tj\u00e4nsten i varje instans f\u00f6r att ladda om konfigurationerna.<\/p>\n<\/aside>\n\n<pre><code class=\"language-markdown\">sudo systemctl restart mongod<\/code><\/pre>\n<p>Med detta s\u00e5 har du aktiverat replikering f\u00f6r varje servers MongoDB-instans.<\/p>\n<p>Du kan nu initiera replika-upps\u00e4ttningen genom att anv\u00e4nda metoden <code>rs.initiate()<\/code>. Den h\u00e4r metoden beh\u00f6ver bara utf\u00f6ras p\u00e5 en enda MongoDB-instans i replika-upps\u00e4ttningen. Kontrollera att replika-upps\u00e4ttningens namn och medlem \u00f6verensst\u00e4mmer med de konfigurationer som du gjorde i varje konfigurationsfil tidigare.<\/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>Om metoden returnerar &#8221;ok&#8221;: 1 i resultatet s\u00e5 betyder detta att replika-upps\u00e4ttningen startades korrekt. Nedan s\u00e5 finns ett exempel p\u00e5 hur utmatningen b\u00f6r se ut:<\/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>St\u00e4ng av MongoDB-servern<\/h4>\n<p>Du kan st\u00e4nga av en MongoDB-server genom att anv\u00e4nda metoden <code>db.shutdownServer()<\/code>. Nedan s\u00e5 f\u00f6ljer syntaxen f\u00f6r samma metod. B\u00e5de <code>force<\/code> och <code>timeoutsecs<\/code> \u00e4r <a href=\"https:\/\/www.mongodb.com\/docs\/v5.0\/reference\/method\/db.shutdownServer\/#mongodb-method-db.shutdownServer\" target=\"_blank\" rel=\"noopener noreferrer\">valfria parametrar<\/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>Den h\u00e4r metoden kan misslyckas om medlemmen i mongod replika-upps\u00e4ttningen exempelvis k\u00f6r vissa operationer som index-uppbyggnad. F\u00f6r att avbryta operationerna och tvinga medlemmen att st\u00e4nga ner s\u00e5 kan du ange den booleska parametern <code> force <\/code> till true.<\/p>\n<h4>Starta om MongoDB med &#8211;replSet<\/h4>\n<p>F\u00f6r att \u00e5terst\u00e4lla konfigurationen s\u00e5 ser du till att alla noder i din replika-upps\u00e4ttning \u00e4r stoppade. Ta sedan bort den lokala databasen f\u00f6r varje nod. Starta den igen med flaggan <code>\u2013replSet<\/code> och k\u00f6r <code>rs.initiate()<\/code> p\u00e5 endast en mongodinstans f\u00f6r replika-upps\u00e4ttningen.<\/p>\n<pre><code class=\"language-markdown\">mongod --replSet \"rs0\"<\/code><\/pre>\n<p><code>rs.initiate()<\/code> kan ta med ett valfritt konfigurationsdokument f\u00f6r replika-upps\u00e4ttningen, n\u00e4mligen:<\/p>\n<ul>\n<li>Alternativet <code>Replication.replSetName<\/code> eller <code>\u2014replSet<\/code> f\u00f6r att ange namnet p\u00e5 replika-upps\u00e4ttningen i f\u00e4ltet <code>_id<\/code>.<\/li>\n<li>Matrisen members, som inneh\u00e5ller ett dokument f\u00f6r varje medlem i replika-upps\u00e4ttningen.<\/li>\n<\/ul>\n<p>Metoden <code>rs.initiate()<\/code> utl\u00f6ser ett val och v\u00e4ljer en av medlemmarna som prim\u00e4r medlem.<\/p>\n<h4>L\u00e4gg till medlemmar i replika-upps\u00e4ttningen<\/h4>\n<p>F\u00f6r att l\u00e4gga till medlemmar i upps\u00e4ttningen s\u00e5 startar du mongod-instanser p\u00e5 olika maskiner. Starta sedan en mongoklient och anv\u00e4nd kommandot <code>rs.add()<\/code>.<\/p>\n<p>Kommandot <code>rs.add()<\/code> har f\u00f6ljande grundl\u00e4ggande syntax:<\/p>\n<pre><code class=\"language-markdown\">rs.add(HOST_NAME:PORT)<\/code><\/pre>\n<p>Exempelvis,<\/p>\n<p>Anta att mongo1 \u00e4r din mongod-instans och att den lyssnar p\u00e5 port 27017. Anv\u00e4nd kommandot <code>rs.add()<\/code> f\u00f6r att l\u00e4gga till den h\u00e4r instansen i replika-upps\u00e4ttningen.<\/p>\n<pre><code class=\"language-markdown\">rs.add(\"mongo1:27017\")<\/code><\/pre>\n<p>Det \u00e4r f\u00f6rst n\u00e4r du \u00e4r ansluten till den prim\u00e4ra noden som du kan l\u00e4gga till en mongo-instans i replika-upps\u00e4ttningen. F\u00f6r att kontrollera om du \u00e4r ansluten till den prim\u00e4ra enheten s\u00e5 anv\u00e4nder du kommandot <code>db.isMaster()<\/code>.<\/p>\n<h4>Ta bort anv\u00e4ndare<\/h4>\n<p>F\u00f6r att ta bort en medlem s\u00e5 kan vi anv\u00e4nda <code>rs.remove()<\/code><\/p>\n<p>F\u00f6r att g\u00f6ra detta s\u00e5 st\u00e4nger du f\u00f6rst av den mongod-instans som du vill ta bort med hj\u00e4lp av metoden <code>db.shutdownServer()<\/code> som vi diskuterade ovan.<\/p>\n<p>D\u00e4refter s\u00e5 ansluter du till replika-upps\u00e4ttningens nuvarande prim\u00e4ra enhet. F\u00f6r att fastst\u00e4lla den aktuella prim\u00e4ra enheten s\u00e5 anv\u00e4nder du <code>db.hello()<\/code> n\u00e4r du \u00e4r ansluten till en medlem i replika-upps\u00e4ttningen. N\u00e4r du har fastst\u00e4llt den prim\u00e4ra replikan s\u00e5 k\u00f6r du n\u00e5got av f\u00f6ljande kommandon:<\/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=\"Bilden ovan visar att noden har tagits bort fr\u00e5n replika-upps\u00e4ttningen. (Bildk\u00e4lla: Bmc)\" width=\"900\" height=\"267\"><\/a><figcaption id=\"caption-attachment-148339\" class=\"wp-caption-text\">Bilden ovan visar att noden har tagits bort fr\u00e5n replika-upps\u00e4ttningen. (Bildk\u00e4lla: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bmc<\/a>)<\/figcaption><\/figure>\n<p>Om replika-upps\u00e4ttningen beh\u00f6ver v\u00e4lja en ny prim\u00e4r nod s\u00e5 kan MongoDB koppla bort skalet kortvarigt. I det h\u00e4r scenariot s\u00e5 kommer den automatiskt att \u00e5teranslutas en g\u00e5ng till. Det kan \u00e4ven visa felmeddelandet <code>DBClientCursor::init call()<\/code> om kommandot lyckas.<\/p>\n<h3>Metod 2: Konfigurera en MongoDB-replika-upps\u00e4ttning f\u00f6r distribuering och testning<\/h3>\n<p>Du kan generellt konfigurera replika-upps\u00e4ttning f\u00f6r testning med RBAC aktiverat eller inaktiverat. I den h\u00e4r metoden s\u00e5 kommer vi att konfigurera replika-upps\u00e4ttningen med \u00e5tkomstkontrollen inaktiverad f\u00f6r att <a href=\"https:\/\/kinsta.com\/blog\/what-is-a-full-stack-developer\/\">distribuera<\/a> det i en testmilj\u00f6.<\/p>\n<p>F\u00f6rst s\u00e5 skapar du kataloger f\u00f6r alla instanser som ing\u00e5r i replika-upps\u00e4ttningen med f\u00f6ljande kommando:<\/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>Det h\u00e4r kommandot kommer att skapa kataloger f\u00f6r tre MongoDB-instanser replicaset0-0, replicaset0-1 och replicaset0-2. Starta nu MongoDB-instanserna f\u00f6r var och en av dem med hj\u00e4lp av f\u00f6ljande kommandon:<\/p>\n<p><strong>F\u00f6r server 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>F\u00f6r Server 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>F\u00f6r server 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>Parametern <code>\u2013oplogSize<\/code> anv\u00e4nds f\u00f6r att f\u00f6rhindra att maskinen \u00f6verbelastas under testfasen. Den bidrar till att minska m\u00e4ngden diskutrymme som varje disk tar i anspr\u00e5k.<\/p>\n<p>Anslut nu till en av instanserna med hj\u00e4lp av Mongo-skalet genom att ansluta med portnumret nedan.<\/p>\n<pre><code class=\"language-markdown\">mongo --port 27017<\/code><\/pre>\n<p>Vi kan anv\u00e4nda kommandot <code>rs.initiate()<\/code> f\u00f6r att starta replikeringsprocessen. Du m\u00e5ste ers\u00e4tta parametern <code>hostname<\/code> med ditt systems namn.<\/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>Du kan nu skicka konfigurationsobjektfilen som parameter f\u00f6r initiate-kommandot och anv\u00e4nda det p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(rsconf)<\/code><\/pre>\n<p>Sen \u00e4r du klar! Du har framg\u00e5ngsrikt skapat en MongoDB replika-upps\u00e4ttning f\u00f6r <a href=\"https:\/\/kinsta.com\/blog\/backend-developer\/\">utvecklings<\/a>&#8211; och test\u00e4ndam\u00e5l.<\/p>\n<h3>Metod 3: Omvandla en frist\u00e5ende instans till en MongoDB replika-upps\u00e4ttning<\/h3>\n<p>MongoDB till\u00e5ter sina anv\u00e4ndare att omvandla sina frist\u00e5ende instanser till replika-upps\u00e4ttningar. Medan frist\u00e5ende instanser oftast anv\u00e4nds f\u00f6r test- och utvecklingsfasen s\u00e5 \u00e4r replika-upps\u00e4ttningar en del av produktionsmilj\u00f6n.<\/p>\n<p>F\u00f6r att komma ig\u00e5ng s\u00e5 st\u00e4nger vi av v\u00e5r mongod-instans med f\u00f6ljande kommando:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({\"shutdown\":\"1\"})<\/code><\/pre>\n<p>Starta om din instans genom att anv\u00e4nda parametern <code>\u2013repelSet<\/code> i kommandot f\u00f6r att ange den replika-upps\u00e4ttning som du ska anv\u00e4nda:<\/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>Du m\u00e5ste ange namnet p\u00e5 din server tillsammans med den unika adressen i kommandot.<\/p>\n<p>Anslut skalet till din MongoDB-instans och anv\u00e4nd initiate-kommandot f\u00f6r att starta replikeringsprocessen och konvertera instansen till en replika-upps\u00e4ttning. Du kan utf\u00f6ra alla grundl\u00e4ggande operationer som att l\u00e4gga till eller ta bort en instans med hj\u00e4lp av f\u00f6ljande kommandon:<\/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>Dessutom s\u00e5 kan du kontrollera statusen f\u00f6r MongoDB-replikerna med hj\u00e4lp av kommandona <code>rs.status()<\/code> och <code>rs.conf()<\/code>.<\/p>\n<h3>Metod 4: MongoDB Atlas &#8211; ett enklare alternativ<\/h3>\n<p>Replikering och <a href=\"https:\/\/kinsta.com\/blog\/mongodb-sharding\/\">sharding<\/a> kan jobba ihop f\u00f6r att bilda n\u00e5got som kallas ett sharded kluster. \u00c4ven om installation och konfiguration kan vara ganska tidskr\u00e4vande, s\u00e5 \u00e4r MongoDB Atlas ett b\u00e4ttre alternativ \u00e4n de metoder som har n\u00e4mnts tidigare.<\/p>\n<p>Det automatiserar dina replika-upps\u00e4ttningar. Som ett resultat s\u00e5 blir processen enkel att genomf\u00f6ra. Det kan distribuera globalt sharded replika-upps\u00e4ttningar med n\u00e5gra f\u00e5 klick, vilket exempelvis m\u00f6jligg\u00f6r katastrof\u00e5terst\u00e4llning, enklare <a href=\"https:\/\/kinsta.com\/se\/blog\/adminer\/\">hantering<\/a>, datalokalisering och multiregionala distribueringar.<\/p>\n<p>I MongoDB Atlas s\u00e5 m\u00e5ste vi skapa kluster &#8211; de kan antingen vara en replika-upps\u00e4ttning eller ett sharded-kluster. F\u00f6r ett visst projekt s\u00e5 \u00e4r antalet noder i n\u00e5n annan regions kluster begr\u00e4nsat till totalt 40.<\/p>\n<p>Detta utesluter kostnadsfria eller delade kluster och Google molnregioner som kommunicerar med varandra. Det totala antalet noder mellan tv\u00e5 regioner m\u00e5ste uppfylla denna begr\u00e4nsning. Det kanske exempelvis finns ett projekt d\u00e4r:<\/p>\n<ul>\n<li>Region A har 15 noder.<\/li>\n<li>Medan Region B har 25 noder<\/li>\n<li>Slutligen s\u00e5 har Region C 10 noder<\/li>\n<\/ul>\n<p>Vi kan endast tilldela ytterligare 5 noder till region C eftersom,<\/p>\n<ol>\n<li>Region A + Region B = 40, vilket uppfyller begr\u00e4nsningen att 40 \u00e4r det h\u00f6gsta till\u00e5tna antalet noder.<\/li>\n<li>Region B + Region C = 25+10+5 (ytterligare noder som tilldelas C) = 40; uppfyller begr\u00e4nsningen att 40 \u00e4r det h\u00f6gsta till\u00e5tna antalet noder.<\/li>\n<li>Region A + Region C = 15+10+5 (ytterligare noder tilldelas C) = 30; uppfyller begr\u00e4nsningen att 40 \u00e4r det h\u00f6gsta till\u00e5tna antalet noder.<\/li>\n<\/ol>\n<p>Om vi tilldelar ytterligare 10 noder till region C, s\u00e5 att region C f\u00e5r 20 noder, s\u00e5 blir region B + region C = 45 noder. Detta skulle \u00f6verskrida den givna begr\u00e4nsningen, s\u00e5 du kanske inte kan skapa ett kluster med flera regioner.<\/p>\n<p>N\u00e4r du skapar ett kluster s\u00e5 skapar Atlas en n\u00e4tverks-container i projektet f\u00f6r molnleverant\u00f6ren om den inte fanns d\u00e4r tidigare. Om du vill skapa ett kluster med replikat-upps\u00e4ttning i MongoDB Atlas s\u00e5 k\u00f6r du f\u00f6ljande kommando i Atlas CLI:<\/p>\n<pre><code class=\"language-markdown\">atlas clusters create [name] [options]<\/code><\/pre>\n<p>Se till att du anger ett beskrivande klusternamn, eftersom detta inte kan \u00e4ndras efter att klustret har skapats. Argumentet kan inneh\u00e5lla ASCII-bokst\u00e4ver, siffror och bindestreck.<\/p>\n<p>Det finns <a href=\"https:\/\/www.mongodb.com\/docs\/atlas\/cli\/stable\/command\/atlas-clusters-create\/\" target=\"_blank\" rel=\"noopener noreferrer\">flera<\/a> alternativ tillg\u00e4ngliga f\u00f6r klusterskapande i MongoDB baserat p\u00e5 dina krav. Om du exempelvis vill ha kontinuerlig moln-s\u00e4kerhetskopiering f\u00f6r ditt kluster s\u00e5 st\u00e4ller du in <code>--backup<\/code> till true.<\/p>\n<h2>Hantering av replikerings-f\u00f6rdr\u00f6jning<\/h2>\n<p>Replikerings-f\u00f6rdr\u00f6jning kan vara ganska avskr\u00e4ckande. Det \u00e4r en f\u00f6rdr\u00f6jning mellan en operation p\u00e5 den prim\u00e4ra och till\u00e4mpningen av denna operation fr\u00e5n oplog till den sekund\u00e4ra. Om din verksamhet hanterar stora datam\u00e4ngder s\u00e5 f\u00f6rv\u00e4ntas det uppst\u00e5 en f\u00f6rdr\u00f6jning inom ett visst tr\u00f6skelv\u00e4rde. Ibland s\u00e5 kan dock externa faktorer \u00e4ven bidra till och \u00f6ka f\u00f6rdr\u00f6jningen.<\/p>\n<ol>\n<li>Du dirigerar din n\u00e4tverkstrafik med en stabil och tillr\u00e4ckligt stor bandbredd. N\u00e4tverkets latens spelar en stor roll n\u00e4r det g\u00e4ller att p\u00e5verka din replikering. Om n\u00e4tverket inte r\u00e4cker till f\u00f6r att tillgodose replikerings-processens behov s\u00e5 kommer det att uppst\u00e5 f\u00f6rdr\u00f6jningar i replikeringen av data i hela replika-upps\u00e4ttningen.<\/li>\n<li>Du har tillr\u00e4ckligt stor disk-genomstr\u00f6mning. Om filsystemet och diskenheten p\u00e5 den sekund\u00e4ra enheten inte kan spola data till disken lika snabbt som den prim\u00e4ra, s\u00e5 kommer den sekund\u00e4ra enheten att ha sv\u00e5rt att h\u00e4nga med. Som ett resultat s\u00e5 behandlar de sekund\u00e4ra noderna skriv-beg\u00e4randena l\u00e5ngsammare \u00e4n den prim\u00e4ra noden. Detta \u00e4r ett vanligt problem i de flesta system med flera medlemmar, inklusive virtualiserade instanser och storskaliga installationer.<\/li>\n<li>Du beg\u00e4r en skrivbekr\u00e4ftelse efter ett intervall f\u00f6r att ge de sekund\u00e4ra noderna m\u00f6jlighet att komma ikapp den prim\u00e4ra. Detta g\u00e4ller s\u00e4rskilt n\u00e4r du vill utf\u00f6ra en massladdnings-operation eller datainmatning som kr\u00e4ver ett stort antal skrivningar till den prim\u00e4ra noden. De sekund\u00e4ra enheterna kommer inte att kunna l\u00e4sa op-loggen tillr\u00e4ckligt snabbt f\u00f6r att h\u00e5lla j\u00e4mna steg med \u00e4ndringarna, s\u00e4rskilt inte med okvitterade skriv-beg\u00e4randen.<\/li>\n<li>Du identifierar de p\u00e5g\u00e5ende bakgrundsuppgifterna. Vissa uppgifter som cronjobb, serveruppdateringar och s\u00e4kerhetskontroller kan ha ov\u00e4ntade effekter p\u00e5 n\u00e4tverket eller diskanv\u00e4ndningen. Som ett resultat s\u00e5 kan det bli f\u00f6rseningar i replikerings-processen.<\/li>\n<\/ol>\n<p>Om du \u00e4r os\u00e4ker p\u00e5 om det finns en replikerings-f\u00f6rdr\u00f6jning i din applikation, oroa dig inte &#8211; i n\u00e4sta avsnitt s\u00e5 diskuterar vi strategier f\u00f6r fels\u00f6kning!<\/p>\n<h2>Fels\u00f6kning av MongoDB-replika-upps\u00e4ttningar<\/h2>\n<p>Du har lyckats konfigurera dina replika-upps\u00e4ttningar, men m\u00e4rker att dina data \u00e4r inkonsekventa mellan servrarna. Detta \u00e4r starkt alarmerande f\u00f6r storskaliga f\u00f6retag. Med snabba <a href=\"https:\/\/kinsta.com\/blog\/wordpress-repair-database\/\">fels\u00f6kningsmetoder<\/a> s\u00e5 kan du dock hitta orsaken eller till och med r\u00e4tta till problemet! Nedan s\u00e5 finns n\u00e5gra vanliga strategier f\u00f6r fels\u00f6kning av replika-upps\u00e4ttningar som kan vara till nytta:<\/p>\n<h3>Kontrollera replika-status<\/h3>\n<p>Vi kan kontrollera replika-upps\u00e4ttningens aktuella status och statusen f\u00f6r varje medlem genom att k\u00f6ra f\u00f6ljande kommando i en mongosh-session som \u00e4r ansluten till replika-upps\u00e4ttningens prim\u00e4ra.<\/p>\n<pre><code class=\"language-markdown\"> rs.status()<\/code><\/pre>\n<h3>Kontrollera replika-f\u00f6rdr\u00f6jningen<\/h3>\n<p>Som vi har diskuterat tidigare s\u00e5 kan replikerings-f\u00f6rdr\u00f6jning vara ett allvarligt problem. Som ett resultat av detta s\u00e5 kan n\u00e4mligen &#8221;f\u00f6rsenade&#8221; medlemmar inte bli prim\u00e4ra s\u00e5 snabbt och risken \u00f6kar f\u00f6r att distribuerade l\u00e4sh\u00e4ndelser blir inkonsekventa. Vi kan kontrollera replika-loggens aktuella l\u00e4ngd genom att anv\u00e4nda f\u00f6ljande kommando:<\/p>\n<pre><code class=\"language-markdown\">rs.printSecondaryReplicationInfo()<\/code><\/pre>\n<p>Detta returnerar v\u00e4rdet <code>syncedTo<\/code> som \u00e4r den tid d\u00e5 den senaste oplog-posten skrevs till den sekund\u00e4ra f\u00f6r varje medlem. H\u00e4r \u00e4r ett exempel f\u00f6r att visa samma sak:<\/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>En f\u00f6rdr\u00f6jd medlem kan visas som 0 sekunder efter den prim\u00e4ra n\u00e4r inaktivitetsperioden p\u00e5 den prim\u00e4ra \u00e4r st\u00f6rre \u00e4n v\u00e4rdet <code> members[n].secondaryDelaySecs<\/code>.<\/p>\n<h3>Testa anslutningar mellan alla medlemmar<\/h3>\n<p>Varje medlem i en replika-upps\u00e4ttning m\u00e5ste kunna ansluta till alla andra medlemmar. Se alltid till att verifiera anslutningarna i b\u00e5da riktningarna. Oftast s\u00e5 f\u00f6rhindrar brandv\u00e4ggskonfigurationer eller n\u00e4tverks-topologier normala och n\u00f6dv\u00e4ndiga anslutningar. Som ett resultat s\u00e5 kan replikering blockeras.<\/p>\n<p>L\u00e5t oss exempelvis anta att mongod-instansen binder till b\u00e5de localhost och hostname &#8221;ExampleHostname&#8221; som \u00e4r associerad med IP-adressen 198.41.110.1:<\/p>\n<pre><code class=\"language-markdown\">mongod --bind_ip localhost, ExampleHostname<\/code><\/pre>\n<p>F\u00f6r att ansluta till den h\u00e4r instansen s\u00e5 m\u00e5ste fj\u00e4rrklienterna ange hostnamnet eller IP-adressen:<\/p>\n<pre><code class=\"language-markdown\">mongosh --host ExampleHostname\nmongosh --host 198.41.110.1<\/code><\/pre>\n<p>Om en replika-upps\u00e4ttning best\u00e5r av tre medlemmar, m1, m2 och m3, som anv\u00e4nder standardporten 27017, s\u00e5 ska du testa anslutningen enligt nedan:<\/p>\n<p><strong>P\u00e5 m1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m2 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>P\u00e5 m2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>P\u00e5 m3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m2 --port 27017<\/code><\/pre>\n<p>Om n\u00e5gon anslutning i n\u00e5gon riktning misslyckas s\u00e5 m\u00e5ste du kontrollera din <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-ar-en-brandvagg\/\">brandv\u00e4ggskonfiguration<\/a> och konfigurera om den s\u00e5 att anslutningarna till\u00e5ts.<\/p>\n<h2>S\u00e4ker kommunikation med nyckelfils-autentisering<\/h2>\n<p>Som standard s\u00e5 bygger nyckelfils-autentisering i MongoDB p\u00e5 autentiserings-mekanismen SCRAM (salted challenge response authentication mechanism). F\u00f6r att g\u00f6ra detta s\u00e5 m\u00e5ste MongoDB l\u00e4sa och validera anv\u00e4ndarens angivna autentiserings-uppgifter som inneh\u00e5ller en kombination av anv\u00e4ndarnamn, l\u00f6senord och autentiserings-databas. Detta \u00e4r information som den specifika MongoDB-instansen k\u00e4nner till. Exakt denna mekanism anv\u00e4nds f\u00f6r att autentisera anv\u00e4ndare som anger ett l\u00f6senord n\u00e4r de ansluter till databasen.<\/p>\n<p>N\u00e4r du aktiverar autentisering i MongoDB s\u00e5 aktiveras RBAC (Role-Based Access Control) automatiskt f\u00f6r replika-upps\u00e4ttningen, och anv\u00e4ndaren tilldelas en eller flera roller som best\u00e4mmer deras \u00e5tkomst till databasresurser. N\u00e4r RBAC \u00e4r aktiverat s\u00e5 inneb\u00e4r detta att endast den giltiga autentiserade Mongo-anv\u00e4ndaren med l\u00e4mpliga privilegier kan f\u00e5 tillg\u00e5ng till resurserna i systemet.<\/p>\n<p>Nyckelfilen fungerar som ett delat l\u00f6senord f\u00f6r varje medlem i klustret. Som ett resultat s\u00e5 blir det m\u00f6jligt f\u00f6r varje Mongod-instans i replika-upps\u00e4ttningen att anv\u00e4nda inneh\u00e5llet i nyckelfilen. Detta g\u00e4ller exempelvis det delade l\u00f6senordet f\u00f6r autentisering av andra medlemmar i distribueringen.<\/p>\n<p>Endast de mongod-instanser som har r\u00e4tt nyckelfil kan ansluta sig till replika-upps\u00e4ttningen. En nyckels l\u00e4ngd m\u00e5ste vara mellan 6 och 1024 tecken och f\u00e5r endast inneh\u00e5lla tecken i base64-upps\u00e4ttningen. Observera att MongoDB tar bort vitrymdstecken vid l\u00e4sning av nycklar.<\/p>\n<p>Du kan <strong>generera en nyckelfil<\/strong> med hj\u00e4lp av olika metoder. I den h\u00e4r handledningen s\u00e5 anv\u00e4nder vi <code>openssl <\/code> f\u00f6r att generera en komplex str\u00e4ng med 1024 slumpm\u00e4ssiga tecken som kan anv\u00e4ndas som ett delat l\u00f6senord. D\u00e4refter s\u00e5 anv\u00e4nds <code>chmod<\/code> f\u00f6r att \u00e4ndra filbeh\u00f6righeterna s\u00e5 att endast fil\u00e4garen f\u00e5r l\u00e4sbeh\u00f6righet. Undvik att lagra nyckelfilen p\u00e5 lagringsmedier som l\u00e4tt kan kopplas bort fr\u00e5n den maskinvara som hostar mongod-instanserna. Det kan exempelvis handla om en USB-enhet eller en n\u00e4tverksansluten lagringsenhet. Nedan s\u00e5 f\u00f6ljer kommandot f\u00f6r att generera en nyckelfil:<\/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>Kopiera<\/strong> <strong>sedan nyckelfilen till varje medlem i replika-upps\u00e4ttningen<\/strong>. Se till att den anv\u00e4ndare som k\u00f6r mongod-instanserna \u00e4r \u00e4gare till filen och kan komma \u00e5t nyckelfilen. N\u00e4r du har gjort ovanst\u00e5ende s\u00e5 <strong>st\u00e4nger du<\/strong> <strong>av alla medlemmar i replika-upps\u00e4ttningen <\/strong>och b\u00f6rjar med de sekund\u00e4ra. N\u00e4r alla sekund\u00e4ra enheter \u00e4r offline s\u00e5 kan du g\u00e5 vidare och st\u00e4nga av den prim\u00e4ra. Det \u00e4r viktigt att f\u00f6lja den h\u00e4r ordningen f\u00f6r att f\u00f6rhindra eventuella fel. St\u00e4ng nu av mongod-instansen genom att k\u00f6ra f\u00f6ljande kommando:<\/p>\n<pre><code class=\"language-markdown\">use admin\ndb.shutdownServer()<\/code><\/pre>\n<p>N\u00e4r kommandot har k\u00f6rts s\u00e5 kommer alla medlemmar i replika-upps\u00e4ttningen att vara offline.<strong> Starta<\/strong> <strong>nu om varje medlem i replika-upps\u00e4ttningen med \u00e5tkomstkontrollen aktiverad<\/strong>.<\/p>\n<p>F\u00f6r varje medlem i replika-upps\u00e4ttningen s\u00e5 startar du mongod-instansen med antingen inst\u00e4llningen i konfigurationsfilen <code>security.keyFile<\/code> eller kommandoradsalternativet <code>--keyFile<\/code>.<\/p>\n<p>Om du anv\u00e4nder en konfigurationsfil s\u00e5 st\u00e4ller du in<\/p>\n<ul>\n<li>security.keyFile till nyckelfilens s\u00f6kv\u00e4g och<\/li>\n<li>replication.replSetName till replika-upps\u00e4ttningens namn.<\/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>Starta mongod-instansen med hj\u00e4lp av konfigurationsfilen:<\/p>\n<pre><code class=\"language-markdown\">mongod --config &lt;path-to-config-file&gt;<\/code><\/pre>\n<p>Om du anv\u00e4nder kommandoradsalternativen s\u00e5 startar du mongod-instansen med f\u00f6ljande alternativ:<\/p>\n<ul>\n<li>&#8211;keyFile \u00e4r inst\u00e4lld p\u00e5 s\u00f6kv\u00e4gen till nyckelfilen, och<\/li>\n<li>&#8211;replSet \u00e4r inst\u00e4lld p\u00e5 replika-upps\u00e4ttningarnas namn.<\/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>Du kan inkludera ytterligare alternativ som kr\u00e4vs f\u00f6r din konfiguration. Om du exempelvis vill att fj\u00e4rrklienter ska ansluta till din distribuering eller om dina distribuerings-medlemmar k\u00f6rs p\u00e5 olika hostar, ange &#8211;bind_ip. Mer information finns i <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\">\u00c4ndringar av kompatibiliteten f\u00f6r bindning av localhost<\/a>.<\/p>\n<p><strong>Anslut<\/strong> <strong>sedan till en medlem i replika-upps\u00e4ttningen via gr\u00e4nssnittet localhost<\/strong>. Du m\u00e5ste k\u00f6ra mongosh p\u00e5 samma fysiska maskin som mongod-instansen. Det h\u00e4r gr\u00e4nssnittet \u00e4r endast tillg\u00e4ngligt n\u00e4r inga anv\u00e4ndare har skapats f\u00f6r distribueringen och st\u00e4ngs automatiskt av n\u00e4r den f\u00f6rsta anv\u00e4ndaren har skapats.<\/p>\n<p>D\u00e4refter s\u00e5 startar vi replika-upps\u00e4ttningen. Fr\u00e5n mongosh s\u00e5 k\u00f6r du metoden <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>Som vi diskuterade tidigare s\u00e5 v\u00e4ljer den h\u00e4r metoden en av medlemmarna att vara den prim\u00e4ra medlemmen i replika-upps\u00e4ttningen. F\u00f6r att hitta den prim\u00e4ra medlemmen s\u00e5 anv\u00e4nder du <code>rs.status()<\/code>. Anslut till den prim\u00e4ra medlemmen innan du forts\u00e4tter.<\/p>\n<p><strong>Skapa<\/strong> <strong>nu<\/strong> <strong>anv\u00e4ndaren administrat\u00f6r<\/strong>. Du kan l\u00e4gga till en anv\u00e4ndare med hj\u00e4lp av metoden <code>db.createUser()<\/code>. Se till att anv\u00e4ndaren \u00e5tminstone har rollen <code>userAdminAnyDatabase<\/code> i administrat\u00f6rs-databasen.<\/p>\n<p>F\u00f6ljande exempel skapar anv\u00e4ndaren &#8221;batman&#8221; med rollen <code>userAdminAnyDatabase<\/code> i den administrativa databasen:<\/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>Ange det l\u00f6senord som skapades tidigare n\u00e4r du blir tillfr\u00e5gad.<\/p>\n<p>D\u00e4refter s\u00e5 m\u00e5ste du <strong>autentisera dig som anv\u00e4ndaradministrat\u00f6r<\/strong>. Anv\u00e4nd <code>db.auth()<\/code> f\u00f6r att autentisera dig. Exempelvis:<\/p>\n<p>exempel: db.getSiblingDB(&#8221;admin&#8221;).auth(&#8221;batman&#8221;, passwordPrompt()) \/\/ eller l\u00f6senord i klartext<\/p>\n<p>Alternativt s\u00e5 kan du ansluta en ny mongosh-instans till den prim\u00e4ra medlemmen i replika-upps\u00e4ttningen med hj\u00e4lp av parametrarna <code>-u &lt;username&gt;<\/code>,<code> -p &lt;password&gt;<\/code> och <code>--authenticationDatabase<\/code>.<\/p>\n<pre><code class=\"language-markdown\">mongosh -u \"batman\" -p  --authenticationDatabase \"admin\"<\/code><\/pre>\n<p>\u00c4ven om du inte anger l\u00f6senordet i kommandoradsf\u00e4ltet <code>-p<\/code> s\u00e5 fr\u00e5gar mongosh efter l\u00f6senordet.<\/p>\n<p>Slutligen s\u00e5 <strong>skapar du klusteradministrat\u00f6ren<\/strong>. Rollen <code>clusterAdmin<\/code> ger tillg\u00e5ng till replikerings\u00e5tg\u00e4rder, exempelvis konfigurering av replika-upps\u00e4ttningen.<\/p>\n<p>L\u00e5t oss skapa en klusteradministrat\u00f6rs-anv\u00e4ndare och tilldela rollen <code>clusterAdmin<\/code> i admin-databasen:<\/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>Ange l\u00f6senordet n\u00e4r du blir tillfr\u00e5gad.<\/p>\n<p>Om du vill s\u00e5 kan du skapa ytterligare anv\u00e4ndare f\u00f6r att till\u00e5ta klienter att interagera med replika-upps\u00e4ttningen.<\/p>\n<p>Och voila! Du har framg\u00e5ngsrikt aktiverat nyckelfils-autentisering!<\/p>\n\n<h2>Sammanfattning<\/h2>\n<p>Replikering har varit ett viktigt krav n\u00e4r det g\u00e4ller databaser, s\u00e4rskilt i takt med att allt fler f\u00f6retag skalar upp. Det f\u00f6rb\u00e4ttrar systemets <a href=\"https:\/\/kinsta.com\/blog\/apm-tools\/\">prestanda<\/a>, datas\u00e4kerhet och tillg\u00e4nglighet. Det \u00e4r helt centralt f\u00f6r din WordPress-databas att \u00f6vervaka prestandaproblem och \u00e5tg\u00e4rda dem i tid och otid, exempelvis med <a href=\"https:\/\/kinsta.com\/se\/apm-verktyg\/\">Kinsta APM<\/a>, Jetpack och Freshping f\u00f6r att n\u00e4mna n\u00e5gra verktyg.<\/p>\n<p>Replikering hj\u00e4lper till att s\u00e4kerst\u00e4lla dataskydd \u00f6ver flera servrar och f\u00f6rhindrar att dina servrar drabbas av tunga driftsstopp (eller \u00e4nnu v\u00e4rre &#8211; att din data g\u00e5r f\u00f6rlorad). I den h\u00e4r artikeln s\u00e5 gick vi igenom skapandet av en replika-upps\u00e4ttning och n\u00e5gra fels\u00f6kningstips samt vikten av replikering. Anv\u00e4nder du MongoDB-replikering i ditt f\u00f6retag och har det visat sig vara anv\u00e4ndbart f\u00f6r dig? L\u00e5t oss veta detta i kommentarsf\u00e4ltet nedan!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MongoDB \u00e4r en NoSQL-databas som anv\u00e4nder JSON-liknande dokument med dynamiska scheman. N\u00e4r du arbetar med databaser s\u00e5 \u00e4r det alltid bra att ha en beredskapsplan om &#8230;<\/p>\n","protected":false},"author":199,"featured_media":51329,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[],"class_list":["post-51328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"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>Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"MongoDB&#039;s replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!\" \/>\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\/se\/blog\/mongodb-replika-uppsattning\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)\" \/>\n<meta property=\"og:description\" content=\"MongoDB&#039;s replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-16T07:47:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-30T14:39:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/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=\"MongoDB&#039;s replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)\",\"datePublished\":\"2023-03-16T07:47:12+00:00\",\"dateModified\":\"2023-08-30T14:39:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\"},\"wordCount\":6311,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg\",\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\",\"name\":\"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg\",\"datePublished\":\"2023-03-16T07:47:12+00:00\",\"dateModified\":\"2023-08-30T14:39:14+00:00\",\"description\":\"MongoDB's replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"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\/se\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder) - Kinsta\u00ae","description":"MongoDB's replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!","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\/se\/blog\/mongodb-replika-uppsattning\/","og_locale":"sv_SE","og_type":"article","og_title":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)","og_description":"MongoDB's replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!","og_url":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2023-03-16T07:47:12+00:00","article_modified_time":"2023-08-30T14:39:14+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"MongoDB's replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","twitter_creator":"@kinsta_se","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Jeremy Holcombe","Ber\u00e4knad l\u00e4stid":"26 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)","datePublished":"2023-03-16T07:47:12+00:00","dateModified":"2023-08-30T14:39:14+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/"},"wordCount":6311,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/","url":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/","name":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","datePublished":"2023-03-16T07:47:12+00:00","dateModified":"2023-08-30T14:39:14+00:00","description":"MongoDB's replika-upps\u00e4ttningar \u00e4r l\u00e4nkade MongoDB-instanser f\u00f6r redundans och h\u00f6g tillg\u00e4nglighet. Distribuera dessa och s\u00e4kra din data!","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/03\/mongodb-replica-set.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/mongodb-replika-uppsattning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"Bygga en robust MongoDB-repliksupps\u00e4ttning p\u00e5 rekordtid (4 metoder)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","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\/se\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/51328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=51328"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/51328\/revisions"}],"predecessor-version":[{"id":55001,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/51328\/revisions\/55001"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/translations\/dk"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/51328\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/51329"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=51328"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=51328"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=51328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}