Torna al blog

Come configurare la replica di MongoDB e il failover automatico

Come configurare la replica di MongoDB e il failover automatico

Un replica set è definito come un cluster di database composto da più nodi con replica e failover automatico configurati tra di essi. Per assicurarsi che il database PRIMARY sia eletto correttamente, è importante avere un numero dispari di membri nel set (incluso o escluso il nodo Arbiter ). 

Il database selezionato è responsabile di tutte le attività principali. Elabora le operazioni di scrittura in entrata e memorizza le relative informazioni nell'oplog. Queste informazioni possono essere consultate e replicate dai membri della replica SECONDARY per applicarle ai propri dataset. Di conseguenza, tutti i server del set rappresenteranno lo stesso contenuto e ne garantiranno la disponibilità:

How to Configure MongoDB Replication and Automated Failover 1-Replica set- graphic

Ora considera una situazione in cui un problema imprevisto (come un guasto hardware o di connessione) causa un periodo di inattività del database primario. In tal caso, il sistema avvierà automaticamente un nuovo processo di elezione per ripristinare il normale funzionamento senza richiedere alcun intervento manuale. Il vantaggio di un tale sistema è che si ottiene il meglio della replica, come una maggiore disponibilità, ridondanza di failover e disaster recovery, senza doversi preoccupare di gestire più database separatamente.

Se desideri utilizzare un sistema simile, questo tutorial ti mostrerà come configurare un replica set MongoDB con la PaaS di CloudSigma. Come vedrai in questa guida, utilizzeremo tre membri, il che è tipicamente sufficiente per fornire un buon margine di sicurezza delle informazioni e prestazioni per gestire le operazioni di I/O per la maggior parte delle applicazioni comuni. Insieme alla configurazione effettiva della replica, impareremo anche come preparare l'ambiente, impostare l'autenticazione tra i nodi del database e come verificare che il lavoro sia andato a buon fine.

Passo 1: Crea un nuovo ambiente

Per iniziare, avrai bisogno di almeno 3 nodi MongoDB per avviare la configurazione di un replica set. Quindi procedi e crea un nuovo ambiente come segue:

2-Create an Environment How to Configure MongoDB Replication and Automated Failover

Nel nostro esempio, stiamo allocando tutte le istanze MongoDB della versione 4.0.2 nello stesso ambiente. Puoi modificare il Nome dell'ambiente se necessario nello spazio fornito e continuare con il processo di installazione.

Il passo successivo del processo riguarderà la sicurezza della comunicazione tra questi nodi utilizzando il file della chiave di autenticazione.

Passo 2: Aggiungi un file della chiave di autenticazione

L'autenticazione è un componente critico di qualsiasi replica. Si tratta di un processo di garanzia della sicurezza che consente l'accesso a un membro del replica set solo dopo che si è identificato correttamente con un file di chiave di autenticazione univoco. Questo mantiene i tuoi dati al sicuro da sguardi indiscreti e terze parti. Ecco come puoi generare il tuo file di chiave di autenticazione:

  1. Fai clic sull'opzione Web SSH per uno dei nodi del database e accedi:

3- Web SSH How to Configure MongoDB Replication and Automated Failover

    2. Successivamente, puoi inserire il tuo file di chiave o generarne uno nuovo con openssl utilizzando il seguente comando:

In questo comando, 741 rappresenta la dimensione della chiave in byte e my.key è il nome della chiave.

    3. È il momento di distribuire il nuovo file di chiave su tutte le istanze di MongoDB. Ecco come fare:

  • Apri il File Manager facendo clic sul pulsante Config accanto a uno qualsiasi dei nodi del database:

4-Click on the Config

  • Individua il file my.key nella scheda di configurazione sotto il percorso: /home/jelastic/my.key. Aprilo e copia il contenuto del file:

5- configuration tab How to Configure MongoDB Replication and Automated Failover

  • Sotto il percorso /var/lib/jelastic/keys troverai la directory keys . Crea un Nuovo file che le istanze di MongoDB utilizzeranno per autenticare le rispettive identità. Nel nostro caso, creeremo un file chiamato mongo-set.key:

6-keys directory

  • Incolla il contenuto precedentemente copiato in questo file e applica le modifiche facendo clic su Save per tutte le istanze:

7-Paste the clipboard content

Come risultato di questo processo, il file mongo-set.key è stato distribuito su tutti i nostri nodi MongoDB.

Passo 3: Configura la replica di MongoDB

Ora che abbiamo garantito la sicurezza delle istanze, possiamo passare alla configurazione effettiva del replica set. Cominciamo:

  1. Inizia andando alla scheda di configurazione per i nodi MongoDB e aprendo il file mongo.conf nella cartella etc cartella. Scorri verso il basso fino a trovare la sezione replication. Decommentala e aggiungi la seguente stringa con un nome univoco per il tuo replica set. Per il nostro esempio, lo chiameremo db-replication:
      2. Successivamente, aggiungeremo un nuovo parametro chiamato keyFile nella sezione security. Questo servirà a specificare un percorso per il file chiave che si trova attualmente al percorso: /var/lib/jelastic/keys/mongo-set.key:

8-Add parameter keyFile

      3. Fai clic sul pulsante appropriato per Salvare le modifiche per tutte le istanze nella finestra dell'editor. 

      4. Ora devi Riavviare tutti i tuoi DB nodi per applicare i nuovi parametri di configurazione:

9-Restart your DB nodes How to Configure MongoDB Replication and Automated Failover

Una cosa da tenere a mente è che, una volta terminata la configurazione del replica set e riavviati tutti i nodi o il nodo PRIMARY, il processo di elezione del nuovo database PRIMARY inizierà durante il riavvio.

     5. Scegli il server MongoDB che desideri utilizzare come PRIMARY e accedivi utilizzando il protocollo SSH:

10-access the MongoDB server How to Configure MongoDB Replication and Automated Failover

Ricorda: una volta eletto il database PRIMARY, gli altri membri del replica set non saranno più accessibili per operazioni di scrittura diretta. Ciò significa che tutte le modifiche e le configurazioni possono essere eseguite e applicate solo al nodo PRIMARY corrente. Quindi, a meno che tu non abbia predisposto priorità, dovrai modificare la stringa di connessione nella tua applicazione verso il nuovo nodo PRIMARY.

     6. Successivamente, accedi al database replicato utilizzando le tue rispettive credenziali:

11-Access the database How to Configure MongoDB Replication and Automated Failover

In questo comando:

  • {user} –si riferisce al nome utente dell'amministratore che verrà inviato alla tua email (di solito è admin per impostazione predefinita).
  • {password} –questa è la password inviata alla tua email insieme al nome utente corrispondente.
  • {DB_name}- rappresenta il nome del database che desideri replicare in questo replica set (nel nostro esempio stiamo utilizzando admin predefinito).

In caso di nuova elezione, puoi utilizzare le stesse credenziali dell'utente admin per accedere a un nuovo database PRIMARY.

     7. Ora che la connessione è stata stabilita, dovrai eseguire le seguenti righe per definire i parametri per il nodo MongoDB corrente e avviare il replica set:

Nelle righe precedenti, sostituirai i valori tra parentesi con i tuoi dati corrispondenti:

  • {replica_set} – questo è il nome del tuo gruppo di database in replica che hai specificato all'inizio di questa sezione. Nel nostro caso, era db-replication.
  • {current_db_ip} – indica l'indirizzo IP del container del database che hai selezionato:

12-initiate your replica set How to Configure MongoDB Replication and Automated Failover

Nel nostro caso, le righe eseguite sono:

13-config

14-rs.initiate()

        8. Successivamente, esegui il seguente comando per tutti i database rimanenti:

Qui, {db_ip} si riferisce all'indirizzo IP di ciascun database:

15-rs.add(

       9. Una volta aggiunti tutti i membri della replica, otterrai un replica set completamente funzionante. Ti consigliamo di assicurarti che tutto sia stato configurato correttamente alla fine del processo. Per farlo, esegui il comando: rs.status(). Questo ti mostrerà le informazioni complete relative al tuo replica set, come segue:

16-execute the rs.status()

Passaggio 4: Configura l'Arbiter del ReplicaSet

Consigliamo di utilizzare un Arbiter nodo in determinati casi. Cos'è un Arbiter nodo? In genere, la replica è più affidabile se il replica set contiene un numero dispari di nodi. Quindi, se attualmente hai un numero pari di nodi nel tuo set, puoi aggiungere un Arbiter nodo per mantenere il quorum poiché risponde alle richieste di heartbeat ed elezione degli altri membri del set. Ecco alcuni dettagli su Arbiter nodi:

  • L'Arbiter non memorizza alcun dato; vota solo nelle elezioni nel caso in cui un altro nodo si sia guastato.
  • È molto leggero e non consuma troppe risorse.
  • Ha scambiato le credenziali utente tra repliche crittografate.
  • Per mantenere la massima disponibilità, prova a eseguire l'Arbiter su un nodo separato.

Ecco come puoi aggiungere un nodo Arbiter al tuo replica set:

  1. Per prima cosa, eseguiremo una scalabilità orizzontale e aggiungeremo un nodo extra al cluster:

17-ReplicaSet Arbiter

18-Scale out database cluster

2. Con il nodo aggiunto, abbiamo bisogno di un nuovo file di chiave. Vai alla directory keys e crea un file di chiave mongo-set.key. Copia il contenuto della chiave da uno qualsiasi dei nodi del database precedentemente configurati e incollalo qui come abbiamo fatto prima.

3. Vai al file di configurazione mongod.conf. Decommenta la sezione di replicazione e aggiungi repISetName (nel nostro caso è db-replication). Inoltre, vai alla sezione security e aggiungi il parametro keyFile ( /var/lib/jelastic/keys/mongo-set.key nel nostro caso).

4. Infine, riavvia il nuovo nodo per applicare questi nuovi parametri di configurazione:

19- Restart newly

È importante ricordare che a questo punto NON è necessario riavviare tutti i nodi del cluster. Riavvia solo il nodo Arbiter appena aggiunto. Il riavvio di tutti i nodi comporterà una nuova elezione del PRIMARY (a meno che tu non abbia specificato delle priorità per selezionare un particolare nodo del database come PRIMARY).

 5. Infine, l'Arbiter può essere aggiunto al replica set. Per farlo, esegui il seguente comando sul nodo PRIMARY:

Qui, {db_ip} è l'indirizzo IP del nuovo nodo:

20-IP address of a newly added node

 6. Ora puoi verificare se il nuovo nodo è diventato o meno l'Arbiter. Puoi farlo accedendo al nuovo nodo tramite SSH e connettendoti all'istanza MongoDB con le credenziali che hai ricevuto via email al momento della creazione del nodo:

21-connect MongoDB instance

Questo mostra che il nuovo nodo che abbiamo appena aggiunto al cluster sta agendo come Arbiter di db-replication. Questo garantisce un quorum in qualsiasi situazione, rendendo il replica set più affidabile.

Passo 5: Testare la disponibilità del cluster di database

Successivamente, possiamo configurare il nostro cluster MongoDB per connettersi ed eseguire operazioni da remoto. Nel seguente esempio, ci connetteremo ed eseguiremo alcuni comandi di controllo utilizzando una semplice applet PHP.

A tale scopo, avrai bisogno di un server applicativo, come Apache. Puoi aggiungerne uno al tuo ambiente come abbiamo fatto noi o crearne uno nuovo in un ambiente separato.

  1. Inizia cliccando su Modifica topologia dell'ambiente e aggiungendo il server:

22-Press Change Environment Topology

23-Press Change Environment Topology button

    2. Apri la scheda Configuration Manager per il server Apache cliccando sul pulsante Config come mostrato di seguito:

3. Individua e apri il file index.php nella directory /var/www/webroot/ROOT e incolla il seguente codice al posto del contenuto predefinito:

I seguenti valori nel codice sopra devono essere sostituiti con i rispettivi dati:

  • {replica_set_name} – inserisci il nome del tuo replica set.
  • {db_username} – aggiungi l'utente amministratore del database primario scelto (è admin per impostazione predefinita).
  • {db_password} – inserisci la password dell'utente amministratore.
  • {NodeID} – indica il numero di identificazione del nodo corrispondente. Puoi trovarlo sulla dashboard di CloudSigma PaaS.
  • {environment_domain} – aggiungi il dominio dell'ambiente. Puoi trovare anche questo sulla dashboard di CloudSigma PaaS:

Assicurati di specificare gli ID di ogni nodo nel tuo replica set nella sezione mongodbConnectionURI appropriata.

Inserendo i valori corrispondenti ed eseguendo il codice, verrà mostrato un insieme di stringhe simile a questo:

Assicurati di salvare il file a questo punto!

4. Affinché Apache possa interagire con il server MongoDB, è necessario un modulo speciale. Puoi aggiungere questo modulo all'interno di configs. Vai alla cartella etc e apri il php.ini file. Individua la sezione [mongodb] . Qui, tutto ciò che devi fare è rimuovere il punto e virgola prima della riga extension=mongodb.so per abilitare questa estensione:

      5. Applica le nuove configurazioni facendo clic su Salva nella finestra dell'editor. Come sempre, dobbiamo riavviare i nodi per applicare le modifiche. Fai clic sul pulsante Restart Nodes accanto a Application Server per farlo:

    6. Ora fai clic sul pulsante Open in Browser per provarlo:

Facendo clic su questa icona si aprirà una nuova scheda del browser che mostrerà tutte le informazioni sui membri/nodi del tuo replica set e sulla loro accessibilità in questo modo:

Poiché abbiamo utilizzato il comando ping (riga 6 del file index.php ), la prima riga mostra il risultato della verifica della disponibilità del replica set:

Questo significa che il replica set è stato testato con successo. 

Il blocco successivo nei risultati mostra informazioni dettagliate sugli host del replica set. Questi dati vengono acquisiti grazie alla funzione getServers (riga 11 del file index.php). Allo stesso modo, puoi anche verificare alcuni valori assegnati durante il processo di creazione di questo replica set:

  • host – l'indirizzo IP di un database specifico.
  • port – questa è la porta del membro di replica corrente.
  • [“is_primary”] e [“is_secondary”] – parametri che indicano lo stato del server. I valori corrispondenti per il server MongoDB primario scelto sono rispettivamente true, false e per gli altri due server MongoDB – false, true.

Inoltre, puoi avviare e arrestare i nodi del database in qualsiasi momento per monitorare le modifiche. Puoi anche aggiornare la pagina per fare lo stesso. Questo ti consente di assicurarti che il tuo cluster MongoDB sia sempre disponibile, attivo e funzionante come lo hai configurato.

CloudSigma PaaS consente ai suoi utenti di sfruttare i vantaggi dell'utilizzo dei replica set senza preoccuparsi troppo della configurazione e del lato back-end. Questo tutorial mostra come possa essere semplice configurare il proprio cluster MongoDB con pochi semplici passaggi. Puoi saperne di più su MongoDB, su come configurarlo per Ubuntu o server cloud pubblici, così come quali altre funzionalità avanzate ha da offrire CloudSigma PaaS. Ti invitiamo inoltre a fare una prova gratuita del PaaS per familiarizzare con la dashboard e il marketplace e con ciò che offrono. 

Prova il PaaS gratuitamente per 7 giorni

author

Preslav Dobrev

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.