{"id":66977,"date":"2023-03-16T08:41:11","date_gmt":"2023-03-16T07:41:11","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=66977&#038;preview=true&#038;preview_id=66977"},"modified":"2023-08-30T15:30:01","modified_gmt":"2023-08-30T14:30:01","slug":"mongodb-replica-set","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/","title":{"rendered":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)"},"content":{"rendered":"<p>MongoDB \u00e8 un database <a href=\"https:\/\/kinsta.com\/it\/blog\/mongodb-vs-mysql\/\">NoSQL<\/a> che usa documenti di tipo JSON con schemi dinamici. Quando si lavora con i database, \u00e8 sempre bene avere un piano di emergenza nel caso in cui uno dei server del database si guasti. \u00c8 possibile ridurre le possibilit\u00e0 che ci\u00f2 accada utilizzando uno <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\">strumento di gestione<\/a> del vostro sito WordPress.<\/p>\n<p>Ecco perch\u00e9 \u00e8 utile avere molte copie dei dati. Questo riduce anche le latenze di lettura. Allo stesso tempo, pu\u00f2 migliorare la scalabilit\u00e0 e la disponibilit\u00e0 del database. \u00c8 qui che entra in gioco la replica, cio\u00e8 la pratica di <a href=\"https:\/\/kinsta.com\/it\/blog\/come-effettuare-il-backup-del-database-mysql\/\">sincronizzare<\/a> i dati tra pi\u00f9 <a href=\"https:\/\/kinsta.com\/it\/blog\/open-source-database\/\">database<\/a>.<\/p>\n<p>In questo articolo analizzeremo alcuni aspetti della replicazione (<em>replication<\/em>) di MongoDB, le sue caratteristiche e il suo meccanismo di funzionamento.<\/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>Cos&#8217;\u00c8 la Replicazione in MongoDB?<\/h2>\n<p>In MongoDB, i replica set eseguono la replicazione. Si tratta di un gruppo di server che mantengono lo stesso set di dati durante la replicazione. Potete anche usare la replicazione di MongoDB come parte del load balancing. In questo caso, potete distribuire le operazioni di scrittura e lettura su tutte le istanze, in base al caso d&#8217;uso.<\/p>\n\n<h2>Cos&#8217;\u00c8 un Replica Set in MongoDB?<\/h2>\n<p>Ogni istanza di <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-mongodb\/\">MongoDB<\/a> che fa parte di un determinato replica set \u00e8 un membro. Ogni replica set deve avere un membro primario e almeno un membro secondario.<\/p>\n<p>Il membro primario \u00e8 il punto di accesso principale per le transazioni con il replica set. \u00c8 anche l&#8217;unico membro che pu\u00f2 accettare operazioni di scrittura. Con la replicazione si copia innanzitutto l&#8217;oplog (registro delle operazioni) del primario. Successivamente, si ripetono le modifiche registrate sui rispettivi dataset dei secondari. Di conseguenza, ogni replica set pu\u00f2 avere un solo membro primario alla volta. Diversi primari che ricevono operazioni di scrittura possono causare conflitti di dati.<\/p>\n<p>Di solito, le applicazioni interrogano solo il membro primario per le operazioni di scrittura e lettura. Potete progettare la vostra configurazione per leggere da uno o pi\u00f9 membri secondari. Il trasferimento asincrono dei dati pu\u00f2 far s\u00ec che i nodi secondari leggano dati vecchi. Pertanto, questa soluzione non \u00e8 ideale per tutti i casi d&#8217;uso.<\/p>\n<h3>Caratteristiche dei Replica Set<\/h3>\n<p>Il meccanismo di failover automatico distingue i replica set di MongoDB dalla concorrenza. In assenza di un primario, un&#8217;elezione automatica tra i nodi secondari sceglie un nuovo primario.<\/p>\n<h3>MongoDB Replica Set vs MongoDB Cluster<\/h3>\n<p>Un set di replica MongoDB crea diverse copie dello stesso insieme di dati tra i nodi del replica set. Lo scopo principale di un replica set \u00e8 quello di:<\/p>\n<ul>\n<li>Offrire una soluzione di backup integrata<\/li>\n<li>Aumentare la disponibilit\u00e0 dei dati<\/li>\n<\/ul>\n<p>Un cluster MongoDB \u00e8 un gioco completamente diverso. Distribuisce i dati su pi\u00f9 nodi attraverso una chiave shard. Questo processo frammenta i dati in tanti pezzi chiamati shard. Successivamente, copia ogni shard su un nodo diverso. Un cluster ha lo scopo di supportare grandi insiemi di dati e operazioni ad alto rendimento. Questo obiettivo viene raggiunto scalando orizzontalmente il carico di lavoro.<\/p>\n<p>Ecco la differenza tra un replica set e un cluster, in parole povere:<\/p>\n<ul>\n<li>Un cluster distribuisce il carico di lavoro. Inoltre, memorizza frammenti di dati (shard) su molti server.<\/li>\n<li>Un replica set duplica completamente il set di dati.<\/li>\n<\/ul>\n<p>MongoDB vi permette di combinare queste funzionalit\u00e0 creando un cluster sharded. In questo caso, potete replicare ogni shard su un server secondario. Questo permette a uno shard di offrire un&#8217;elevata ridondanza e disponibilit\u00e0 dei dati.<\/p>\n<p>Mantenere e configurare un replica set pu\u00f2 essere tecnicamente impegnativo e richiede molto tempo. E trovare il giusto servizio di hosting? \u00c8 un altro paio di maniche. Con cos\u00ec tante opzioni a disposizione, \u00e8 facile perdere ore a fare ricerche invece di dedicare tempo alla vostra attivit\u00e0.<\/p>\n<p>Vi illustriamo uno strumento che fa tutto questo e molto di pi\u00f9, in modo che possiate tornare a dedicarvi con tutte le energie al vostro servizio\/prodotto.<\/p>\n<p>La soluzione di <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Application Hosting<\/a> di Kinsta, di cui si fidano oltre 55.000 sviluppatrici e sviluppatori, pu\u00f2 essere utilizzata in soli 3 semplici passi. Se vi sembra troppo bello per essere vero, ecco altri vantaggi dell&#8217;utilizzo di Kinsta:<\/p>\n<ul>\n<li><strong>Migliori prestazioni grazie alle connessioni interne di Kinsta<\/strong>: dimenticate i vostri problemi con i database condivisi. Passate a database dedicati con connessioni interne che non hanno limiti di numero di query o di righe. Kinsta \u00e8 pi\u00f9 veloce, pi\u00f9 sicuro e non vi addebiter\u00e0 la larghezza di banda\/traffico interno.<\/li>\n<li><strong>Un set di funzionalit\u00e0 su misura per chi sviluppa<\/strong>: scalate la vostra applicazione sulla solida piattaforma che supporta Gmail, YouTube e Google Search. Abbiate fiducia, siete davvero in buone mani.<\/li>\n<li><strong>Velocit\u00e0 ineguagliabili con un data center di vostra scelta<\/strong>: Scegliete la regione pi\u00f9 adatta a voi e ai vostri clienti. Con pi\u00f9 di 25 data center tra cui scegliere, gli oltre 300 PoP di Kinsta garantiscono la massima velocit\u00e0 e una presenza globale del vostro sito web.<\/li>\n<\/ul>\n<p>Provate <a href=\"https:\/\/kinsta.com\/it\/registrazione\/?product_type=app-db\">oggi stesso e gratuitamente la soluzione di hosting per applicazioni di Kinsta<\/a>!<\/p>\n<h2>Come Funziona la Replicazione in MongoDB?<\/h2>\n<p>In MongoDB, si inviano operazioni di scrittura al server (nodo) primario. Il server primario assegna le operazioni ai server secondari, replicando i dati.<\/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=\"size-full wp-image-148331\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\" alt=\"Un diagramma di flusso di come funziona la replicazione in MongoDB, per 3 nodi (1 primario, 2 secondari)\" width=\"1024\" height=\"763\"><\/a><figcaption id=\"caption-attachment-148331\" class=\"wp-caption-text\">Illustrazione del processo di replica in MongoDB (Fonte: <a href=\"https:\/\/www.mongodb.com\/basics\/replication\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB<\/a>)<\/figcaption><\/figure>\n<h3>Tre Tipi di Nodi MongoDB<\/h3>\n<p>Dei tre tipi di nodi MongoDB, due sono gi\u00e0 stati presentati in precedenza: i nodi primari e i nodi secondari. Il terzo tipo di nodo MongoDB che si rivela utile durante la replica \u00e8 l&#8217;arbiter. Il nodo arbiter non ha una copia del set di dati e non pu\u00f2 diventare primario. Detto questo, l&#8217;arbiter partecipa alle elezioni del primario.<\/p>\n<p>Abbiamo gi\u00e0 detto cosa succede quando il nodo primario va in tilt, ma cosa succede se i nodi secondari vanno in tilt? In questo caso, il nodo primario diventa secondario e il database diventa irraggiungibile.<\/p>\n<h3>Elezione dei Membri<\/h3>\n<p>Le elezioni possono avvenire nei seguenti scenari:<\/p>\n<ul>\n<li>Inizializzazione di un set di repliche<\/li>\n<li>Perdita di connettivit\u00e0 con il nodo primario (che pu\u00f2 essere rilevata dagli heartbeat)<\/li>\n<li>Manutenzione di un replica set con i metodi <code>rs.reconfig<\/code> o <code>stepDown<\/code><\/li>\n<li>Aggiunta di un nuovo nodo a un replica set esistente<\/li>\n<\/ul>\n<p>Un replica set pu\u00f2 avere fino a 50 membri, ma solo 7 o meno possono votare in qualsiasi elezione.<\/p>\n<p>Il tempo medio prima che un cluster elegga un nuovo primario non dovrebbe superare i 12 secondi. L&#8217;algoritmo di elezione cercher\u00e0 di avere a disposizione il secondario con la priorit\u00e0 pi\u00f9 alta. Allo stesso tempo, i membri con un valore di priorit\u00e0 pari a 0 non possono diventare primari e non partecipano alle elezioni.<\/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=\"size-full wp-image-148334\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\" alt=\"Diagramma che illustra un nodo secondario che diventa primario in MongoDB dopo le elezioni.\" width=\"900\" height=\"509\"><\/a><figcaption id=\"caption-attachment-148334\" class=\"wp-caption-text\">Nodo secondario che diventa primario (Fonte: <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>Il Write Concern<\/h3>\n<p>Per quanto riguarda la durabilit\u00e0, le operazioni di scrittura hanno una struttura che copia i dati in un numero specifico di nodi. \u00c8 anche possibile offrire un feedback al cliente. Questa struttura \u00e8 nota anche come &#8220;write concern&#8221;. Ha dei membri che trasportano i dati e che devono riconoscere un problema di scrittura prima che l&#8217;operazione abbia successo. In genere, i replica set hanno un valore di 1 come write concern. Pertanto, solo il primario deve confermare la scrittura prima di restituire il riconoscimento di write concern.<\/p>\n<p>Potete anche aumentare il numero di membri necessari a riconoscere l&#8217;operazione di scrittura. Non c&#8217;\u00e8 un limite massimo al numero di membri che potete avere. Tuttavia, se il numero \u00e8 elevato, dovrete fare i conti con una latenza elevata. Questo perch\u00e9 il client deve attendere il riconoscimento da parte di tutti i membri. Inoltre, potete impostare l&#8217;interesse di scrittura della &#8220;maggioranza&#8221;, che calcola pi\u00f9 della met\u00e0 dei membri dopo aver ricevuto il loro riconoscimento.<\/p>\n<h3>Preferenze di Lettura<\/h3>\n<p>Per le operazioni di lettura, potete indicare la preferenza di lettura che descrive come il database indirizza la query ai membri del replica set. In genere, il nodo primario riceve le operazioni di lettura, ma il cliente pu\u00f2 indicare una preferenza di lettura per inviare le operazioni di lettura ai nodi secondari. Ecco le opzioni per la preferenza di lettura:<\/p>\n<ul>\n<li><strong>primaryPreferred<\/strong>: di solito le operazioni di lettura provengono dal nodo primario, ma se questo non \u00e8 disponibile i dati vengono prelevati dai nodi secondari.<\/li>\n<li><strong>primary<\/strong>: tutte le operazioni di lettura provengono dal nodo primario.<\/li>\n<li><strong>secondary<\/strong>: tutte le operazioni di lettura vengono eseguite dai nodi secondari.<\/li>\n<li><strong>nearest<\/strong>: in questo caso, le richieste di lettura vengono instradate verso il nodo pi\u00f9 vicino raggiungibile, che pu\u00f2 essere individuato eseguendo il comando <code>ping<\/code>. L&#8217;esito delle operazioni di lettura pu\u00f2 provenire da qualsiasi membro del replica set, indipendentemente dal fatto che sia primario o secondario.<\/li>\n<li><strong>secondaryPreferred<\/strong>: In questo caso, la maggior parte delle operazioni di lettura proviene dai nodi secondari, ma se nessuno di essi \u00e8 disponibile, i dati vengono prelevati dal nodo primario.<\/li>\n<\/ul>\n<h3>Sincronizzazione dei Dati del Replication Set<\/h3>\n<p>Per mantenere copie aggiornate del set di dati condiviso, i membri secondari di un replica set replicano o sincronizzano i dati degli altri membri.<\/p>\n<p>MongoDB sfrutta due forme di sincronizzazione dei dati: sincronizzazione iniziale per riempire i nuovi membri con l&#8217;intero set di dati; replicazione per eseguire modifiche continue al set di dati completo.<\/p>\n<h4>Sincronizzazione Iniziale<\/h4>\n<p>Durante la sincronizzazione iniziale, un nodo secondario esegue il comando <code> init sync <\/code> per sincronizzare tutti i dati dal nodo primario a un altro nodo secondario che contiene i dati pi\u00f9 recenti. Pertanto, il nodo secondario sfrutta costantemente la funzione <code> tailable cursor <\/code> per interrogare le voci oplog pi\u00f9 recenti all&#8217;interno della raccolta local.oplog.rs del nodo primario e applica le operazioni all&#8217;interno di queste voci oplog.<\/p>\n<p>A partire da MongoDB 5.2, le sincronizzazioni iniziali possono essere basate su copie di file o logiche.<\/p>\n<h5>Sincronizzazione Logica<\/h5>\n<p>Quando eseguite una sincronizzazione logica, MongoDB:<\/p>\n<ol>\n<li>Sviluppa tutti gli indici delle collezioni mentre i documenti vengono copiati per ogni collezione.<\/li>\n<li>Duplica tutti i database ad eccezione del database locale. <code> mongod <\/code> esegue la scansione di ogni raccolta in tutti i database di origine e inserisce tutti i dati nei duplicati di queste raccolte.<\/li>\n<li>Esegue tutte le modifiche sul set di dati. Sfruttando l&#8217;oplog dell&#8217;origine, <code> mongod <\/code> aggiorna il suo set di dati per rappresentare lo stato attuale del replica set.<\/li>\n<li>Estrae i nuovi record oplog aggiunti durante la copia dei dati. Assicuratevi che il membro di destinazione disponga di spazio su disco sufficiente all&#8217;interno del database locale per memorizzare provvisoriamente questi record oplog per la durata di questa fase di copia dei dati.<\/li>\n<\/ol>\n<p>Al termine della sincronizzazione iniziale, il membro passa da <code> STARTUP2 <\/code> a <code> SECONDARY <\/code>.<\/p>\n<h5>Sincronizzazione Iniziale Basata sulla Copia dei File<\/h5>\n<p>Questa procedura pu\u00f2 essere eseguita solo se usate MongoDB Enterprise. Questo processo esegue la sincronizzazione iniziale duplicando e spostando i file sul file system. In alcuni casi, questo metodo di sincronizzazione potrebbe essere pi\u00f9 veloce della sincronizzazione iniziale logica. Tenete presente che la sincronizzazione iniziale basata sulla copia dei file potrebbe portare a conteggi imprecisi se eseguite il metodo count() senza un predicato di query.<\/p>\n<p>Tuttavia, anche questo metodo ha le sue limitazioni:<\/p>\n<ul>\n<li>Durante una sincronizzazione iniziale basata sulla copia di file, non potete scrivere sul database locale del membro che viene sincronizzato. Inoltre, non potete eseguire un backup sul membro a cui si sta sincronizzando o sul membro da cui si sta sincronizzando.<\/li>\n<li>Quando si usa il motore di archiviazione crittografato, MongoDB usa la chiave di origine per crittografare la destinazione.<\/li>\n<li>Potete eseguire una sincronizzazione iniziale solo da un membro alla volta.<\/li>\n<\/ul>\n<h4>Replicazione<\/h4>\n<p>I membri secondari replicano i dati in modo coerente dopo la sincronizzazione iniziale. I membri secondari duplicheranno l&#8217;oplog della loro sincronizzazione dalla sorgente ed eseguiranno queste operazioni in un processo asincrono.<\/p>\n<p>I membri secondari sono in grado di modificare automaticamente la loro sincronizzazione dall&#8217;origine, se necessario, in base alle variazioni del tempo di ping e dello stato della replicazione degli altri membri.<\/p>\n<h5>Replicazione in Streaming<\/h5>\n<p>A partire da MongoDB 4.4, la sincronizzazione dalle fonti invia un flusso continuo di voci oplog alle loro secondarie di sincronizzazione. La replicazione in streaming riduce il ritardo della replicazione nelle reti ad alto carico e ad alta latenza. Pu\u00f2 anche:<\/p>\n<ul>\n<li>Ridurre il rischio di perdere le operazioni di scrittura con <code>w:1<\/code> a causa di un failover primario.<\/li>\n<li>Ridurre lo stallo per le letture dai secondari.<\/li>\n<li>Ridurre la latenza delle operazioni di scrittura con <code>w:\u201cmajority\u201d<\/code> e <code>w:&gt;1<\/code>. In breve, qualsiasi problema di scrittura che richiede l&#8217;attesa della replicazione.<\/li>\n<\/ul>\n<h5>Replicazione Multithread<\/h5>\n<p>MongoDB \u00e8 solito scrivere le operazioni in batch attraverso pi\u00f9 thread per migliorare la concorrenza. MongoDB raggruppa i batch in base all&#8217;id del documento e applica ogni gruppo di operazioni con un thread diverso.<\/p>\n<p>MongoDB esegue sempre le operazioni di scrittura su un dato documento nel suo ordine di scrittura originale. Questo \u00e8 cambiato in MongoDB 4.0.<\/p>\n<p>A partire da MongoDB 4.0, le operazioni di lettura che hanno come obiettivo i secondari e sono configurate con un livello di write concern di <code>\u201cmajority\u201d<\/code> o <code>\u201clocal\u201d<\/code> ora leggeranno da un&#8217;istantanea WiredTiger dei dati se la lettura avviene su un secondario in cui vengono applicati i batch di replicazione. La lettura da un&#8217;istantanea garantisce una visione coerente dei dati e permette di leggere contemporaneamente alla replicazione in corso senza bisogno di un blocco.<\/p>\n<p>Pertanto, le letture secondarie che necessitano di questi livelli di concern non devono pi\u00f9 attendere l&#8217;applicazione dei batch di replicazione e possono essere gestite man mano che vengono ricevute.<\/p>\n<h2>Come Creare un Replica Set in MongoDB<\/h2>\n<p>Come detto in precedenza, MongoDB gestisce la replicazione attraverso i replica set. Nelle prossime sezioni vi illustreremo alcuni metodi che potete usare per creare un replica set adatto al vostro caso d&#8217;uso.<\/p>\n<h3>Metodo 1: Creare un Nuovo Replica Set MongoDB su Ubuntu<\/h3>\n<p>Prima di iniziare, dovete assicurarvi di avere almeno tre server con Ubuntu 20.04 e <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-mongodb\/\">MongoDB<\/a> installato su ogni server.<\/p>\n<p>Per configurare un replica set, \u00e8 essenziale fornire un indirizzo a cui ogni membro del replica set possa essere raggiunto dagli altri membri del set. In questo caso, i membri del set sono tre. Anche se possiamo usare gli <a href=\"https:\/\/kinsta.com\/it\/blog\/ip-statici-o-dinamici\/\">indirizzi IP<\/a>, non \u00e8 consigliabile perch\u00e9 gli indirizzi potrebbero cambiare inaspettatamente. Un&#8217;alternativa migliore pu\u00f2 essere quella di usare i nomi di host DNS logici quando si configurano i replica set.<\/p>\n<p>Possiamo farlo configurando il sottodominio per ogni membro della replicazione. Anche se questo pu\u00f2 essere l&#8217;ideale per un ambiente di produzione, in questa sezione verr\u00e0 illustrato come configurare la risoluzione <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-il-dns\/\">DNS<\/a> modificando i rispettivi file hosts di ogni server. Questo file ci permette di assegnare nomi di host leggibili a indirizzi IP numerici. In questo modo, se il vostro indirizzo IP dovesse cambiare, non dovrete fare altro che aggiornare i file hosts dei tre server piuttosto che riconfigurare il replica set da zero!<\/p>\n<p>Per lo pi\u00f9, <code>hosts<\/code> \u00e8 memorizzato nella directory <code>\/etc\/<\/code>. Ripetete i comandi seguenti per ognuno dei vostri tre server:<\/p>\n<pre><code class=\"language-markdown\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>Nel comando qui sopra, stiamo usando nano come editor di testo, ma potete usare l\u2019editor di testo che preferite. Dopo le prime righe che configurano il localhost, aggiungete una voce per ogni membro del replica set. Queste voci sono costituite da un indirizzo IP seguito da un nome leggibile a vostra scelta. Potete chiamarli come preferite, ma assicuratevi di essere descrittivi in modo da poter distinguere ogni membro. Per questo tutorial, useremo i seguenti nomi di host:<\/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>Con questi nomi di host, i file \/etc\/hosts avranno un aspetto simile alle seguenti righe evidenziate:<\/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=\"size-full wp-image-148336\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\" alt=\"Istantanea dei file \/etc\/hosts contenenti gli hostname insieme all'indirizzo IP.\" width=\"1222\" height=\"339\"><\/a><figcaption id=\"caption-attachment-148336\" class=\"wp-caption-text\">Illustrazione degli hostname<\/figcaption><\/figure>\n<p>Salvate e chiudete il file.<\/p>\n<p>Dopo aver configurato la risoluzione DNS per il replica set, dobbiamo aggiornare le regole del firewall per permettere ai due server di comunicare tra loro. Eseguite il seguente comando <code>ufw<\/code> su mongo0 per consentire a mongo1 di accedere alla porta 27017 di mongo0:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>Al posto del parametro <code>mongo1_server_ip<\/code>, inserite l&#8217;indirizzo IP effettivo del server mongo1. Inoltre, se avete aggiornato l&#8217;istanza di Mongo su questo server per usare una porta diversa da quella predefinita, assicuratevi di cambiare la 27017 per riflettere la porta utilizzata dall&#8217;istanza di MongoDB.<\/p>\n<p>Ora aggiungete un&#8217;altra regola del firewall per dare a mongo2 l&#8217;accesso alla stessa porta:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Al posto del parametro <code>mongo2_server_ip<\/code>, inserite l&#8217;indirizzo IP effettivo del vostro server mongo2. Quindi, aggiornate le regole del firewall per gli altri due server. Eseguite i seguenti comandi sul server mongo1, assicurandovi di cambiare gli indirizzi IP al posto del parametro server_ip per riflettere quelli di mongo0 e mongo2, rispettivamente:<\/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>Infine, eseguite questi due comandi su mongo2. Anche in questo caso, verificate di inserire gli indirizzi IP corretti per ogni 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>Il passo successivo \u00e8 aggiornare il file di configurazione di ogni istanza di MongoDB per consentire le connessioni esterne. Per permettere ci\u00f2, dovete modificare il file di configurazione di ogni server per riflettere l&#8217;indirizzo IP e indicare il replica set. Sebbene possiate usare qualsiasi editor di testo, noi useremo ancora una volta l&#8217;editor di testo nano. Apportiamo le seguenti modifiche a ciascun file mongod.conf.<\/p>\n<p><strong>Su 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>Su 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>Su 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>Se volete cambiare il valore della direttiva da rs0 assicuratevi di sostituirlo nei comandi precedenti. Potete dare alla direttiva il nome che preferite, ma badate che sia sufficientemente descrittivo. Al termine degli aggiornamenti, riavviate il servizio mongod in ogni istanza per ricaricare le configurazioni.<\/p>\n<\/aside>\n\n<pre><code class=\"language-markdown\">sudo systemctl restart mongod<\/code><\/pre>\n<p>In questo modo avete abilitato la replica per ogni istanza MongoDB del server.<\/p>\n<p>Ora potete inizializzare il replica set utilizzando il metodo <code>rs.initiate()<\/code>. Questo metodo deve essere eseguito solo su una singola istanza MongoDB del replica set. Verificate che il nome e il membro del replica set corrispondano alle configurazioni effettuate in precedenza in ciascun file di configurazione.<\/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>Se il metodo restituisce &#8220;ok&#8221;: 1 nell&#8217;output, significa che il replica set \u00e8 stato avviato correttamente. Ecco un esempio di come dovrebbe apparire l&#8217;output:<\/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>Spegnere il Server MongoDB<\/h4>\n<p>Potete spegnere un server MongoDB con il metodo <code>db.shutdownServer()<\/code>. Di seguito \u00e8 riportata la sintassi dello stesso. Sia <code>force<\/code> che <code>timeoutsecs<\/code> sono <a href=\"https:\/\/www.mongodb.com\/docs\/v5.0\/reference\/method\/db.shutdownServer\/#mongodb-method-db.shutdownServer\" target=\"_blank\" rel=\"noopener noreferrer\">parametri opzionali<\/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>Questo metodo pu\u00f2 fallire se il membro del mongod replica set esegue alcune operazioni come la creazione di indici. Per interrompere le operazioni e forzare il membro a spegnersi, potete inserire il parametro booleano <code> force <\/code> a true.<\/p>\n<h4>Riavviare MongoDB con &#8211;replSet<\/h4>\n<p>Per ripristinare la configurazione, verificate che tutti i nodi del vostro replica set siano fermi. Quindi cancellate il database locale di ogni nodo. Riavviate il database usando il flag <code>\u2013replSet<\/code> ed eseguite <code>rs.initiate()<\/code> su una sola istanza di MongoDB per il replica set.<\/p>\n<pre><code class=\"language-markdown\">mongod --replSet \"rs0\"<\/code><\/pre>\n<p><code>rs.initiate()<\/code> pu\u00f2 accettare un documento opzionale di configurazione del replica set, ovvero:<\/p>\n<ul>\n<li>L&#8217;opzione <code>Replication.replSetName<\/code> o <code>\u2014replSet<\/code> per specificare il nome del replica set nel campo <code>_id<\/code>.<\/li>\n<li>L&#8217;array dei membri, che contiene un documento per ogni membro del replica set.<\/li>\n<\/ul>\n<p>Il metodo <code>rs.initiate()<\/code> attiva un&#8217;elezione ed elegge uno dei membri come primario.<\/p>\n<h4>Aggiungere Membri al Replica Set<\/h4>\n<p>Per aggiungere membri all&#8217;insieme, avviate le istanze di mongod su diversi computer. Quindi, avviate un client mongo e usate il comando <code>rs.add()<\/code>.<\/p>\n<p>Il comando <code>rs.add()<\/code> ha la seguente sintassi di base:<\/p>\n<pre><code class=\"language-markdown\">rs.add(HOST_NAME:PORT)<\/code><\/pre>\n<p>Per esempio,<\/p>\n<p>Supponiamo che mongo1 sia la vostra istanza di Mongo e che sia in ascolto sulla porta 27017. Usate il comando del client Mongo <code>rs.add()<\/code> per aggiungere questa istanza al replica set.<\/p>\n<pre><code class=\"language-markdown\">rs.add(\"mongo1:27017\")<\/code><\/pre>\n<p>Solo se siete connessi al nodo primario potete aggiungere un&#8217;istanza mongod al replica set. Per verificare se siete connessi al nodo primario, usate il comando <code>db.isMaster()<\/code>.<\/p>\n<h4>Rimuovere gli Utenti<\/h4>\n<p>Per rimuovere un membro, possiamo usare <code>rs.remove()<\/code><\/p>\n<p>Per farlo, innanzitutto spegnete l&#8217;istanza di mongod che volete rimuovere usando il metodo <code>db.shutdownServer()<\/code> di cui abbiamo parlato sopra.<\/p>\n<p>Quindi, connettetevi al primario corrente del replica set. Per determinare il primario corrente, usate <code>db.hello()<\/code> mentre siete connessi a un qualsiasi membro del replica set. Una volta determinato il primario, eseguite uno dei seguenti comandi:<\/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=\"size-full wp-image-148339\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\" alt=\"Istantanea dell'output dopo aver eseguito il comando rs.remove().\" width=\"900\" height=\"267\"><\/a><figcaption id=\"caption-attachment-148339\" class=\"wp-caption-text\">L&#8217;immagine qui sopra mostra che il nodo \u00e8 stato rimosso correttamente dal replica set. (Fonte immagine: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bmc<\/a>)<\/figcaption><\/figure>\n<p>Se il replica set deve eleggere un nuovo primario, MongoDB potrebbe disconnettere brevemente la shell. In questo caso, si riconnetter\u00e0 automaticamente. Inoltre, potrebbe visualizzare un errore <code>DBClientCursor::init call()<\/code> failed anche se il comando ha successo.<\/p>\n<h3>Metodo 2: Configurare un Replica Set MongoDB per la Distribuzione e i Test<\/h3>\n<p>In generale, potete configurare i replica set per i test sia con RBAC abilitato che disabilitato. In questo metodo, configureremo i replica set con il controllo di accesso disabilitato per <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-full-stack\/\">distribuirli<\/a> in un ambiente di test.<\/p>\n<p>Per prima cosa, create le directory per tutte le istanze che fanno parte del replica set tramite il seguente comando:<\/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>Questo comando creer\u00e0 le directory per tre istanze MongoDB: replicaset0-0, replicaset0-1 e replicaset0-2. Ora avviate le istanze MongoDB per ognuna di esse utilizzando la seguente serie di comandi:<\/p>\n<p><strong>Per il 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>Per il 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>Per il 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>Il parametro <code>\u2013oplogSize<\/code> si usa per evitare che la macchina venga sovraccaricata durante la fase di test. Aiuta a ridurre la quantit\u00e0 di spazio su disco consumato da ciascun disco.<\/p>\n<p>A questo punto, connettetevi a una delle istanze utilizzando la shell di Mongo con il numero di porta indicato di seguito.<\/p>\n<pre><code class=\"language-markdown\">mongo --port 27017<\/code><\/pre>\n<p>Possiamo usare il comando <code>rs.initiate()<\/code> per avviare il processo di replicazione. Dovrete sostituire il parametro <code>hostname<\/code> con il nome del vostro sistema.<\/p>\n<pre><code class=\"language-markdown\">rs conf = {\n\n  _id: \"replicaset0\",\n\n  members: [\n\n\t{  _id: 0,  host: \"&lt;hostname&gt;:27017},\n\n\t{  _id: 1,  host: \"&lt;hostname&gt;:27018\"},\n\n\t{  _id: 2,  host: \"&lt;hostname&gt;:27019\"}\n\n   ] }<\/code><\/pre>\n<p>Ora potete passare il file dell&#8217;oggetto di configurazione come parametro del comando initiate e usarlo come segue:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(rsconf)<\/code><\/pre>\n<p>Ed ecco fatto! Avete creato con successo un replica set MongoDB per scopi <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-backend\/\">di sviluppo<\/a> e di test.<\/p>\n<h3>Metodo 3: Trasformare un&#8217;Istanza Standalone in un Replica Set MongoDB<\/h3>\n<p>MongoDB permette agli utenti di trasformare le proprie istanze standalone in replica set. Mentre le istanze standalone sono utilizzate soprattutto per la fase di test e sviluppo, i replica set fanno parte dell&#8217;ambiente di produzione.<\/p>\n<p>Per iniziare, chiudiamo la nostra istanza mongod con il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({\"shutdown\":\"1\"})<\/code><\/pre>\n<p>Riavviate la vostro istanza usando il parametro <code>\u2013repelSet<\/code> nel comando per specificare il replica set che state per utilizzare:<\/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>Dovete specificare il nome del vostro server insieme all&#8217;indirizzo univoco nel comando.<\/p>\n<p>Connettete la shell con la vostra istanza MongoDB e usate il comando initiate per avviare il processo di replicazione e convertire l&#8217;istanza in un replica set. Potete eseguire tutte le operazioni di base come l&#8217;aggiunta o la rimozione di un&#8217;istanza utilizzando i seguenti comandi:<\/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>Inoltre, potete controllare lo stato del vostro replica set MongoDB con i comandi <code>rs.status()<\/code> e <code>rs.conf()<\/code>.<\/p>\n<h3>Metodo 4: MongoDB Atlas &#8211; Un&#8217;Alternativa Pi\u00f9 Semplice<\/h3>\n<p>La replica e lo <a href=\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\">sharding<\/a> possono lavorare insieme per formare un cluster chiamato sharded. L&#8217;installazione e la configurazione possono richiedere molto tempo, anche se sono semplici, quindi MongoDB Atlas \u00e8 un&#8217;alternativa migliore rispetto ai metodi menzionati in precedenza.<\/p>\n<p>Automatizza i replica set, rendendo il processo facile da implementare. Pu\u00f2 distribuire replica set sharded a livello globale con pochi clic, consentendo il disaster recovery, una <a href=\"https:\/\/kinsta.com\/it\/blog\/adminer\/\">gestione<\/a> pi\u00f9 semplice, la localizzazione dei dati e le distribuzioni multiregionali.<\/p>\n<p>In MongoDB Atlas dobbiamo creare dei cluster, che possono essere un replica set o un cluster sharded. Per un particolare progetto, il numero di nodi in un cluster in altre regioni \u00e8 limitato a un totale di 40.<\/p>\n<p>Questo esclude i cluster gratuiti o condivisi e le regioni del cloud di Google che comunicano tra loro. Il numero totale di nodi tra due regioni deve rispettare questo vincolo. Per esempio, se c&#8217;\u00e8 un progetto in cui:<\/p>\n<ul>\n<li>La regione A ha 15 nodi.<\/li>\n<li>La regione B ha 25 nodi<\/li>\n<li>La regione C ha 10 nodi<\/li>\n<\/ul>\n<p>Possiamo assegnare solo altri 5 nodi alla regione C in quanto,<\/p>\n<ol>\n<li>Regione A+ Regione B = 40; rispetta il vincolo di 40 come numero massimo di nodi consentito.<\/li>\n<li>Regione B+ Regione C = 25+10+5 (nodi aggiuntivi assegnati a C) = 40; soddisfa il vincolo di 40 come numero massimo di nodi consentito.<\/li>\n<li>Regione A+ Regione C =15+10+5 (Nodi aggiuntivi assegnati a C) = 30; soddisfa il vincolo di 40 come numero massimo di nodi consentito.<\/li>\n<\/ol>\n<p>Se assegnassimo altri 10 nodi alla regione C, facendo s\u00ec che la regione C abbia 20 nodi, allora la regione B + la regione C = 45 nodi. Questo supererebbe il vincolo dato, quindi non potrete creare un cluster multiregione.<\/p>\n<p>Quando create un cluster, Atlas crea un contenitore di rete nel progetto per il cloud provider, se non era presente in precedenza. Per creare un cluster di replica set in MongoDB Atlas, eseguite il seguente comando nella CLI di Atlas:<\/p>\n<pre><code class=\"language-markdown\">atlas clusters create [name] [options]<\/code><\/pre>\n<p>Assicuratevi di dare un nome descrittivo al cluster, poich\u00e9 non pu\u00f2 essere modificato dopo la creazione del cluster. L&#8217;argomento pu\u00f2 contenere lettere ASCII, numeri e trattini.<\/p>\n<p>Ci sono <a href=\"https:\/\/www.mongodb.com\/docs\/atlas\/cli\/stable\/command\/atlas-clusters-create\/\" target=\"_blank\" rel=\"noopener noreferrer\">diverse<\/a> opzioni disponibili per la creazione di cluster in MongoDB in base alle vostro esigenze. Per esempio, se volete un backup continuo nel cloud per il vostro cluster, impostate <code>--backup<\/code> su true.<\/p>\n<h2>Gestire il Ritardo di Replicazione<\/h2>\n<p>Il ritardo di replicazione pu\u00f2 essere piuttosto fastidioso. Si tratta di un ritardo tra un&#8217;operazione sul primario e l&#8217;applicazione di tale operazione dall&#8217;oplog al secondario. Se la vostra azienda ha a che fare con set di dati di grandi dimensioni, il ritardo \u00e8 previsto entro una certa soglia. Tuttavia, a volte anche fattori esterni possono contribuire ad aumentare il ritardo. Per beneficiare di una replica aggiornata, verificate che:<\/p>\n<ol>\n<li>Il traffico di rete sia instradato con una larghezza di banda stabile e sufficiente. La latenza della rete gioca un ruolo fondamentale nell&#8217;influenzare la replica e se la rete non \u00e8 sufficiente a soddisfare le esigenze del processo di replica, si verificheranno ritardi nella replica dei dati in tutto il replica set.<\/li>\n<li>La velocit\u00e0 del disco \u00e8 sufficiente. Se il file system e il dispositivo su disco del secondario non sono in grado di riversare i dati su disco con la stessa velocit\u00e0 del primario, il secondario avr\u00e0 difficolt\u00e0 a tenere il passo. Di conseguenza, i nodi secondari elaborano le query di scrittura pi\u00f9 lentamente del nodo primario. Questo \u00e8 un problema comune nella maggior parte dei sistemi multi-tenant, comprese le istanze virtualizzate e le implementazioni su larga scala.<\/li>\n<li>Si richiede un riconoscimento di scrittura dopo un intervallo di tempo per dare la possibilit\u00e0 ai secondari di mettersi al passo con il primario, soprattutto quando si vuole eseguire un&#8217;operazione di carico massivo o di acquisizione di dati che richiede un gran numero di scritture sul primario. Le secondarie non saranno in grado di leggere l&#8217;oplog abbastanza velocemente per tenere il passo con le modifiche, soprattutto in caso di problemi di scrittura non riconosciuti.<\/li>\n<li>Identifica le attivit\u00e0 in background in esecuzione. Alcune attivit\u00e0 come i cron job, gli aggiornamenti del server e i controlli di sicurezza potrebbero avere effetti inaspettati sulla rete o sull&#8217;utilizzo del disco, causando ritardi nel processo di replicazione.<\/li>\n<\/ol>\n<p>Se non avete la certezza che la vostra applicazione abbia un ritardo nella replicazione, non preoccupatevi: nella prossima sezione vediamo le strategie di risoluzione dei problemi!<\/p>\n<h2>Risoluzione dei Problemi dei Replica Set MongoDB<\/h2>\n<p>Avete configurato con successo i vostri replica set, ma avete notato che i dati non sono coerenti tra i server. Si tratta di un problema molto preoccupante per le aziende di grandi dimensioni, tuttavia, grazie a rapidi metodi di <a href=\"https:\/\/kinsta.com\/it\/blog\/riparare-il-database-di-wordpress\/\">risoluzione dei problemi<\/a>, \u00e8 possibile trovare la causa o addirittura correggere il problema! Di seguito sono riportate alcune strategie comuni per la risoluzione dei problemi delle implementazioni dei replica set che potrebbero tornarvi utili:<\/p>\n<h3>Controllare lo Stato del Replica Set<\/h3>\n<p>Possiamo controllare lo stato attuale del replica set e lo stato di ogni membro eseguendo il seguente comando in una sessione mongosh connessa al primario del replica set.<\/p>\n<pre><code class=\"language-markdown\"> rs.status()<\/code><\/pre>\n<h3>Controllare il Ritardo della Replicazione<\/h3>\n<p>Come gi\u00e0 detto in precedenza, il ritardo di replicazione pu\u00f2 essere un problema serio perch\u00e9 rende i membri &#8220;in ritardo&#8221; non idonei a diventare rapidamente primari e aumenta la possibilit\u00e0 che le operazioni di lettura distribuite siano incoerenti. Possiamo verificare la lunghezza attuale del registro di replicazione usando il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">rs.printSecondaryReplicationInfo()<\/code><\/pre>\n<p>Questo restituisce il valore <code>syncedTo<\/code> che \u00e8 l&#8217;ora in cui l&#8217;ultima voce oplog \u00e8 stata scritta sul secondario per ogni membro. Ecco un esempio per dimostrarlo:<\/p>\n<pre><code class=\"language-markdown\">source: m1.example.net:27017\n\tsyncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n\t0 secs (0 hrs) behind the primary\nsource: m2.example.net:27017\n\tsyncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n\t0 secs (0 hrs) behind the primary<\/code><\/pre>\n<p>Un membro in ritardo pu\u00f2 essere visualizzato con 0 secondi di ritardo rispetto al primario quando il periodo di inattivit\u00e0 sul primario \u00e8 maggiore del valore <code> members[n].secondaryDelaySecs<\/code>.<\/p>\n<h3>Verifica le Connessioni tra Tutti i Membri<\/h3>\n<p>Ogni membro di un replica set deve essere in grado di connettersi con ogni altro membro. Verificate sempre le connessioni in entrambe le direzioni. Spesso le configurazioni dei firewall o le tipologie di rete impediscono la normale e necessaria connettivit\u00e0 e possono bloccare la replicazione.<\/p>\n<p>Per esempio, supponiamo che l&#8217;istanza di mongod si leghi sia a localhost che all&#8217;hostname &#8216;ExampleHostname&#8217;, associato all&#8217;indirizzo IP 198.41.110.1:<\/p>\n<pre><code class=\"language-markdown\">mongod --bind_ip localhost, ExampleHostname<\/code><\/pre>\n<p>Per connettersi a questa istanza, i client remoti devono specificare l&#8217;hostname o l&#8217;indirizzo IP:<\/p>\n<pre><code class=\"language-markdown\">mongosh --host ExampleHostname\nmongosh --host 198.41.110.1<\/code><\/pre>\n<p>Se un replica set \u00e8 composto da tre membri, m1, m2 e m3, e usa la porta predefinita 27017, dovete testare la connessione come segue:<\/p>\n<p><strong>Su m1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m2 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Su m2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Su m3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m2 --port 27017<\/code><\/pre>\n<p>Se una connessione in qualsiasi direzione fallisce, dovete controllare la configurazione del vostro <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-un-firewall\/\">firewall<\/a> e riconfigurarlo per consentire le connessioni.<\/p>\n<h2>Garantire Comunicazioni Sicure con l&#8217;Autenticazione dei Keyfile<\/h2>\n<p>Per impostazione predefinita, l&#8217;autenticazione keyfile in MongoDB si basa sul meccanismo di autenticazione salted challenge response (SCRAM). A tal fine, MongoDB deve leggere e convalidare le credenziali fornite dall&#8217;utente che includono una combinazione di nome utente, password e database di autenticazione di cui \u00e8 a conoscenza la specifica istanza di MongoDB. Questo \u00e8 l&#8217;esatto meccanismo utilizzato per autenticare gli utenti che forniscono una password quando si collegano al database.<\/p>\n<p>Quando abilitate l&#8217;autenticazione in MongoDB, il controllo dell&#8217;accesso basato sui ruoli (RBAC) viene automaticamente abilitato per il replica set e all&#8217;utente vengono assegnati uno o pi\u00f9 ruoli che determinano il suo accesso alle risorse del database. Quando il RBAC \u00e8 abilitato, significa che solo l&#8217;utente Mongo autenticato e valido con i privilegi appropriati potr\u00e0 accedere alle risorse del sistema.<\/p>\n<p>Il keyfile agisce come una password condivisa per ogni membro del cluster. Questo permette a ogni istanza di Mongo nel replica set di utilizzare il contenuto del keyfile come password condivisa per l&#8217;autenticazione degli altri membri dell&#8217;installazione.<\/p>\n<p>Solo le istanze mongod con il keyfile corretto possono unirsi al replica set. La lunghezza di una chiave deve essere compresa tra 6 e 1024 caratteri e pu\u00f2 contenere solo caratteri dell&#8217;insieme base64. Tenete presente che MongoDB elimina gli spazi bianchi durante la lettura delle chiavi.<\/p>\n<p>Potete <strong>generare un keyfile<\/strong> seguendo diversi metodi. In questo tutorial, usiamo <code>openssl <\/code> per generare una stringa complessa di 1024 caratteri casuali da usare come password condivisa. Usate poi <code>chmod<\/code> per modificare i permessi dei file in modo da fornire i permessi di lettura solo al proprietario del file. Evitate di memorizzare il keyfile su supporti di archiviazione che possono essere facilmente scollegati dall&#8217;hardware che ospita le istanze di mongod, come per esempio una chiavetta USB o un dispositivo di archiviazione collegato alla rete. Di seguito \u00e8 riportato il comando per generare un keyfile:<\/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>Successivamente, <strong>copiate il keyfile in ogni membro del replica set<\/strong>. Verificate che l&#8217;utente che gestisce le istanze mongod sia il proprietario del file e possa accedere al keyfile. Dopo aver fatto quanto sopra, <strong>spegnete tutti i membri del replica set<\/strong> a partire dai secondari. Una volta che tutti i secondari sono offline, potete procedere con lo spegnimento dei primari. \u00c8 fondamentale seguire questo ordine per evitare potenziali rollback. Ora chiudete l&#8217;istanza di mongod eseguendo il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">use admin\ndb.shutdownServer()<\/code><\/pre>\n<p>Dopo l&#8217;esecuzione del comando, tutti i membri del replica set saranno offline. Ora <strong> riavviate ogni membro del replica set con il controllo degli accessi abilitato<\/strong>.<\/p>\n<p>Per ogni membro del replica set, avviate l&#8217;istanza di mongod con l&#8217;impostazione del file di configurazione <code>security.keyFile<\/code> o con l&#8217;opzione della riga di comando <code>--keyFile<\/code>.<\/p>\n<p>Se usate un file di configurazione, impostate<\/p>\n<ul>\n<li>security.keyFile al percorso del file chiave e<\/li>\n<li>replication.replSetName il nome del replica set.<\/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>Avviate l&#8217;istanza di mongod usando il file di configurazione:<\/p>\n<pre><code class=\"language-markdown\">mongod --config &lt;path-to-config-file&gt;<\/code><\/pre>\n<p>Se state utilizzando le opzioni della riga di comando, avviate l&#8217;istanza mongod con le seguenti opzioni:<\/p>\n<ul>\n<li>&#8211;keyFile impostato sul percorso del keyfile e<\/li>\n<li>&#8211;replSet impostato sul nome del replica set.<\/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>Potete includere altre opzioni se necessarie per la vostra configurazione. Per esempio, se volete che i client remoti si connettano alla vostra installazione client o se i membri dell&#8217;installazione client sono eseguiti su host diversi, specificate il parametro &#8211;bind_ip. Per maggiori informazioni, leggete la pagina di documentazione <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\">Localhost Binding Compatibility Changes<\/a>.<\/p>\n<p>Successivamente, <strong>connettetevi a un membro del replica set tramite l&#8217;interfaccia localhost<\/strong>. Dovete eseguire mongosh sullo stesso computer fisico dell&#8217;istanza di mongod. Questa interfaccia \u00e8 disponibile solo quando non sono stati creati utenti per la distribuzione e si chiude automaticamente dopo la creazione del primo utente.<\/p>\n<p>Avviamo quindi il replica set. Da mongosh, eseguite il metodo <code>rs.initiate()<\/code>:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n\t_id: \"myReplSet\",\n\tmembers: [\n  \t{ _id: 0, host: \"mongo1:27017\" },\n  \t{ _id: 1, host: \"mongo2:27017\" },\n  \t{ _id: 2, host: \"mongo3:27017\" }\n\t]\n  }\n)<\/code><\/pre>\n<p>Come gi\u00e0 detto, questo metodo elegge uno dei membri come membro primario del replica set. Per individuare il membro primario, usate <code>rs.status()<\/code>. Collegatevi al membro primario prima di continuare.<\/p>\n<p>Ora <strong>create l&#8217;utente amministratore<\/strong>. Potete aggiungere un utente usando il metodo <code>db.createUser()<\/code>. Assicuratevi che l&#8217;utente abbia almeno il ruolo <code>userAdminAnyDatabase<\/code> nel database degli amministratori.<\/p>\n<p>L&#8217;esempio seguente crea l&#8217;utente &#8220;batman&#8221; con il ruolo <code>userAdminAnyDatabase<\/code> sul database dell&#8217;amministratore:<\/p>\n<pre><code class=\"language-markdown\">admin = db.getSiblingDB(\"admin\")\nadmin.createUser(\n  {\n\tuser: \"batman\",\n\tpwd: passwordPrompt(), \/\/ or cleartext password\n\troles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Quando vi viene richiesto, inserite la password creata in precedenza.<\/p>\n<p>Successivamente, dovete <strong>autenticarvi come utente amministratore<\/strong>. Per farlo, usate <code>db.auth()<\/code> per autenticarvi. Per esempio:<\/p>\n<p>db.getSiblingDB(&#8220;admin&#8221;).auth(&#8220;batman&#8221;, passwordPrompt()) \/\/ o password in chiaro<\/p>\n<p>In alternativa, potete connettere una nuova istanza di mongosh al membro primario del replica set usando i parametri <code>-u &lt;username&gt;<\/code>,<code> -p &lt;password&gt;<\/code> e <code>--authenticationDatabase<\/code>.<\/p>\n<pre><code class=\"language-markdown\">mongosh -u \"batman\" -p  --authenticationDatabase \"admin\"<\/code><\/pre>\n<p>Anche se non specificate la password nel campo della riga di comando <code>-p<\/code>, mongosh richiede la password.<\/p>\n<p>Infine, <strong>create l&#8217;amministratore del cluster<\/strong>. Il ruolo <code>clusterAdmin<\/code> consente l&#8217;accesso alle operazioni di replicazione, come la configurazione del replica set.<\/p>\n<p>Creiamo un utente amministratore del cluster e assegniamo il ruolo <code>clusterAdmin<\/code> nel database admin:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"admin\").createUser(\n  {\n\t\"user\": \"robin\",\n\t\"pwd\": passwordPrompt(), \t\/\/ or cleartext password\n\troles: [ { \"role\" : \"clusterAdmin\", \"db\" : \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Inserite la password quando vi viene richiesto.<\/p>\n<p>Se lo desiderate, potete creare altri utenti per consentire ai client di interagire con il replica set.<\/p>\n<p>E voil\u00e0! Avete abilitato correttamente l&#8217;autenticazione del keyfile!<\/p>\n\n<h2>Riepilogo<\/h2>\n<p>La replicazione \u00e8 un requisito essenziale quando si parla di database, soprattutto quando le aziende diventano sempre pi\u00f9 grandi. Migliora notevolmente le <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-apm\/\">prestazioni<\/a>, la sicurezza dei dati e la disponibilit\u00e0 del sistema. A proposito di prestazioni, \u00e8 fondamentale per il vostro database WordPress monitorare i problemi di performance e correggerli in tempo, per esempio con <a href=\"https:\/\/kinsta.com\/it\/strumento-apm\/\">Kinsta APM<\/a>, Jetpack e Freshping per citarne alcuni.<\/p>\n<p>La replicazione aiuta a garantire la protezione dei dati su pi\u00f9 server ed evita che i vostri server subiscano pesanti downtime (o peggio ancora che perdano del tutto i vostri dati). In questo articolo abbiamo illustrato la creazione di un replica set e alcuni consigli per la risoluzione dei problemi, oltre all&#8217;importanza della replicazione. Voi usate la replicazione di MongoDB per la vostra attivit\u00e0 e vi \u00e8 risultata utile? Fatecelo sapere nella sezione commenti qui sotto!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MongoDB \u00e8 un database NoSQL che usa documenti di tipo JSON con schemi dinamici. Quando si lavora con i database, \u00e8 sempre bene avere un piano &#8230;<\/p>\n","protected":false},"author":199,"featured_media":66978,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25883],"class_list":["post-66977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-strumenti-di-sviluppo-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>Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!\" \/>\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\/it\/blog\/mongodb-replica-set\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)\" \/>\n<meta property=\"og:description\" content=\"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-16T07:41:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-30T14:30:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)\",\"datePublished\":\"2023-03-16T07:41:11+00:00\",\"dateModified\":\"2023-08-30T14:30:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\"},\"wordCount\":5733,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\",\"name\":\"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg\",\"datePublished\":\"2023-03-16T07:41:11+00:00\",\"dateModified\":\"2023-08-30T14:30:01+00:00\",\"description\":\"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strumenti di Sviluppo Web\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi) - Kinsta\u00ae","description":"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!","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\/it\/blog\/mongodb-replica-set\/","og_locale":"it_IT","og_type":"article","og_title":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)","og_description":"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!","og_url":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-03-16T07:41:11+00:00","article_modified_time":"2023-08-30T14:30:01+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Jeremy Holcombe","Tempo di lettura stimato":"28 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)","datePublished":"2023-03-16T07:41:11+00:00","dateModified":"2023-08-30T14:30:01+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/"},"wordCount":5733,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/","url":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/","name":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","datePublished":"2023-03-16T07:41:11+00:00","dateModified":"2023-08-30T14:30:01+00:00","description":"Il replica set MongoDB \u00e8 un gruppo di istanze interconnesse che forniscono ridondanza e alta disponibilit\u00e0. Distribuisci i replica set e proteggi i tuoi dati!","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/03\/mongodb-replica-set.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-replica-set\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Strumenti di Sviluppo Web","item":"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/"},{"@type":"ListItem","position":3,"name":"Creare un Solido Replica Set di MongoDB in Tempo Record (4 Metodi)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/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\/it\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/66977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=66977"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/66977\/revisions"}],"predecessor-version":[{"id":72738,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/66977\/revisions\/72738"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/66977\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/66978"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=66977"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=66977"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=66977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}