您的位置:首页 > 运维架构

Openstack Cinder入门初探

2014-06-26 22:22 316 查看
Cinder背景

      Openstack从folsom版本开始,出现了一个全新的项目Cinder,将之前在Openstack Compute(Nova)中的部分持久性储存功能分离出来,集成到了Cinder组件中。

     Cinder主要是为Openstack提供块存储的功能。Openstack中的虚拟机实例不能持久化,需要挂载Cinder提供的volume,在volume中实现数据持久化。

Cinder服务

   
Cinder的服务主要有三项,都以守护进程的形式运行,各项服务介绍如下:

    



    (1)cinder-api:接收API requests并且将请求放入RabbitMQ队列,再转发到cinder-volume去执行。

    (2)cinder-scheduler:处理任务队列的任务,根据预定策略选择合适的Volume Service节点来执行任务。Folsom版本的Cinder仅仅提供了一个Simple Scheduler,该调度器选择卷数量最少的一个活跃节点来创建卷。

    (3)cinder-volume:该服务运行在储存节点,管理储存空间。每个储存节点都有Volume Sevice,若干个这样的节点联合起来可以构成一个储存资源池。Cinder对块数据实现了多种的储存管理方式,主要有LVM(通过LVM相关命令实现Volulme的创建、删除等相关操作)、NFS方式(通过挂共享的方式实现volume)、ISCSI方式(通过iSCSI协议实现)。

     为了扩展不同类型和型号的储存,Volume Service支持如下类型和厂商的drivers:

     --本地储存:LVM,sheepdog

     --网络储存:NFS,RBD(RADOS)

     --IBM:XIV,Storwize V7000,SVC storage systems

     --Netapp:nfs储存

     --EMC:VNC,VMAX/VMAXe

     --Solidfire:solidfire cluster 

Cinder支持典型存储的机制

   从目前的实现来看,Cinder对本地存储和NAS的支持比较不错,可以提供完成的cinder API v2支持,而对于其他类型的存储设备,cinder支持或多或少受到限制。Cinder中存储的底层驱动源代码在/cinder/volume/drivers目录中可以找到。这些存储方式都是可以扩展的,要实现特定的储存方式只需要继承VolumeDriver基类,或者根据储存类型继承相关子类(如ISCSIDriver),实现其相关方法。实际上,Cinder并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口,不同的块设备服务厂商根据自己的存储设备产品在Cinder中实现其驱动支持以与OpenStack
Cinder进行整合。

    块设备挂载到虚拟机的功能由nova组件中实现。在/nova/virt/libvirt目录中的volume.py中实现对应cinder中的存储设备的挂载。针对cinder中的不同存储类型,对应有不同的Volume Diver类型,如LibvirtVolumeDriver、LibvirtNetVolumeDriver、LibvirtISCSIVolumeDriver、LibvirtNFSVolumeDriver等,这些类都继承于LibvirtBaseVolumeDriver基类。

    以本地储存为例,cinder-volume使用LVM驱动,该驱动的实现需呀在主机上事先用lvm命令创建一个cinder-volues的VG卷组,当该主机接收到创建卷请求时,cinder-volume在该VG上创建一个LV逻辑卷,并openiscsi将这个卷当做一个iscsi tgt给export。

Cinder服务的操作体验--基于LVM的卷创建和挂载

  
Openstack Cinder API requests的发送有以下几种方法:

    (1)使用cURL工具发送http请求

    (2)使用提供的命令行clients

    (3)REST clients,基于浏览器的图形化接口

    (4)opestack python的软件开发包(SDK)

    本文中使用简便易用的命令行client是进行cinder服务的操作体验。这里的openstack各组件的安装和部署采用all-in-one方式,即所有组件都部署在同一台计算机节点,这也只是为了体验openstack。Opensta ck的部署不在这

里介绍,可以自行google。

    接下来,将介绍使用openstack提供的命令行来创建LVM卷,并将创建的逻辑卷挂载到虚拟机实例中,在虚拟机中查看该卷设备并格式化后使用。

    
1.创建本地LVM卷组

    
如果本地没有LVM逻辑卷组,直接使用cinder create创建逻辑卷将会失败,因为当前没有可用的逻辑卷组。如果当前环境已有LVM卷组,则可跳过。

     LVM逻辑卷管理简介:

     PP,物理分区(physical partition):硬盘的分区,如/dev/hda1,/dev/sda1,是存储系统最底层的单元。

     PV,物理卷(physical volume):是组成VG的基本逻辑单元,和PP相比,却包含了与LVM相关的管理参数。

     VG,卷组(volume group):即LVM卷组,由一个或数个PV组成,相当于LVM的存储池。

     PE,物理区域(physical extend):PV被划分的最小单位,PE大小可配置,默认4MB。

     LE,logic extend:逻辑卷可以被划分成为的可寻址基本单元,同一卷组,LE与PE大小相同并一一对应。   

     LV,逻辑卷(logic volume):建立在VG之上,文件系统之下,由若干个LE组成。

     LVM逻辑卷管理关系如图:

    



     这里创建一个大容量文件用loop设备关联来虚拟成磁盘设备。

     1.1 先创建一个5G文件

         dd if=/dev/zero of=cinder-volumes bs=1 count=0 seek=5G

     1.2 使用losetup把文件和循环设备关联,将文件虚拟成磁盘

         losetup /dev/loop2 cinder-volumes

     1.3 对该虚拟磁盘/dev/loop2分区,其中分区的系统识别码(system ID)设置为对应LVM的8e

           fisk /dev/loop2

           n     --添加新分区

           p     --设新分区为主分区

           1     --分区序号为1

           enter  --默认

           enter  --默认(将该块设备只分成一个区)

           t      --设置system ID

           8e     --LVM对应的system ID

           w      --保存分区设置

    1.4 对块设备分区的物理分区创建物理卷

         pvcreate /dev/loop2

        查看创建的物理卷

         pvdisplay

            1.5 对已有的物理卷组建成卷组(注意卷组的名字必须为cinder-volumes,与cinder的API一致,否则后面cinder-volume服务会出错

              vgcreate  cinder-volumes  /dev/loop2

        显示建的卷组

          vgdisplay

        如果需要将新的物理卷扩展进卷组

          vgextend   cinder-volumes   <new-pvvolume>

      1.6 重启服务进程cinder-volume,否则无法识别到新建的卷组cinder-volumes

         service  openstack-cinder-volume restart

    2 cinder创建LVM逻辑卷

      创建一个名为cin01,大小为1G的逻辑卷

       cinder create --display-name cin01 1

       查看创建的逻辑卷状态信息,如果status一栏显示为available,则创建成功

       cinder list

       也可以为该物理卷创建一个快照

       cinder snapshot-create --display-name cin01-snap cin01

       cin01-snap快照卷,cin01是原逻辑卷

       查看生成的快照卷

        cinder snapshot-list

       ID为快照生成卷cin01-snap的ID,volume ID一栏是原逻辑卷cin01的ID

     3 向虚拟机挂载

     3.1 先查看当前已有的虚拟机

        virsh list

     3.2 查看虚拟机的ID

       virsh dumpxml 2|grep uuid

       数字2是3.1中查询所得的ID序列号,结果信息中的uuid就是虚拟机的ID

     3.3 向虚拟机挂载该逻辑卷

       nova volume-attach <virtual machine ID> <volume ID> <device>

       device是在虚拟机中得到挂在路径,对kvm的hypervisor,挂载路径一项只支持auto

     4 进入虚拟机格式化并使用该卷

     进入虚拟机的方法较多,这里使用便利的VNC工具进入。只需对虚拟机的xml配置文件中的VNC项中的port设置成与vnc登陆客户端一致即可。

      在虚拟机中使用root权限 fdisk -l或df查看新挂载的卷,这里新挂载的卷位于/dev/vdb。这个卷可以理解为一块新的磁盘,首次使用需要先分区再格式化建文件系统,然后挂载到某个目录。

     4.1 使用fdisk对该新设备分区

       fdisk /dev/vdb

       n

       p

       1

       enter

       enter

       w

     4.2 格式化该分区,分区上间ext3文件系统

       mkfs -t ext3 /dev/vdb1

     4.3 将该分区挂载到某个目录

      mkdir /mnt/new_volume

      mount /dev/vdb1 /mnt/new_volume

     

     如果需要卸载该卷,先在虚拟机中

      umount /mnt/new_volume

     再主机中卸载卷

      nova volume-detach <virtual machine ID> <volume ID>

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openstack cinder