sheep kvm qemu

sheepdog 與QEMU:

QEMU的sheepdog驅動層實如今協議層,QEMU軟件的最底層;和QEMU的NBD有些類似,但比他更強大。咱們能夠在這裏實現咱們想要的任何格式,並且該協議支持實時遷移、快照、克隆等功能;
Raw格式,不只能夠實現存儲(性能更高),也能夠實現快照、克隆、精簡配置這些功能;
QCOW格式提供更多的功能,好比加密和壓縮,sheep自己不支持這些功能,代價是相比raw性能低一些;
協議層實現的另外一個優點,能夠經過'-cdrom sheepdog:volume' 這個命令,來 直接存儲ISO在sheepdog中,並使用它。
具體對比表:
 format   snapshot/clone thin-provsion DISCARD  encryption   compression
raw over file N Y N N N
raw over sheepdog Y Y Y N N
qcow2 over sheepdog Y Y Y Y Y

 對象緩存:

Sheepdog默認狀況下是沒有開啓對象緩存的。在本地節點可使用「-w」來開啓對象緩存。「-w」的例子以下:node

sheep -w size=200G # 開啓空間大小爲200G的對象緩存git

sheep -w size=50G,directio # 開啓空間爲50G且使用O_DIRECT方式的對象緩存後端

用戶但願使用更快的磁盤和對象緩存來加速IO性能,您還能夠指定對象緩存目錄所在地,以下:緩存

sheep -w size=200G,dir=/path/to/cache # 開啓200G的空間,而且存儲到/path/to/cache目錄中安全

工做原理:ide

1. 以本地文件做爲QEMU塊設備的後端性能

 QEMU 《----》 VM ^ | writeback/readahead pages V | POSIX file 《 --- 》 page cache 《 --- 》 disk | kernel does page wb/ra and reclaim加密

2. 以sheepdog的對象存儲爲後端spa

QEMU 《-----》VM ^ | push/pull objects V | Sheepdog device 《----》 object cache 《---》 Sheepdog replicated object storage. | Sheep daemon does object push/pull and reclaim操作系統

對象是在硬盤上以固定的大小文件的形式實現的,因此對對象緩存,這些對象都是在運行着sheep守護進程的節點上固定大小的文件,sheep在他們身上直接讀寫。在這個意義上, 除了節點上那些對象的元數據 (inode和dentry)之外,咱們不消耗內存。

DISCARD支持

Discard命令容許操做系統通知底層的存儲器,哪些數據塊不在被視爲"使用中"狀態,並能夠擦除;這是精簡配置機制的一種方式,而且用於SSD和VM;

VM中啓用discard:

環境要求: QEMU>=1.5 , vanilla kernel >= 3.4 or RHEL-based kernel >= 6.3, Sheepdog latest from git repo.

對QEMU設備來講,各類IDE和scsi支持discard支持,virtio-blk 不支持。默認Discard是關閉的。須要經過下面方式來支持

  1 # for IDE device backed by sheepdog volume named 'data' 2 3
   $ qemu-system-x86_64 -drive if=ide,file=sheepdog:data,cache=writeback,discard=o  
1 # for virtio-scsi device backed by sheepdog volume named 'data'
2 
3 $ qemu-system-x86_64 -drive if=none,id=disk,file=sheepdog:data,cache=writeback,discard=on -device scsi-hd,drive=disk

日誌

該機制旨在幫助磁盤數據崩潰後仍能保證一致性,並提升寫入性能。Sheepdog日誌僅是順序方式記錄全部的IO操做,該日誌是在向vdi寫入數據前發生的,記錄在node上的

若是咱們用一個專門設備來託管日誌,性能會得到更大提高,由於咱們按照順序記錄寫入,此時咱們將隨機寫入轉變成順序寫入,在HDD盤上會更快。
由於提早記入寫入操做,咱們之後端寫入的方式安全的放棄O_DSYNC(能夠SAS磁盤上提升80倍性能)

size是必要的參數:

1  $ sheep -j dir=/path/to/dir,size=256M,      # enable external journaling with the size 256M
2  $ sheep -j dir=/path/to/dir,size=256M,skip  # like above, but skip recovery at startup
3  $ sheep -j size=512M                        # enable internal journaling with the size 512M

MD管理

MD在每個sheep上須要一個私有的一致性哈希環來用於對象分發。
MD層對sheep節點管理來講是徹底透明的,意味着熱插拔磁盤時不會致使sheep節點發生對象遷移。 MD能自動處理不少場景,支持不一樣尺寸的磁盤,當磁盤故障(新添加磁盤)時也能知足VM 的IO請求,即便多個磁盤同時故障,新磁盤插入故障. MD處理對VM是透明的,當全部磁盤損壞後,sheep僅充當網關做用:
相關文章
相關標籤/搜索