Sharding è un processo MongoDB per memorizzare set di dati su macchine diverse. Ti consente di eseguire una scalabilità orizzontale dei dati e di partizionare tutti i dati in istanze indipendenti. Lo sharding ti consente di aggiungere più macchine al tuo stack in base alla crescita dei dati.
Sharding e replica
Rendiamolo semplice. Quando hai raccolte di musica, "Sharding" salverà e manterrà le tue raccolte musicali in cartelle diverse su istanze diverse o set di repliche mentre "Replica" sta semplicemente sincronizzando le tue raccolte musicali con altre istanze.
Tre componenti di sharding
Shard - Utilizzato per memorizzare tutti i dati. E in un ambiente di produzione, ogni shard è set di repliche. Fornisce alta disponibilità e coerenza dei dati.
Configura server - Utilizzato per archiviare i metadati del cluster e contiene una mappatura del set di dati del cluster e degli shard. Questi dati vengono utilizzati da mongos/query server per fornire le operazioni. Si consiglia di utilizzare più di 3 istanze in produzione.
Router Mongos/Query - Si tratta solo di istanze mongo in esecuzione come interfacce dell'applicazione. L'applicazione invierà richieste all'istanza "mongos", quindi "mongos" consegnerà le richieste utilizzando la chiave shard ai set di repliche di shard.
Prerequisiti
- 2 server centOS 7 come set di repliche di configurazione
- 15.00.31 configsvr1
- 10.0.15.32 configsvr2
- 4 server CentOS 7 come set di repliche di frammenti
- 15.00.21 shardsvr1
- 15.10.22 shardsvr2
- 15.00.23 shardsvr3
- 15.00.24 shardsvr4
- 1 server CentOS 7 come mongos/Query Router
- 15.00.11 mongos
- Privilegi di root
- Ogni server connesso a un altro server
Passaggio 1 - Disattiva SELinux e configura gli host
In questo tutorial, disabiliteremo SELinux. Modifica la configurazione di SELinux da 'enforcing' a 'disabled'.
Connettiti a tutti i nodi tramite OpenSSH.
ssh [email protected]
Disabilita SELinux modificando il file di configurazione.
vim /etc/sysconfig/selinux
Modifica il valore di SELINUX in 'disabilitato'.
SELINUX=disabled
Salva ed esci.
Quindi, modifica il file hosts su ciascun server.
vim /etc/hosts
Incolla la seguente configurazione degli host:
10.0.15.31 configsvr1
10.0.15.32 configsvr2
10.0.15.11 mongos
10.0.15.21 shardsvr1
10.0.15.22 shardsvr2
10.0.15.23 shardsvr3
10.0.15.24 shardsvr4
Salva ed esci.
Ora riavvia tutti i server usando il comando di riavvio.
reboot
Passaggio 2:installa MongoDB su tutte le istanze
Utilizzeremo l'ultima versione di MongoDB (3.4) per tutte le istanze. Aggiungi un nuovo repository MongoDB eseguendo il comando seguente:
cat <<'EOF' >> /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF
Ora installa MongoDB 3.4 dal repository mongodb usando il seguente comando yum.
sudo yum -y install mongodb-org
Dopo aver installato mongodb, puoi utilizzare 'mongo ' o 'mongo comando '.
mongod --version
Passaggio 3:crea un set di repliche del server di configurazione
Nella sezione "prerequisiti", abbiamo già definito il server di configurazione con 2 macchine "configsvr1" e "configsvr2". E in questo passaggio, lo configureremo come un set di repliche.
Se è presente un servizio mongod in esecuzione sul server, interrompilo utilizzando il comando systemctl.
systemctl stop mongod
Modifica la configurazione predefinita di mongodb 'mongod.conf ' usando l'editor Vim.
vim /etc/mongod.conf
Cambia il percorso di archiviazione del DB nella tua directory. Useremo '/data/db1' per il primo server e la directory '/data/db2' per il secondo server di configurazione.
storage:
dbPath: /data/db1
Modifica il valore della riga 'bindIP' con il tuo indirizzo di rete interno - 'configsvr1' con indirizzo IP 10.0.15.31 e il secondo server con 10.0.15.32.
bindIP: 10.0.15.31
Nella sezione di replica, imposta un nome di replica.
replication:
replSetName: "replconfig01"
E nella sezione di partizionamento orizzontale, definisci un ruolo delle istanze. Useremo queste due istanze come 'configsvr'.
sharding:
clusterRole: configsvr
Salva ed esci.
Successivamente, dobbiamo creare una nuova directory per i dati MongoDB, quindi cambiare il proprietario di quella directory in utente 'mongod'.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Successivamente, avvia il servizio mongod con il comando seguente.
mongod --config /etc/mongod.conf
Puoi utilizzare il comando netstat per verificare se il servizio mongod è in esecuzione o meno sulla porta 27017.
netstat -plntu
Configsvr1 e Configsvr2 sono pronti per il set di repliche. Collegati al server 'configsvr1' e accedi alla shell mongo.
ssh [email protected]
mongo --host configsvr1 --port 27017
Avvia il nome del set di repliche con tutti i membri configsvr utilizzando la query seguente.
rs.initiate(
{
_id: "replconfig01",
configsvr: true,
members: [
{ _id : 0, host : "configsvr1:27017" },
{ _id : 1, host : "configsvr2:27017" }
]
}
)
Se ottieni un risultato "{ "ok" :1 } ', significa che configsvr è già configurato con il set di repliche.
e sarai in grado di vedere quale nodo è master e quale nodo è secondario.
rs.isMaster()
rs.status()
La configurazione di Config Server Replica Set è completata.
Passaggio 4:creazione dei set di repliche shard
In questo passaggio, configureremo 4 server "centos 7" come server "Shard" con 2 "Set di repliche".
- 2 server - 'shardsvr1 ' e 'shardsvr2 ' con il nome del set di repliche:'shardreplica01 '
- 2 server - 'shardsvr3 ' e 'shardsvr4 ' con il nome del set di repliche:'shardreplica02 '
Connettiti a ciascun server, interrompi il servizio mongod (se c'è un servizio in esecuzione) e modifica il file di configurazione di MongoDB.
systemctl stop mongod
vim /etc/mongod.conf
Cambia lo spazio di archiviazione predefinito nella tua directory specifica.
storage:
dbPath: /data/db1
Nella riga "bindIP", modifica il valore per utilizzare il tuo indirizzo di rete interno.
bindIP: 10.0.15.21
Nella sezione di replica, puoi utilizzare 'shardreplica01 ' per la prima e la seconda istanza. E usa 'shardreplica02 ' per il terzo e il quarto server shard.
replication:
replSetName: "shardreplica01"
Quindi, definisci il ruolo del server. Useremo tutto questo come istanze shardsvr.
sharding:
clusterRole: shardsvr
Salva ed esci.
Ora crea una nuova directory per i dati MongoDB.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Avvia il servizio mongod.
mongod --config /etc/mongod.conf
Verifica che MongoDB sia in esecuzione utilizzando il seguente comando:
netstat -plntu
Vedrai che MongoDB è in esecuzione sull'indirizzo di rete locale.
Quindi, crea un nuovo set di repliche per queste 2 istanze di shard. Collegati a 'shardsvr1' e accedi alla shell mongo.
ssh [email protected]
mongo --host shardsvr1 --port 27017
Avvia il set di repliche con il nome 'shardreplica01 ' e i membri sono 'shardsvr1 ' e 'shardsvr2 '.
rs.initiate(
{
_id : "shardreplica01",
members: [
{ _id : 0, host : "shardsvr1:27017" },
{ _id : 1, host : "shardsvr2:27017" }
]
}
)
Se non ci sono errori, vedrai i risultati come di seguito.
Risultati da shardsvr3 e shardsvr4 con il nome del set di repliche 'shardreplica02 '.
Ripeti questo passaggio per shardsvr3 e shardsvr4 server con nome del set di repliche diverso 'shardreplica02 '.
Ora abbiamo creato 2 set di repliche: 'shardreplica01 ' e 'shardreplica02 ' - come il frammento.
Passaggio 5 - Configura mongos/Query Router
Il "Query Router" o mongos sono solo istanze che eseguono "mongos". Puoi eseguire mongos con il file di configurazione o eseguirlo solo con una riga di comando.
Accedi al server mongos e interrompi il servizio MongoDB.
ssh [email protected]
systemctl stop mongod
Esegui mongos con la riga di comando come mostrato di seguito.
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
Utilizzare l'opzione '--configdb' per definire il server di configurazione. Se sei in produzione, usa almeno 3 server di configurazione.
Dovresti vedere risultati simili ai seguenti.
Successfully connected to configsvr1:27017
Successfully connected to configsvr2:27017
le istanze mongos sono in esecuzione.
Passaggio 6:aggiungi shard a mongos/Query Router
Apri un'altra shell del passaggio precedente, connettiti nuovamente al server mongos e accedi alla shell mongo.
ssh [email protected]
mongo --host mongos --port 27017
Aggiungi shard server con la query sh mongodb.
Per 'shardreplica01 ' istanze:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
Per 'shardreplica02 ' istanze:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
Assicurati che non ci siano errori e controlla lo stato dello shard.
sh.status()
Vedrai lo stato di partizionamento orizzontale in modo simile a quello mostrato nella schermata seguente.
Abbiamo 2 set di repliche di frammenti e 1 istanza mongos in esecuzione nel nostro stack.
Fase 7 - Test
Per testare la configurazione, accedi alla shell mongos del server mongos.
ssh [email protected]
mongo --host mongos --port 27017
Abilita lo sharding per un database
Crea un nuovo database e abilita il partizionamento orizzontale per il nuovo database.
use lemp
sh.enableSharding("lemp")
sh.status()
Ora guarda lo stato del database, è stato partizionato nel set di repliche 'shardreplica01'.
Abilita partizionamento orizzontale per le raccolte
Successivamente, aggiungi nuove raccolte al database con il supporto del partizionamento orizzontale. Aggiungeremo una nuova raccolta denominata "stack" con la raccolta di shard "nome", quindi vedremo lo stato del database e delle raccolte.
sh.shardCollection("lemp.stack", {"name":1})
sh.status()
Sono state aggiunte nuove raccolte 'stack' con shard collection 'name'.
Aggiungi documenti alla "pila" delle raccolte.
Ora inserisci i documenti nelle raccolte. Quando aggiungiamo documenti alla raccolta su un cluster partizionato, dobbiamo includere la "chiave shard".
Nell'esempio seguente, utilizziamo la chiave shard 'nome ', come abbiamo aggiunto quando si abilita il partizionamento orizzontale per le raccolte.
db.stack.save({
"name": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})
Come mostrato negli screenshot seguenti, i documenti sono stati aggiunti con successo alla raccolta.
Se desideri testare il database, puoi connetterti al set di repliche 'shardreplica01 ' PRIMARY server e apri la shell mongo. Sto accedendo al server PRIMARIO 'shardsvr2'.
ssh [email protected]
mongo --host shardsvr2 --port 27017
Verifica il database disponibile sul set di repliche.
show dbs
use lemp
db.stack.find()
Vedrai che il database, le raccolte e i documenti sono disponibili nel set di repliche.
MongoDB Sharded Cluster su CentOS 7 è stato installato e distribuito correttamente.