最近有点忙,收到不少邮件或者留言,有些没有回复,在此致歉。在OpenStack中,出现问题比较多的除了网络部分,还有存储部分。对于swift对象存储的研究和相关技术资料已经有很多,而块存储nova-volume相关的介绍还少见,其中也有很多问题出现。
下面将对这一部分的一些问题给予介绍,希望大家有好的经验都分享出来,社区的力量需要每一分子的贡献。最近这几篇文章的目录贴在这里,相关问题可以直接去查阅对应文章,如果还问很多已经在文章里说明的问题我就不回复了。
OneStack:Ubuntu 12.04 (或11.10) 一键部署安装OpenStack云计算平台,这个介绍了onestack这个一键部署的项目;
OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ),这个记录了一些基本的问题和解决方法;
构建OpenStack的高可用性(HA,High Availability),这部分介绍了高可用性的OpenStack IaaS平台的一些策略和方案;
OpenStack云平台的网络模式及其工作机制,这个详细分析了网络原理和工作机制;
OpenStack卷存储nova-volume相关问题,由于nova-volume问题较多,单独写这一篇,主要介绍块存储相关的问题;
对swift对象存储的内部原理和相关技术可以查找对象存储、一致性哈希等文章,新浪有几篇技术分享介绍的很好,推荐看一看。
一、相关概念
LVM存储常用术语
物理存储介质(Physical Media):物理存储设备,如磁盘或者磁盘上的分区,是存储系统的最底层实体。
物理卷(PV,Physical Volume):硬盘分区或从逻辑上与硬盘分区具有同样功能的设备(如 RAID),是 LVM 的基本存储逻辑块;和基本的物理存储介质(如分、磁盘等)不同的是含有 LVM 管理参数。
卷组(VG,Volume Group):LVM 中的最高抽象层,由一个或多个物理卷(PV)组成。一个逻辑卷管理系统中可以拥有多个卷组。
逻辑卷(LV,Logical Volume):逻辑卷(LV)在卷组上建立,相当于非 LVM 系统中的分区。每个逻辑卷属于它所在的卷组。
VGDA(卷组描述符区域) :和非 LVM 系统将包含分区信息的元数据保存在位于分区起始位置的分区表中一样,逻辑卷以及卷组相关的元数据被保存在位于物理卷起始处的 VGDA 中。VGDA 包括以下内容:PV 描述符、VG 描述符、LV 描述符、和一些 PE 描述符。系统启动 LVM 时激活 VG,并将 VGDA 加载至内存,来识别 LV 的实际物理存储位置。当系统进行 I/O 操作时,就会根据 VGDA 建立的映射机制来访问实际的物理位置。
存储类型
通常来讲,所有磁盘阵列都是基于Block块的模式,所有的NAS产品都是文件级存储,而对象存储(Object-based Storage)是一种新的网络存储架构,它基于对象存储技术。
iSCSI协议
将SCSI命令封装在IP包中,建立会话通过TCP/IP网络传输。iSCSI协议定义了在TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方法。发送端将SCSI命令和数据封装到TCP/IP包中再通过网络转发,接收端收到 TCP/IP包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的SCSI设备一样简单。
iscsi-target server
iSCSI有多种存储架构,但是由于PC架构的成本低,同时技术越来越成熟,基于PC架构的iSCSI存储设备应用广泛。iSCSI Target软件安装在PC服务器上,使普通的PC服务器转变成一台iSCSI存储设备,并通过PC服务器的以太网卡对外提供基于iSCSI数据传输协议的服务。
iscsi-initiator
Initiator软件可以将以太网卡虚拟为iSCSI卡,接受和发送iSCSI数据报文,从而实现主机和iSCSI设备之间的iSCSI协议和TCP/IP协议传输功能。
二、OpenStack的存储服务
1、存储组件和服务
OpenStack创建出来的实例是没有永久存储的,关闭实例后数据都会丢失,所以需要存储卷来保存每个instance的数据。这项工作由nova-volume实现,提供类似亚马逊EBS的块存储服务。其中,nova-volume专门管理卷的创建、删除、挂载等,这些卷基于lvm管理,使用iscsi提供服务,并通过libvirt与虚拟机交互。
lvm提供卷组和逻辑卷管理。首先需要创建一个名为nova-volumes的卷组,不然nova-volume不能正常工作。因为nova-volume所有的创建、删除volume都是针对这个卷组里的逻辑卷。创建volume时nova-volume会调用lvm的命令lvcreate创建逻辑卷。
iscsi提供多个节点间的存储服务。创建volume时计算节点还会创建iscsi IQN,计算节点与iscsi服务器间建立iscsi会话;挂载时实例就拥有了这个逻辑卷;然后使用virsh命令把这个逻辑卷挂载到实例作为它的一块存储设备。