Il clustering di database spesso implica la configurazione e il mantenimento di un numero di server e istanze, tutti con uno scopo collettivo. Con questo intendiamo che puoi avere server di database diversi su host diversi che servono gli stessi dati.
Ad esempio, supponiamo che tu abbia i server A, B, C e D, decidi di installare MongoDB su ciascuno, ma poi ti rendi conto che c'è una nuova versione che avresti dovuto usare. Quando hai un gran numero di server e devi aggiornare la versione di MongoDB, configurarli manualmente (uno per uno) ha molte battute d'arresto. Queste battute d'arresto possono includere; impiegando troppo tempo per la riconfigurazione (quindi il tuo sito avrà un lungo tempo di inattività) o rendendo il tuo DB soggetto ad alcuni errori di configurazione.
Inoltre, ci sono sempre attività ripetitive che vorresti venissero eseguite automaticamente, invece di subire gli stessi passaggi più e più volte, ogni volta che vuoi apportare modifiche simili. Ad un certo punto dobbiamo anche imparare nuovi moduli per quanto riguarda il progresso tecnologico che possono aiutarci a migliorare le prestazioni del cluster
In parole povere, abbiamo bisogno di un sistema di automazione che possa alleggerire tutti gli impegni citati. Puppet è uno dei sistemi software preferiti per raggiungere questo obiettivo poiché:
- È facile e veloce configurare e distribuire il cluster MongoDB.
- Le attività ripetitive possono essere facilmente automatizzate in modo tale da essere eseguite automaticamente in un secondo momento.
- L'intera infrastruttura del cluster può essere gestita collettivamente da un'unica piattaforma.
- Provisioning semplice per nuovi nodi in ambiente cloud, ibrido o fisico.
- Orchestra modifiche ed eventi in un cluster di nodi.
- Scopri in pochi minuti risorse che possono aiutarti a svolgere facilmente diverse attività.
- Scala bene da 1 a 200.000 nodi.
- Supportato da numerose piattaforme
Cos'è Puppet?
Puppet è un linguaggio che viene utilizzato per portare una macchina allo stato desiderato o meglio è un motore che viene utilizzato per interpretare e applicare alcune istruzioni definite a un sistema di servizio. Come Ansible, Puppet è anche uno strumento di gestione della configurazione utilizzato per automatizzare ed eseguire attività di cluster di database. Tuttavia, è più avanzato e consolidato considerando che è il più vecchio, quindi ricco di nuove funzionalità integrate che lo renderebbero più sofisticato degli altri. Uno dei motivi principali per cui preferisco Puppet personalmente è la capacità che mi dà di configurare un gran numero di nodi collegati tra loro con bilanciatori di carico, dispositivi di rete o firewall. Puppet viene spesso utilizzato nelle grandi aziende con ambienti complessi.
Come funziona il burattino
Puppet utilizza la tecnica dell'idempotenza che lo aiuta a gestire una determinata macchina dal momento della creazione e durante tutto il suo ciclo di vita anche con modifiche alla configurazione. Il vantaggio principale di questo è che la macchina viene aggiornata nel corso di un certo numero di anni anziché essere costruita più volte da zero. In caso di aggiornamento, Puppet controlla lo stato attuale della macchina di destinazione e le modifiche verranno applicate solo in caso di modifica specifica nella configurazione.
Idempotenza
Il flusso di lavoro dell'idempotenza è mostrato di seguito:
Il burattinaio raccoglie i dettagli relativi allo stato corrente della macchina di destinazione e lo confronta con i dettagli di configurazione a livello di macchina, quindi restituisce i dettagli che vengono inviati al livello di conversione.
Il livello di conversione confronta la configurazione recuperata con i dettagli di configurazione appena definiti e quindi crea un catalogo che viene inviato agli agent Puppet di destinazione, in questo caso i nodi di destinazione per i quali devono essere applicate le modifiche.
Le modifiche alla configurazione vengono quindi applicate al sistema per trasformarlo nello stato desiderato. Dopo che le modifiche sono state implementate, l'agente Puppet invia un rapporto al Puppet master che è documentato per definire il nuovo stato del sistema come catalogo fornito.
Componenti di base del burattino
-
Risorse per i burattini
Questi sono i componenti chiave della modellazione di una macchina particolare le cui descrizioni porteranno la macchina allo stato desiderato.
-
Fornitori
I provider sono risorse particolari utilizzate per aggiungere pacchetti al sistema, ad es. yum e apt-get. Ci sono provider predefiniti ma se ne possono aggiungere altri quando si ha bisogno di alcuni pacchetti.
-
Manifesto
Questa è una raccolta di risorse che sono definite in una funzione o in una classe accoppiate insieme per configurare un sistema di destinazione.
La struttura dovrebbe essere
resource:{‘module’: attribute => value }
Ad esempio installando mongodb possiamo avere un file manifest chiamato Mongodb.pp con i seguenti contenuti:
package {‘mongodb’: ensure => installed }
-
Moduli
Questo è l'elemento chiave di Puppet, che è fondamentalmente una raccolta di risorse, modelli e file. Possono essere distribuiti in qualsiasi sistema operativo quindi possono essere utilizzati più volte con la stessa configurazione.
-
Modelli
I modelli vengono utilizzati per definire il contenuto personalizzato e l'input variabile. Usano la sintassi di Ruby, cioè se vuoi definire una porta da ascoltare:
Listen <% [email protected]_number %>
La variabile Port_number in questo caso è definita nel manifest che fa riferimento a questo modello.
-
File statici
Si tratta di file generali che potrebbero essere necessari per eseguire attività specifiche. Si trovano nella directory dei file di qualsiasi modulo.
Installazione pupazzi
Ai fini dell'apprendimento, installeremo e configureremo il pupazzo in una macchina virtuale che creeremo nella nostra macchina locale. Prima di tutto dovrai installare virtualbox e vagrant. Dopo l'installazione, apri un nuovo terminale e crea una directory Puppet probabilmente sul desktop ed esegui il comando $ vagrant init. Questo creerà una macchina virtuale e la etichetterà come vagabondo. Quindi possiamo accedere a questa macchina con il comando $ vagrant ssh.
Se ottieni una schermata come quella qui sotto, la tua macchina è attiva e funzionante.
Altrimenti se sei su una macchina server puoi ignorare questo passaggio e procedere dall'aggiunta del pacchetto pupazzo come di seguito.
Aggiungi il pacchetto di pupazzi con il comando
$ wget https://apt.puppetlabs.com/puppet5-release-xenial.deb
Quindi decomprimi il pacchetto e installa con
$ sudo dpkg -i puppet5-release-xenial.deb
Abbiamo bisogno di aggiornare i nostri repository in modo da eseguire
$ sudo apt-get update
Installa l'agente pupazzo eseguendo
$ sudo apt-get install puppet-agent
Al termine dell'installazione possiamo confermare controllando la versione. Potrebbe essere necessario disconnettersi dalla macchina virtuale per aggiungere il percorso Puppet all'ambiente, quindi eseguire $ puppet --version o, se non si è disconnessi, eseguire $ /opt/puppetlabs/bin/puppet --version. Se ottieni un numero di versione come 5.5.14, l'installazione è riuscita.
Dopo aver installato MongoDB utilizzando Mongodb.pp che abbiamo creato sopra, possiamo semplicemente scrivere alcune attività per configurare un prodotto di database e anche aggiungere un utente a questo db.
'Mongodb_database' viene utilizzato per creare e gestire database all'interno di MongoDB
mongodb_database{‘products’:
ensure => present,
tries => 10
}
'Mongodb_user può essere utilizzato per creare e gestire utenti all'interno di un database MongoDB.'
Per aggiungere un utente al database "prodotti"
mongodb_user {userprod:
username => ‘prodUser’,
ensure => present,
password_hash => mongodb_password(‘prodUser’, ‘passProdser’),
database => prodUser,
roles => [‘readWrite’, ‘dbAdmin’],
tries => 10
}
Conclusione
In questo blog abbiamo appreso cos'è Puppet, i meriti ad esso associati e la sua architettura di funzionamento. Puppet è un po' più complesso rispetto agli altri strumenti di gestione (come Chef e Ansible) ma ha molti moduli che possono essere utilizzati per risolvere i problemi relativi alla gestione del database. Nella parte successiva, discuteremo come connettere macchine remote in modo che possano essere riconfigurate utilizzando i file manifest definiti.