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”的例子如下:

sheep -w size=200G # 开启空间大小为200G的对象缓存

sheep -w size=50G,directio # 开启空间为50G且使用O_DIRECT方式的对象缓存

用户希望使用更快的磁盘和对象缓存来加速IO性能,您还可以指定对象缓存目录所在地,如下:

sheep -w size=200G,dir=/path/to/cache # 开启200G的空间,并且存储到/path/to/cache目录中

工作原理:

1. 以本地文件作为QEMU块设备的后端

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

2. 以sheepdog的对象存储为后端

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仅充当网关作用:
 
 
 
原文地址:https://www.cnblogs.com/yunlion/p/10715385.html