Marvin Pascale

[B.Log]

12 Marzo 2024

Mongodb Replicaset

MongoDB In questo articolo andremo a ripercorrere i passaggi per la creazione di un MongoDB replicaset a 3 nodi.

Mani in pasta: installazione e configurazione

Desidero ribadire che non mi assumo alcuna responsabilità per errori, danni o qualsiasi conseguenza derivante dall’uso delle informazioni fornite in questo articolo. L’uso delle informazioni fornite è a vostro rischio e pericolo. E’ sempre consigliabile avere un approccio cauto e informato, preferibilmente con il supporto di un professionista del settore.

Nel mondo dell’IT, l’evoluzione è una costante. Ciò che era nuovo e brillante ieri, oggi potrebbe essere considerato superato o, nella migliore delle ipotesi, un solido classico. MongoDB, uno dei database NoSQL leader nel settore, non fa eccezione. Proprio come nel mio articolo del 2021, oggi torno a parlare di MongoDB replicaset, con l’obiettivo di attualizzare la guida e proseguire il discorso iniziato con l'installazione single node per andare in produzione .

Perché un cluster replicaset?

Prima di addentrarci nei dettagli tecnici, ribadiamo il valore di un’architettura replicaset. La replica, in MongoDB, assicura alta disponibilità e resistenza ai guasti, distribuendo i dati su tutti i nodi. Questo non solo garantisce una continuità operativa in caso di malfunzionamento di un nodo ma permette anche un bilanciamento del carico e una lettura dei dati più efficiente.

Passo 1: Preparazione dell’ambiente

L’installazione di MongoDB e la configurazione di un cluster replicaset inizia con la preparazione dell’ambiente. Nel 2024, MongoDB supporta una vasta gamma di sistemi operativi, ma per questo articolo, ci concentreremo su GNU/Linux, sistema operativo consigliato per questo genere di infrastrutture. Assicurati di avere una versione recente di MongoDB installata; al momento della scrittura, la versione consigliata è MongoDB 7.x.

L’installazione può essere effettuata seguendo la documentazione, utilizzando i repository ufficiali oppure scaricando il pacchetto corretto direttamente dal sito. Non dimenticare di verificare le dipendenze necessarie e di configurare adeguatamente il tuo firewall e le impostazioni di sicurezza.

TIPS: Se non lo hai già fatto, ti consiglio di leggere l’articolo relativo all'installazione single node in quanto le considerazioni fatte sono valide anche per il replicaset. Puoi seguire la guida del single node (per 3 volte nel caso nostro caso) saltando la parte di creazione dell’utente e l’abilitazione dell’autenticazione perché le faremo dopo aver inizializzato il replicaset.

Chiave condivisa

Uno dei meccanismi più comodi per l’autenticazione tra i nodi è di certo quella chiave condivisa e per fortuna mongod (il demone di MongoDB) offre questo sistema di “riconoscimento”.

Per generare una chiave valida è sufficiente lanciare il comando su un nodo

# openssl rand -base64 756 > /etc/mongod.key

e copiare la chiave su tutti i nodi (nello stasso path) sui quali avvieremo mongod.

nb: la chiave deve avere permessi 600 ed essere assegnata a l’utente mongodb altrimenti il servizio mongod non si avvierà.

Passo 2: Configurazione del Replicaset

Una volta che MongoDB è installato su tutti i nodi che faranno parte del replicaset, è il momento di configurarlo. Iniziamo definendo il nostro replicaset nel file di configurazione di MongoDB (tipicamente situato in /etc/mongod.conf):

.....

security:
  keyFile: /etc/mongod.key

replication:
  replSetName: "pappappero"

....

Dopo aver modificato il file di configurazione, dovremmo riavviare il servizio mongod su tutti i nodi.

Ora siamo pronti per inizializare il replicaset tramite il shell di MongoDB:

mongosh
> rs.initiate( {
   _id : "pappappero",
   members: [
      { _id: 0, host: "nodo1:27017" },
      { _id: 1, host: "nodo2:27017" },
      { _id: 2, host: "nodo3:27017" }
   ]
})
pappappero:PRIMARY>

Assicurati di sostituire "nodoN" con l’indirizzo IP o il nome host (FQDN) effettivo dei tuoi nodi.

Passo 3: Utente amministratore

Terminata con successo l’inizializzazione abbiamo la possibilità di creare l’utente admin supremo.

NB: Non lasciamoci sfuggire questa opportunità perché se lasciassimo la sessione prima di creare l’utente resteremo chiusi fuori dal nostro replicaset.

pappappero:PRIMARY> use admin;
pappappero:PRIMARY> db.createUser({
  user: 'mongone',
  pwd: 'password_super_sicura',
  roles :
    [
      { role: "root", db: "admin" }
    ]
});

Per creare la nostra URI dobbiamo utilizzare questo schema: mongodb://[user]:[password]@[nodo1]:[porta],[nodo2]:[porta],[nodoN]:[porta]/[DB]?[parametri]

Nel nostro caso sarà:

*mongodb://mongone:password_super_sicura@nodo1:27017,nodo2:27017,nodo3:27017/?authSource=admin&replicaSet=pappappero*

Passo 4: Aggiunta di nodi al Replicaset (opzionale)

Con il replicaset inizializzato, possiamo ora aggiungere anche altri nodi al cluster:

> rs.add("nodo4:27017")
> rs.add("nodo5:27017")

Passo 5: gestione e manutenzione

Un aspetto cruciale, spesso sottovalutato, è la gestione e la manutenzione del cluster. MongoDB offre diversi strumenti e comandi per monitorare lo stato e le performance del replicaset. Utilizzare comandi come rs.status() e rs.conf() può aiutare a mantenere il cluster in salute.

In un prossimo articolo vedremo anche come effettuare dei backup consistenti del nostro replicaset con strumenti affidabili e opensource.

Considerazioni finali

L’installazione e la configurazione di un cluster MongoDB replicaset rimangono una pratica fondamentale per garantire l’affidabilità e la scalabilità delle applicazioni che si affidano a questo database. Nonostante le basi rimangano invariate, è fondamentale rimanere aggiornati con le ultime best practices e le nuove funzionalità offerte da MongoDB.

Spero che questo aggiornamento vi sia stato utile per navigare le acque sempre in movimento della tecnologia MongoDB. Come sempre, vi incoraggio a esplorare, sperimentare e, soprattutto, condividere le vostre scoperte con la comunità.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: