DatabaseGNU/Linux

Scenario: MongoDb cluster con repliche attive e funzionanti.

Supponiamo di avere dei certificati con valori DN che contengono "OU=OldDipartimento,O=OldOrganizzazione" e che dobbiamo aggiornare i nostri certificati

Nel file di configurazione di mongodb abbiamo un qualcosa del genere:

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "<path>/<VecchioCertificatoServer1>.pem"
net.tls.CAFile: "<path>/<certificatoCA>.pem"
net.tls.clusterFile:  "<path>/<VecchiocertificatoCluster>.pem"
net.tls.clusterCAFile: "<path>/<certificatoCA>.pem"

security:
    #  se si usano certificati validi, si puo' autenticare il cluster tramite 
    #  certificati x509 decommentando la voce clusterAuthMode
    #clusterAuthMode: x509

    #  qualora si usino certificati autogenerati e firmati, 
    #  usare le chiavi di autenticazione:
    authorization: enabled
    keyFile:  <path>/<nomeChiaveAuth.key>

Per generare una chiave da usare vedere il seguente LINK

Loggarsi sui vari nodi del cluster ed eseguire il seguente comando con i valori DN del nuovo certificato in modo da evitare di floodare i log in fase di riavvio del nodo:

db.adminCommand( { setParameter: 1, tlsX509ClusterAuthDNOverride: "OU=NUOVOdipart,O=NUOVAorganiz" } )

In ogni nodo, modificare il file mongo.conf con i nuovi valori

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "<path>/<nuovo-certificato-server1>.pem"
net.tls.CAFile: "<path>/<certificatoCA>.pem"
net.tls.clusterFile:  "<path>/<NuovoCertificatoCluster>.pem"
net.tls.clusterCAFile: "<path>/<certificatoCA>.pem"
setParameter:
    tlsX509ClusterAuthDNOverride: "OU=NUOVOdipart,O=NUOVAorganiz"

Adesso dobbiamo riavviare ogni singolo nodo partendo dagli SLAVE per poi arrivare al MASTER come ultimo.

Una volta loggati al nodo, assicurarsi che il nodo sia un secondario (slave), oltre al prompt che ce lo indica, possiamo usare il comando:

db.runCommand("ismaster") #premere invio

che ritornerĂ  dei valori tipo:

"ismaster" : false,
"secondary" : true,

nel nodo slave dare i seguenti comandi per spegnere il nodo use admin db.shutdownServer() quit()

Far ripartire mongo con i comandi specifici per l'host. Su Debian/Ubuntu:

sudo systemctl restart mongo.service

ATTENZIONE!!!! Riavviare prima gli slave, uno alla volta e controllare che ripartano prima di spegnere gli altri ;-)

Per il nodo primario, per prima cosa degradiamolo a secondario con il comando:

rs.stepDown()

e spengiamo il servizio come fatto in precedenza con gli altri slave:

use admin
db.shutdownServer()
quit()

ora riavviamolo e verifichiamo che torni su come slave

Se tutto ok, andiamo a togliere nel file di conf dei vari nodi il parametro:

setParameter:
    tlsX509ClusterAuthDNOverride: "OU=NUOVOdipart,O=NUOVAorganiz"

dopodiche riavviamo i nodi uno alla volta partendo sempre dagli slave.

No comments

The author does not allow comments to this entry