Avís
Aquest article és antic i és possible que part de la informació estigui desactualitzada o ja no sigui vàlida actualment.
Si tens qualsevol dubte o necessites confirmar algun detall, et recomanem contactar amb el nostre equip de suport per rebre informació actualitzada i assistència personalitzada.
MongoDB és un sistema de base de dades NoSQL de codi obert i orientat a documents que s'utilitza per emmagatzemar i recuperar grans volums de dades. Va ser desenvolupat per MongoDB Inc i fa servir documents similars a JSON amb esquemes opcionals en lloc de fer servir taules i files. MongoDB fa servir un conjunt de rèpliques per a la redundància i l'alta disponibilitat. Pots utilitzar un conjunt de rèpliques per distribuir les bases de dades entre molts nodes. El conjunt de rèpliques utilitza un node com a node mestre, responsable de les operacions d'escriptura, mentre que els altres són nodes client que fan operacions de lectura.
En aquest tutorial t'ensenyem com configurar un clúster MongoDB de tres nodes en un VPS amb Ubuntu 20.04.
Requisits previs
Tres servidors al núvol que executin Ubuntu 20.04 per configurar el clúster MongoDB.
Configura el fitxer Host
Primer, necessitaràs configurar el fitxer host a cada node per executar la resolució de noms d'amfitrió a cada node.
Edita el fitxer /etc/hosts a cada node:
# nano /etc/hostsAfegeix les línies següents:
master-ip-address masternode
client1-ip-address client1
client2-ip-address client2Desa i tanca el fitxer quan hagis acabat.
Instal·la MongoDB
A continuació, necessitaràs instal·lar el paquet de servidor MongoDB a tots els nodes.
Primer, instal·la les dependències requerides utilitzant l'ordre següent:
# apt install apt-transport-https software-properties-common gnupg2 dirmngr -yDesprés d'instal·lar totes les dependències, afegeix el repositori MongoDB amb l'ordre següent:
# wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -
# add-apt-repository 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse'Un cop afegit el repositori, actualitza'l amb l'ordre següent:
# apt update -yA continuació, instal·la el paquet de servidor MongoDB amb l'ordre següent:
# apt install mongodb-org -yDesprés d'instal·lar MongoDB, inicia el servei MongoDB i habilita'l perquè s'iniciï quan es reiniciï el sistema:
# systemctl start mongod
# systemctl enable mongodCrea un usuari administratiu al node mestre
Per seguir, necessitaràs crear un usuari administratiu per autenticar MongoDb al node mestre.
Primer, connecta't a MongoDB fent servir l'ordre següent:
# mongoDesprés de connectar-te a l'intèrpret d'ordres de MongoDB, canvia la base de dades a admin:
use adminPer continuar, crea un usuari administratiu amb el nom admin i estableix-li una contrasenya:
db.createUser({user: "admin", pwd: "adminpassword", roles:[{role: "root", db: "admin"}]})Aquest és el resultat que hauries d'obtenir:
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
Per acabar, surt de l'intèrpret d'ordres de MongoDB amb l'ordre següent:
exitConfigura el node mestre
Ara necessitaràs crear una clau primària al node mestre i després, copiar-la a la resta de nodes.
Primer, crea una clau primària i estableix els permisos pertinents al node mestre:
# openssl rand -base64 756 > /mnt/keyfile
# chmod 400 /mnt/keyfile
# chown mongodb:mongodb /mnt/keyfileDesprés, copia el fitxer principal als nodes client:
# scp /mnt/keyfile root@client1:/mnt/
# scp /mnt/keyfile root@client2:/mnt/A continuació, edita el fitxer principal de configuració de MongoDB i defineix la rèplica, el fitxer de clau i l'adreça IP:
# nano /etc/mongod.confAfegeix o modifica les línies següents:
net:
port: 27017
bindIp: 127.0.0.1,master-ip-address
security:
keyFile: /mnt/keyfile
replication:
replSetName: "replica1"Desa i tanca el fitxer quan hagis acabat.
Configura els nodes restants
Ara hauràs d'editar el fitxer principal de configuració de MongoDB als nodes client1 i client2.
Al node client1, edita el fitxer mongod.conf:
# nano /etc/mongod.confAfegeix o modifica les línies següents:
net:
port: 27017
bindIp: 127.0.0.1,client1-ip-address
security:
keyFile: /mnt/keyfile
replication:
replSetName: "replica1"Desa el fitxer i estableix els permisos necessaris al fitxer de clau.
# chmod 400 /mnt/keyfile
# chown mongodb:mongodb /mnt/keyfileAl node client2, edita el fitxer mongod.conf:
# nano /etc/mongod.confAfegeix o modifica les línies següents:
net:
port: 27017
bindIp: 127.0.0.1,client2-ip-address
security:
keyFile: /mnt/keyfile
replication:
replSetName: "replica1"Desa el fitxer i després estableix els permisos necessaris per al fitxer principal:
# chmod 400 /mnt/keyfile
# chown mongodb:mongodb /mnt/keyfileA continuació, necessitaràs reiniciar el servei MongoDB a tots els nodes, un per un. Pots fer-ho amb l'ordre següent:
# systemctl restart mongodInicia el conjunt de rèpliques
Ara necessitaràs iniciar el conjunt de rèpliques al node mestre.
Per fer-ho, primer connecta't a MongoDB amb l'ordre següent:
# mongo -u admin -p --authenticationDatabase adminUn cop hagis iniciat la sessió, executa l'ordre següent per iniciar el conjunt de rèpliques:
> rs.initiate()Aquest és el resultat que hauries d'obtenir:
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "master-address:27017",
"ok" : 1
}
Per al pas següent, surt de l'intèrpret d'ordres de MongoDB, espera una estona i després torna a iniciar la sessió amb l'ordre següent:
# mongo -u admin -p --authenticationDatabase adminPer continuar, afegeix el node client1 com a membre amb l'ordre següent:
replica1:PRIMARY> rs.add("client1")Aquest és el resultat que hauries de veure:
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1625489476, 1),
"signature" : {
"hash" : BinData(0,"Igm6kb044jADRUx+qaU0q5iKZX4="),
"keyId" : NumberLong("6981423727095316484")
}
},
"operationTime" : Timestamp(1625489476, 1)
}
Per continuar, afegeix el node client2 com a membre amb l'ordre següent:
replica1:PRIMARY> rs.add("client2")Ara comprova l'estat de tots els nodes amb l'ordre següent:
> rs.status()Verifica la rèplica
A continuació, necessitaràs verificar si la rèplica entre tots els nodes funciona o no.
Per fer-ho, crea una base de dades i afegeix-hi uns valors al node mestre:
# mongo -u admin -p --authenticationDatabase admin
replica1:PRIMARY> use mydb
replica1:PRIMARY> for (var i = 0; i <= 10; i++) db.myCollection.insert( { x : i } )Al pas següent, executa l'ordre següent per verificar la base de dades:
replica1:PRIMARY> show dbsAquest és el resultat que hauries d'obtenir:
admin 0.000GB
config 0.000GB
mydb 0.000GB
local 0.000GB
Per continuar, ves al node client1 i inicia la sessió a MongoDB amb l'ordre següent:
# mongo -u admin -p --authenticationDatabase adminDesprés d'iniciar la sessió, habilita les operacions de lectura del membre secundari per a cada connexió utilitzant l'ordre següent:
replica1:SECONDARY> db.getMongo().setSecondaryOk()Després, canvia la base de dades a mydb i comprova tots els documents amb l'ordre següent:
replica1:SECONDARY> use mydb
replica1:SECONDARY> db.myCollection.find()Hauries de veure tots els documents creats al node mestre amb el resultat següent:
{ "_id" : ObjectId("60e300746d386a637d52b9f1"), "x" : 0 }
{ "_id" : ObjectId("60e300746d386a637d52b9f2"), "x" : 1 }
{ "_id" : ObjectId("60e300746d386a637d52b9fa"), "x" : 9 }
{ "_id" : ObjectId("60e300746d386a637d52b9f7"), "x" : 6 }
{ "_id" : ObjectId("60e300746d386a637d52b9fb"), "x" : 10 }
{ "_id" : ObjectId("60e300746d386a637d52b9f8"), "x" : 7 }
{ "_id" : ObjectId("60e300746d386a637d52b9f3"), "x" : 2 }
{ "_id" : ObjectId("60e300746d386a637d52b9f9"), "x" : 8 }
{ "_id" : ObjectId("60e300746d386a637d52b9f6"), "x" : 5 }
{ "_id" : ObjectId("60e300746d386a637d52b9f4"), "x" : 3 }
{ "_id" : ObjectId("60e300746d386a637d52b9f5"), "x" : 4 }
Conclusió
Esperem que ara tinguis més coneixements sobre el clúster de MongoDB.
També pots afegir més clients al clúster en funció de les teves necessitats.