La realizzazione del sistema ha presentato due difficoltà differenti:
La prima difficoltà è stata risolta strutturando le regole in modo modulare, mentre la seconda è stata affrontata in modo originale, utilizzando dei server virtuali nelle varie reti dotati di un servizio Jenkins. I vari flussi di traffico corrispondevano ciascuno ad un diverso test in esecuzione sui server Jenkins, in modo che ad ogni funzionalità richiesta corrispondesse un modo canonico di verificarla. La rete di test ha permesso di passare dalla soluzione legacy ad una soluzione più efficiente con il minimo tempo di down, e in aggiunta vi è ora la possibilità, quando si modifica il sistema, di verificare tempestivamente che non siano state introdotte delle regressioni.
Un’altra parte di test è stata realizzata mettendo dei controlli Check_MK su un server esterno che verificasse la raggiungibilità dei servizi esposti su Internet.
]]>I requisiti principali richiesti all'infrastruttura sono l'affidabilità, la disponibilità 24x7, la flessibilità e l'espandibilità.
Abbiamo realizzato l'infrastruttura in questione utilizzando le seguenti componenti:
Hardware: una coppia di server Linux dotati 16-core Intel e 30 TB di spazio disco cadauno, interconnessi da una rete a 10 Gigabit, che svolge le funzioni di service network, oltre alla tradizionale rete ethernet gigabit.
Software: abbiamo accoppiato un sistema di "private cloud" (Ganeti) con un sistema di "software-defined storage" (Gluster). Entrambi questi componenti sono software open-source liberamente disponibile.
Ganeti è un software open-source sviluppato da Google che si definisce un "gestore di cluster di server virtuali". Utilizza le tecnologie di virtualizzazione Xen e KVM e il sistema di storage (RAID1 su ethernet) DRBD. Ganeti è stato progettato per facilitare la gestione dei cluster di server virtuali e per fornire il recupero veloce e semplice in caso di guasti fisici e per utilizzare "commodity hardware".
Gluster è un file system distribuito, che permette di aggregare assieme le risorse fornite da un insieme di server, detti "storage building blocks", interconnessi tramite rete Infiniband o TCP/IP, in un unico filesystem di rete (NAS virtuale).
La caratteristica saliente di entrambi i sistemi software utilizzati rispetto ad altri software con funzionalità simili è quella di non avere "single point of failure" in quanto entrambi sono basati su un architettura peer-to-peer, in cui qualunque dei peer è in grado di assumere funzioni di master. Inoltre sia le macchine virtuali (Ganeti-DRBD) che i dati da distribuire (Gluster) sono replicati in doppia copia. Tutto ciò conferisce al sistema una notevole resistenza ai guasti.
Il sistema è anche flessibile ed espandibile: aggiungendo nuovi server alla service network è possibile aumentare la capacità del sistema sia in termini di capacità di storage che computazionale. O di rimpiazzare una componente divenuta obsoleta con una più moderna (funzionalità, questa, che la distingue in modo netto da soluzioni tradizionali come le SAN monolitiche, ad esempio).
L'utilizzo di macchine virtuali permette inoltre un processo di evoluzione del software di distribuzione dei dati molto naturale, in quanto è possibile sviluppare e testare nuove componenti sulla stessa infrastruttura che contiene l'applicazione di produzione.
]]>