# Sheepdog

Sheepdog è uno storage distribuito nato per QEMU/KVM. I dischi delle macchine virtuali sono distribuiti sui nodi. In base al livello di ridondanza scelto è possibile perdere uno o più nodi e rilanciare le macchine virtuali sui nodi attivi (Reliability). Per aumentare le dimensioni dello storage o per eseguire più macchine virtuali basta aggiungere nodi (Scalability). La sua configurazione ed i comandi per interagire hanno una sintassi chiara, semplice e ben documentata (Manageability). Infine offre molte funzionalità avanzate, snapshot, cloning, iSCSI, cluster wide backup etc.

## Storia

Il progetto sheepdog è stato fondato da Kazutaka Morita, programmatore della NTT Cyber Space Labs (Giappone). I motivi per cui ha dato vita a sheepdog sono:
“IaaS basate su OSS erano ai loro albori nel 2010. Anche OpenStack non era stato rilasciato. Non esisteva uno storage distribuito per fornire volumi a livello di blocchi a molte macchine virtuali e a noi serviva. Il nome Sheepodog (cane pastore) è stato scelto come metafora: sheep (pecora) rappresenta un pc/server. Per amministrare un gregge formato da molti server (pecore), ci serviva uno cane pastore (sheepdog)".
Anche Tomonori Fujita, sempre della NTT Cyber Space Labs, era coinvolto agli inizi del progetto ed è l'attuale maintainer di (STGT).
Il contributo di un piccolo gruppo di sviluppatori di Taobao capitanato da Yuan Liu ha segnato un'importante svolta del progetto come testimoniato da Yuan stesso: "Ad agosto 2011 un piccolo gruppo di sviluppatori di Taobao ha iniziato a realizzare un servizio di cloud computing. All'epoca sheepdog era molto instabile ma straordinariamente semplice e con un codice di base molto ridotto, paragonato ad esempio a Ceph. La semplicità e la possibilità di evolverlo a nostro piacimento, sono le ragioni per cui abbiamo scelto Sheepdog come soluzione di storage. Abbiamo contribuito sia allo sviluppo che alla ristrutturazione interna e migliorato la sua stabilità.".

## Caratteristiche Principali

* Semplice implementazione (solo 2 servizi) ed una CLI intuitiva.
* Importazione ed esportazione di dischi virtuali esistenti (tutti i tipi supportati da qemu).
* Esportazione dei vdi in formato file (tutti i tipi supportati da qemu).
* Possibilità di scegliere il livello di ridondanza (Full Replica o Erasure Code), per l'intero cluster o per singolo vdi.
* Vdi
** snapshot
** clonazione
** ridmensionamento
** preallocazione
** blocco
** cambio ridondanza
** backup incrementali
* Cluster snapshot (con deduplica).
* Interfaccia di rete dedicata al traffico di sincronizzazione dei nodi.
* Supporto per la migrazione live (senza spegnimento) delle macchine virtuali tra i nodi del cluster.
* Amministra un numero illimitato di dischi e di diverse dimensioni.
* Integrato con OpenStack

## Struttura del programma
### Un cluster manager (zookeeper or corosync)

    Controlla quali nodi si aggiungono o lasciano il cluster

### Il demone sheep

    Gestisce la scrittura, lettura e replica dei dati

### Il comando dog

    Serve per amministrare il cluster
Tutti questi componenti, in particolare il demone sheep, girano in user space. A differenza di altri storage distribuiti, sheepdog non fa uso di server di metadati. Sheepdog fa uso di un qualsiasi file system supportato da linux (Ext3, Ext4, Xfs...) che abbia l'opzione per gli attributi estesi (user_xattr).

## Versioni Stabili

* 0.9.5, su github.com.
* 0.9.4, su github.com.
* 0.9.3, su github.com.
* 0.8.3, su github.com.
* 0.7.8, su github.com.