3. POURQUOI UN NAS ?
On veut stocker les disques des VMs
On veut stocker des données importantes
lundi 4 juin 12
4. POURQUOI UN NAS ?
On veut stocker les disques des VMs
On veut stocker des données importantes
En local NAS
High Availability (HA)
Migration à chaud
Pertes en cas de panne Fiabilité (raid5, raidZ...)
Migration a chaud difficile Possibilité de sauvegarder régulièrement
(snapshots, sync sur un autre NAS...)
Techniques d’optimisation (compression,
deduplication...)
Partage plus fin des données
lundi 4 juin 12
8. HULK ?
Processeur : Athlon II X6 1055T
Mémoire : 8Gb
Carte réseau : 3 cartes gigabit
Disques stockage : 5 x 2 To (5400 tr/min)
Disque système : 80 giga (7200 tr/min)
Sous NexentaStor community edition, dérivé de Solaris
lundi 4 juin 12
9. Unix crée par Sun microsystems
Réputé stable et fiable
Compatible avec les binaires Linux
lundi 4 juin 12
10. FEATURES
Gestion des disques
~LVM
Filesystem ZFS
RAID ~ mdadm
Zones Containers ~ openVZ
Virtual interfaces Dtrace Monitoring
Log
Virtual switches
QOS
Crossbow existe sur *BSD, OSX
lundi 4 juin 12
11. Leader en Open Storage
«As a general term, open storage refers to storage systems built with
an open architecture using industry-standard hardware and open-source software.»
Contribue à OpenStack
NexantaStor = Opensolaris + Ubuntu
Optimisé NAS, iSCSI, Fiber Channel
Hulk : Community Edition, max 18To
lundi 4 juin 12
14. FEATURES
Transactionnel: robuste
pas besoin de fsck
Pools (volumes)
raidZ
Deduplication
Compression
Encryption
Snapshots
clones
send/receive
Shares
Quotas
lundi 4 juin 12
15. FEATURES
Transactionnel: robuste
pas besoin de fsck
Pools (volumes)
raidZ
Deduplication
Compression
Encryption
Snapshots
clones
send/receive
Shares
Quotas
lundi 4 juin 12
16. POOLS
FS FS FS ZFS ZFS ZFS
Volume Volume Volume storage pool
Disk 1 Disk 2 Disk 3 Disk 1 Vdev file
lundi 4 juin 12
17. les disques physiques sont donnés par la
commande format ou dans /dev/dsk
Pool basique entre de 2 disques:
zpool create tank c1t0d0 c1t1d0
Exemple:
mkfile 100m /A
mkfile 100m /B
mkfile 100m /C
zpool create -f data /A /B
zpool status
zpool list
cp -r /etc/ssh /data
On veut ajouter un disque
zpool add -f data /C
lundi 4 juin 12
18. Mirror (raid1)
zpool create -f data mirror /A /B
On supprime un des disques:
zpool export data
mv /A /A.old
zpool import -d /B data
zpool status
On change le disque:
zpool replace -f data /A /C
raid 1+0
zpool create -f data mirror /A /B mirror /C /D
lundi 4 juin 12
19. RAIDZ ?
Problème du «RAID 5 write-hole»
On utilise ça à MiNET
lundi 4 juin 12
20. Exemple:
zpool create -f data raidz /A /B /C
df -h
zpool export data
cat /dev/urandom > /A
zpool import -d /B data
zpool status
zpool replace -f data /A /D
A chaud, pas de délais de reconstruction, pas de
coupure !
lundi 4 juin 12
21. DEDUPLICATION
Les données (fichiers, blocs, ou suites d’octets) sont checksummed grâce à une
fonction de hash qui permet de détecter avec une haute probabilité les redondances
Si on utilise un algorithme de hash fiable comme le SHA256, la probabilité de
collision est ~ 10^-77
Utile pour des données redondées comme les disques de VM
ZFS fait de la dedup au niveau bloc, en temps réel : nécessite CPU/RAM !
lundi 4 juin 12
22. Exemple:
zfs set dedup=on data
cp -r .mozilla/ /data/mo
cp -r .mozilla/ /data/mo2
cp -r .mozilla/ /data/mo3
df -h
zpool list
lundi 4 juin 12
23. ZFS DATASET
On peut en créer autant qu’on veut sur un pool
Pas besoin d’allouer ou de formater
On utilise la commande zfs pour les administrer
On peut donner des propriétés distinctes à chaque datasets
ZFS ZFS ZFS
storage pool
lundi 4 juin 12
24. zfs create data/test
le dataset est monté automatiquement
zfs list
zfs rename data/test data/test_old
zfs get all data/test_old
On voit que le dataset hérite des propriétés du pool parent
zfs set dedup=off data/test_old
zfs get -r dedup data
zfs set compression=on data/test_old
zfs set quota=50G data/test_old
On peut faire des quotas par users et groups
zfs set sharenfs=rw data/test_old
attention aux droits (cf chown dans les references)
zfs destroy data/test_old
lundi 4 juin 12
25. SNAPSHOT
zfs snasphot pool/dataset@nom_du_snapshot
zfs list -t all
zfs rollback pool/dataset@nom_du_snapshot
zfs destroy pool/dataset@nom_du_snapshot
lundi 4 juin 12
28. THOR
En cas de panne critique de Hulk, on a plus les disques de VMS
Comment récupérer les données ?
lundi 4 juin 12
29. THOR
En cas de panne critique de Hulk, on a plus les disques de VMS
Comment récupérer les données ?
En synchronisant Hulk et Thor régulièrement.
Hulk Thor
lundi 4 juin 12
30. ZFS SEND / ZFS RECEIVE
On envoie que des snapshots
zfs snapshot data/test@20120530
On envoie le snapshot dans un fichier:
zfs send data/test@20120530 > file
On peut même compresser !
zfs send data/test@20120530 | gzip > file.gz
Encrypter !
zfs send data/test@20120530 | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl
Et récupérer biensûr !
zfs receive data/backup < file
openssl enc -d -aes-256-cbc -a -in file.gz.ssl | gunzip | zfs receive data/backup
Mais surtout pour envoyer sur Thor on utilise ssh !
zfs send data/test@20120530 | ssh 192.168.102.140 zfs receive data/test
Le premier send envoie tout le snapshot, il est donc long, ensuite on envoie des incréments:
zfs send -i data/test@20120530 data/test@20120531 | ssh 192.168.102.140 zfs receive data/test
Attention, le snapshot de destination doit etre en lecture seule: zfs set readonly=on data/test
lundi 4 juin 12
31. Le script de backup
Sur Hulk tout les jours (cron)
/root/scriptSync.py <dataset>
On vérifie la connexion vers Thor
On récupère le dernier snapshot du dataset snapPrecedent présent sur Thor
On crée sur Hulk un snapshot snap
On envoie l’incrément entre snapPrecedent et snap sur Thor via zfs send et ssh
On vérifie que le snapshot snap est présent sur Thor
On supprime les précédents snapshots sur Hulk sauf snap
lundi 4 juin 12
32. Le script de backup
Sur Hulk tout les jours (cron)
/root/scriptSync.py <dataset>
Hulk Thor
On vérifie la connexion vers Thor
On récupère le dernier snapshot du dataset snapPrecedent présent sur Thor
On crée sur Hulk un snapshot snap
On envoie l’incrément entre snapPrecedent et snap sur Thor via zfs send et ssh
On vérifie que le snapshot snap est présent sur Thor
On supprime les précédents snapshots sur Hulk sauf snap
lundi 4 juin 12
34. ÇA TOMBE EN PANNE
Si Hulk tombe en panne:
disque en panne: vérifier avec zpool status l’état
du raid Z, remplacer le disque (possible à chaud
mais vaut mieux éteindre Hulk)
Sinon: éteindre Hulk, désactiver readonly sur le
snapshot de Thor, activer les partages NFS,
changer les ips.
lundi 4 juin 12
35. ON PEUT AMÉLIORER QUOI ?
Script de suppression auto des plus vieux snaps sur Thor
Faire un script pour automatiser la transition Hulk->Thor
Activer les interfaces virtuelles (crossbow), activer les partages
NFS
link aggregation sur Thor
jumbo frames partout
lundi 4 juin 12
36. CE QUE L’ON A PAS ABORDÉ+FUN
crossbow
openVZ + crossbow + ZFS = Zones
ZFS + DTrace + Zones + KVM = SmartOS
Freebsd + ZFS = freenas
le mieux c’est solaris ! Openindiana
lundi 4 juin 12
37. LECTURE/RÉFÉRENCES
Lecture:
Le wiki
The ZFS doc: http://docs.oracle.com/cd/E19082-01/817-2271/index.html
Bonne doc: http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/zfslast.pdf
ZFS send and receive: http://www.128bitstudios.com/2010/07/23/fun-with-zfs-send-and-receive/
ZFS Deduplication: https://blogs.oracle.com/bonwick/entry/zfs_dedup
http://www.zfsbuild.com/
http://hub.opensolaris.org/bin/view/Project+crossbow/WebHome
Probleme du write hole sur raid5: http://en.wikipedia.org/wiki/RAID_5_write_hole
https://blogs.oracle.com/orasysat/entry/so_what_makes_zfs_so
probleme de chown sur NFS: http://www.oracle.com/technetwork/database/clusterware/overview/
thirdvoteonnfs-129371.pdf
References:
http://www.dataspan.com/uploads/images/de-duplication-sml.png
http://cdn1.iconfinder.com/data/icons/database/PNG/128/Database_3.png
http://www.picturesdepot.com/wallpapers/207155/davids+hulk.html
http://ftp-admin.blogspot.co.uk/2011/11/raid-z.html
lundi 4 juin 12