zoukankan      html  css  js  c++  java
  • 利用虚拟化环境虚拟nvme盘

    前情介绍

    SPDK

    SPDK的全称为Storage Performance Development Kit ,是Intel发起的一个开源驱动项目,这个是一个开发套件,可以让应用程序在用户态去访问存储资源,具体做能做什么可以去官网看一下 SPDK官网

    NVME

    NVMe其实与AHCI一样都是逻辑设备接口标准,NVMe全称Non-Volatile Memory Express,非易失性存储器标准,是使用PCI-E通道的SSD一种规范,NVMe的设计之初就有充分利用到PCI-E SSD的低延时以及并行性,还有当代处理器、平台与应用的并行性。SSD的并行性可以充分被主机的硬件与软件充分利用,相比与现在的AHCI标准,NVMe标准可以带来多方面的性能提升。

    Bluestore

    BlueStore 是用来存储ceph的数据的地方,提供了一种在块设备上直接写入方式的存储。这个是因为之前ceph社区尝试做了一个kvstore,但是性能达不到想要的效果,然后基于rocksdb的原型,重新开发了一套存储系统,BlueStore直接消耗原始分区。还有一个分区是存储元数据的,实际上就是一个RocksDB键/值数据库存储,这个比之前的filestore最大的优势就是去掉了journal,从而提供了更平滑的IO

    SPDK+NVME+Bluestore能产生什么化学反应

    目前这一块走的比较前沿的就是xsky了,这块的最初的推动力量是Intel,NVME的硬件的推出,需要一个很好的催化剂,传统的内核中断式的访问磁盘的方式,已经不能最大化发挥NVME的性能了,因此推出了SPDK的套件,可以在用户态的去访问磁盘数据,Bluestore按照这个标准就可以去以最大化的跑出磁盘的性能了,从而给上层提供一个非常强悍的IO性能,目前来说这几项都是很新的东西,如果没有特别强的技术,或者找Intel做技术支持话,用好还是需要再等一段时间

    开篇

    本篇文章做什么

    之前有篇文章已经实现了bluestore的配置,这个配置并不难,并且用普通的硬盘就能实现,这里是讲怎么弄出来NVME磁盘,因为NVME的磁盘很贵,并不是每个人都能有环境的,这里是用虚拟化的方式虚拟出nvme,以供以后进行相关的功能验证

    准备工作

    准备好kvm虚拟化的环境,这个地方就不在这里赘述了,本环境采用的是ubuntu的宿主机,如果是centos需要另做改动,如果有需要欢迎留言

    安装操作系统

    创建两个磁盘

    qemu-img create -f raw /mnt/localdisk.raw  40G
    qemu-img create -f raw  /mnt/nvme.raw 50G
    

    执行安装操作系统

    virt-install --name nvmetest --ram 4096 --vcpus=2 --disk path=/mnt/localdisk.raw --network bridge=br0 --cdrom /mnt/CentOS-7-x86_64-DVD-1503-01.iso --vnclisten=192.168.8.107 --vncport=7000 --vnc --autostart
    

    上面的iso文件需要提前准备,vnclisten就用宿主机的IP即可

    都安装好了以后,先停止虚拟机,需要对配置文件做一些改动,因为virsh管理的时候有一些参数是不支持的,这个需要自己做一个 qemu:commandline 的改动

    停止掉虚拟机

    virsh destroy nvmetest
    

    编辑配置文件

    virsh edit nvmetest
    

    内容如下:

    <domain type='kvm'>
    ····
    </domain>
    

    修改为:

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    ····
      <qemu:commandline>
        <qemu:arg value='-drive'/>
        <qemu:arg value='file=/mnt/nvme.raw,if=none,id=D22,format=raw'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='nvme,drive=D22,serial=1235'/>
      </qemu:commandline>
    </domain>
    

    这个地方一定要注意加入的这个固定格式一定要写到最后的位置,否则不生效

    检查虚拟机的磁盘是否生成

    启动测试的虚拟机

    virsh destroy nvmetest
    

    使用vnc连接登陆刚刚的那个vnc的端口
    登陆上机器后就可以fdisk -l,
    nvme
    lspci看到的如下
    lspci.png-1.5kB

    结束

    本次实践当中还有一部分是对spdk的代码进行编译的,编译没有问题,并且可以根据测试脚本加载驱动,将nvme磁盘排它性的从内核态移出,但是无法找到如何使用这个用户态的磁盘,在ceph的代码分支中已经包含了spdk部分的代码,在ceph中应该默认可以直接使用这个驱动,使用的方式是 spdk:sdasdasdasd (disk SN) ,但是配置当中如何使用还是无从得知,这一块如果资料会第一时间分析,目前xsky应该能够配置出环境来,本篇涉及的几个东西都是比较新的一些东西,在未来将会极大的提高性能的,目前这个阶段还处于开发阶段

    异常处理

    执行virsh start nvmetest的时候会提示nvme.raw的磁盘没有访问权限,这个地方卡了很久,不清楚在ubuntu下面居然还有个apparmor的权限问题,是调看系统日志才发现的,下面是处理办法:
    执行下面的命令为libvirt禁用 apparmor:

    ln -s /etc/apparmor.d/usr.sbin.libvirtd  /etc/apparmor.d/disable/
    ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper  /etc/apparmor.d/disable/
    apparmor_parser -R  /etc/apparmor.d/usr.sbin.libvirtd
    apparmor_parser -R  /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
    

    /etc/libvirt/qemu.conf去掉认证的,修改为:

    security_driver = "none"
    

    重启libvirt服务

    /etc/init.d/libvirt-bin restart
    
  • 相关阅读:
    Atitit.500 503 404错误处理最佳实践oak
    Atitit. 解决unterminated string literal 缺失引号
    Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制
    Atitit. Dwr 抛出异常error解决方案
    Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
    Atitit.软件gui按钮and面板---通讯子系统(区)-- github 的使用....
    atitit。gui 界面皮肤以及换肤总结 java .net c++
    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
    atitit.报表最佳实践oae 与报表引擎选型
    Atitit. 软件---多媒体区---- jmf 2.1.1 Java Media Framework 支持的格式
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575350.html
Copyright © 2011-2022 走看看