• 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仅充当网关作用:
     
     
     
  • 相关阅读:
    对结构化学习(structured learning)的理解
    【语义分割】large kernel matters中GCN模块的pytorch实现
    【C++】使用find函数快速定位元素
    Python通过Openpyxl包汇总表格,效率提升100倍
    conda环境管理
    C++解决大数组问题
    C++ 赋值运算符重载
    [Android] java代码无错误,但跳转失败
    android 如何从activity跳转到另一个activity下指定的fragment
    绝命毒师口语精析(6)
  • 原文地址:https://www.cnblogs.com/yunlion/p/10715385.html
Copyright © 2020-2023  润新知