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从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服务-->安装并配置一个本地存储节点(18)
- 【OpenStack】Openstack之Cinder服务初探
- Openstack之Cinder服务初探
- OpenStack入门修炼之Cinder服务-->使用NFS作为后端存储(19)
- Openstack之Cinder服务初探
- 快速入门Openstack,无脑多节点部署Mitaka(7)--cinder部署
- Openstack之Cinder服务初探
- OpenStack入门以及一些资料之(一、cinder,swift存储)
- OpenStack入门修炼之Cinder服务的部署与测试(17)
- OpenStack(Queens版)高可用集群-9.Cinder控制节点集群
- OpenStack快速入门
- openstack-入门学习2
- 以公司实际应用讲解OpenStack到底是什么(入门篇)
- 17.odoo入门——初探后台启动过程(四)
- OpenStack API快速入门
- openstack 入门 【准备篇】一:整体介绍【centos】 M版本
- Thrift入门初探(2)--thrift基础知识详解
- Thrift入门初探--thrift安装及java入门实例
- Thrift入门初探--thrift安装及java入门实例
- 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)