Mongodb Single Node
In questo articolo vedremo come installare MongoDB in configurazione nodo singolo.
Pre-requisiti
- Una macchina con RHEL 9 o compatibile (es: Rocky Linux, Almalinux, …);
- XFS come file system per il disco dati;
- un’accesso con utente con privilegiato.
Mani in pasta
Di seguito i passaggi da seguire per essere pronti ad assorbire carichi di lavoro elevati.
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.
Aggiunta del Repository MongoDB
Configurare il repository MongoDB: crea un file ‘mongodb.repo’ in ‘/etc/yum.repos.d/’:
# tee /etc/yum.repos.d/mongodb.repo <<EOF [mongodb-org-7.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/7.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc EOF
Installare MongoDB: aggiorna il tuo sistema e installa MongoDB 7.0 con ‘yum’ o ‘dnf’
# dnf update -y # dnf install -y mongodb-org
Avviare MongoDB: abilita e avvia il servizio MongoDB
# systemctl enable --now mongod
Verificare l’installazione: controlla lo stato del servizio MongoDB per assicurarti che sia in esecuzione correttamente
# systemctl status mongod
Configurazione di Sicurezza
Creazione dell’utente amministratore: Accedi al prompt di MongoDB e crea un utente amministratore
# mongosh ... use admin db.createUser({ user: "admin", pwd: "password_sicura", roles: [{ role: "root", db: "admin" }] })
Modifica del file di configurazione (‘mongod.conf’): edita il file ‘/etc/mongod.conf’ per esporre il servizio e abilitare l’autenticazione
...
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: "enabled"
...
Riavviare MongoDB: per applicare le modifiche, riavvia il servizio
# systemctl restart mongod
Configurazione per la produzione
Configurazione del Firewall: se il firewall è attivo, apri la porta 27017 (o la porta configurata per MongoDB)
# firewall-cmd --add-port=27017/tcp --permanent # firewall-cmd --reload
Tuning del Sistema: modifica il file ‘/etc/sysctl.conf’ per migliorare le prestazioni, aggiungendo
vm.swappiness=1 fs.file-max=64000 net.ipv4.tcp_keepalive_time=300
Applica le modifiche con
sysctl -p
.
Disabilitare il THP
Disabilitare il Transparent Huge Pages (THP) può essere vantaggioso per il funzionamento di MongoDB. MongoDB e molte altri database non beneficiano del THP; anzi, può ridurre le prestazioni a causa del modo in cui gestiscono la memoria.
Il THP può migliorare le prestazioni per applicazioni che beneficiano dell’allocazione di grandi pagine di memoria. Tuttavia, MongoDB raccomanda di disabilitarlo poiché può causare problemi e incidere negativamente sulle prestazioni, inclusa una gestione meno efficiente della memoria e possibili rallentamenti.
Vediamo come fare.
Creiamo un servizio /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
e lo impostiamo per l’avvio automatico:
# systemctl daemon-reload && systemctl enable disable-thp.service
In alternativa è possibile modificare il boot
editiamo il file /etc/default/grub
cerchiamo la sezione GRUB_CMDLINE_LINUX e aggiungiamo in coda il parametro transparent_hugepage=never
es:
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 transparent_hugepage=never"
e aggiorniamo la configurazione di GRUB
legacy:
# grub2-mkconfig -o /boot/grub2/grub.cfg
EFI:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
NB: In entrambi i casi dobbiamo riavviare il server.
Per verificare che sia disattivato possiamo leggere il valore di transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
l’output deve essere [never].
Limiti
- Numero di file aperti: MongoDB mantiene molte connessioni di rete e file di dati aperti. Se il limite predefinito sul numero di file aperti (nofile) è troppo basso, MongoDB potrebbe non funzionare correttamente, portando a errori come “Too many open files”;
- numero di thread: MongoDB utilizza thread per gestire le connessioni in entrata. Se il limite sui thread (nproc) è troppo basso, potresti vedere degradazioni delle prestazioni o il rifiuto di nuove connessioni;
- dimensione della memoria stack: MongoDB potrebbe richiedere più memoria stack di quella predefinita, specialmente per operazioni complesse o in ambienti con carichi di lavoro elevati.
Come modificare i limiti per l’utente MongoDB
Per modificare i limiti, è necessario editare il file /etc/security/limits.conf o creare un file specifico per l’utente in /etc/security/limits.d/. Ecco come si potrebbe configurare:
editiamo il file /etc/security/limits.d/mongodb.conf
# Aggiungi le seguenti righe alla fine del file
mongodb soft nofile 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000
mongodb soft stack 16384
Cosa Impostare
- nofile: 64000 è un valore comunemente raccomandato per sistemi di produzione, ma potresti doverlo aumentare in base al tuo carico di lavoro specifico;
- nproc: simile a nofile, 64000 è un punto di partenza, ma valuta le tue esigenze specifiche;
- stack: 16384 (espresso in kilobyte) è un buon punto di partenza per la dimensione della memoria stack, ma potrebbe essere necessario regolarlo.
Considerazioni
- Testa le modifiche: prima di applicare questi cambiamenti in un ambiente di produzione, testali in uno di sviluppo o staging per assicurarti che non ci siano effetti collaterali indesiderati;
- monitoraggio post-modifica: dopo aver applicato le modifiche, monitora attentamente il sistema per verificare che le prestazioni migliorino senza introdurre problemi di stabilità o sicurezza.
In conclusione, modificare i limiti per l’utente mongodb può essere utile per ottimizzare le prestazioni e l’affidabilità di MongoDB, ma è importante valutare attentamente le esigenze specifiche del tuo ambiente e testare le modifiche prima di implementarle in produzione.
Backup e Monitoraggio
- Backup: implementa una strategia di backup regolare utilizzando mongodump o soluzioni di backup di terze parti;
- monitoraggio: utilizza strumenti come MongoDB Atlas, Munin, o Nagios per monitorare le prestazioni e la salute del tuo database.
Conclusione
Hai ora configurato MongoDB 7 su un sistema basato su RHEL 9, con un minimo di attenzione alla sicurezza, gestione degli utenti, e ottimizzazione per la produzione. Ricorda di testare sempre la tua configurazione in un ambiente di sviluppo prima di decidere di andare in produzione.
Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.
Risorse: