Perché usare docker?

  • E’ molto veloce per lo sviluppo/test locale
  • E’ facile condividere le immagini Docker all’interno del team
  • I container possono essere condivisi anche all’esterno del team attraverso il Dockerfile
  • Garantisce il massimo isolamento dei processi senza dover creare una macchina virtuale per ogni servizio
  • E’ la soluzione ideale per testare in locale architetture con più host che interagiscono via rete

Docker: una piattaforma per gestire container

 

Con docker si possono creare, avviare e distruggere container di applicazioni alla velocità della luce. Moltissime sono le immagini già pronte all’uso rilasciate dalla community, tra le quali quella di MaxScale.

 

Per il nostro test abbiamo scelto di usare questi tre container:

  1. MaxScale: in versione beta (Dockerfile)
  2. MariaDB: versione 10.0 (Dockerfile)
  3. MySQL: versione 5.1 (Dockerfile)

 

Docker è una scelta vincente per questo tipo di sperimentazione: possiamo creare un application container e lanciare le nostre applicazioni utilizzando un semplice file chiamato Dockerfile. In pochi secondi è possibile avere a disposizione tutti i database MySQL/MariaDB necessari ad effetuare i test. Da riga di comando o utilizzando le API di docker è possibile creare e distruggere container con MaxScale, MariaDB e MySQL.

 

Per automatizzare la creazione dell’infrastruttura abbiamo scelto di utilizzare Vagrant: un sistema agile che permette di creare e configurare infrastrutture di sviluppo riproducibili e portabili.

Vagrant: creare ambienti di sviluppo velocemente

 

Vagrant è uno strumento open source per la gestione di ambienti di sviluppo attraverso l’utilizzo di diversi provider tra cui VirtualBox e Docker. Attraverso il Vagrantfile è possibile definire l’infrastruttura del sistema e come accade già in Docker, crearla e distruggerla attraverso dei semplicissimi comandi da riga di comando. Nel nostro test abbiamo scelto il Docker Provider per definire i container utilizzati e i collegamenti tra di essi.

 

E’ possibile definire due tipi di collegamenti:

  • volumes-from: per collegare il volume ad un container dedicato allo storage
  • link: per permettere ad un container di vederne un altro

 

A questo punto abbiamo creato una configurazione molto simile a quella di produzione composta da:

  • Un container MySQL 5.1 che corrisponde al database utilizzato per le installazioni di Joomla! 1.5.x
  • Un container MariaDB 10.0 impostato come MASTER
  • Un container MariaDB 10.0 impostato come SLAVE, collegato al MASTER
  • Un container MaxScale che riesce a raggiungere tutti i database.

 

Il prossimo passaggio prevede configurazione di MaxScale su questa infrastruttura.

 

MaxScale: un proxy per database MySQL e MariaDB

 

Parte del nostro test consisteva nell’usare MaxScale come proxy per inviare il traffico al database con MySQL 5.1 e copiare tutte le query sui database MariaDB per analizzare il traffico e verificare il corretto comportamento del Read/Write Split router.

 

Il container con MySQL 5.1 è stato utilizzato per testare il funzionamento del filter di MaxScale e controllare il rewrite TYPE nella CREATE TABLE:

 

Es. query accettata in MySQL 5.1:

 

CREATE TABLE Person (id int, name varchar(255)) TYPE=MyISAM;

 

Es. query dalla versione MySQL/MariaDB 5.5 in poi:

 

CREATE TABLE Person (id int, name varchar(255)) ENGINE=MyISAM;

 

Abbiamo configurato quindi MaxScale in questo modo:

  • Un Listener in ascolto /var/lib/mysql/mysql.sock e sulla porta 3306
  • Router: il traffico che arriva dal listener viene indirizzato al router principale
    • Il traffico mandato al server MySQL 5.1 senza nessuna modifica
    • Il traffico viene copiato al Read/Write split router
  • Il Read/Write split router si occupa di separare le query in sola lettura da quelle in scrittura. Prima di mandarle ai server MariaDB Master/Slave le query vengono passate tramite il CreateTableFilter
  • Il CreateTableFilter che modifica le query CREATE TABLE che contengono il parametro TYPE al posto di ENGINE
  • Un Monitor per ogni server di backend in modo da permettere a MaxScale di conoscere costantemente la situazione e lo stato della replicazione.

 

La condivisione tra più team di sviluppo

 

Grazie a Docker e Vagrant è stato possibile condividere un l’articolata infrastruttura non solo all’interno del nostro team di sviluppo, ma anche all’esterno con il team di MariaDB MaxScale.

Nel prossimo articolo vi spiegherò come è stato possibile portare in produzione questa configurazione minimizzando il tempo di downtime delle macchine a qualche minuto.


Corso Svizzera 185 - 10149 - Torino
800 943 944
[email protected]