七 Openstack Cinder存储
1 云架构存储
1)Red Hat OpenStack Platform 中的存储:
- 虽然默认存储使用简单后端(LVM),但OpenStack Platform也支持企业级后端。包括最常用的SAN 基础架构,以及NAS 设备的支持,这允许将现有的存储基础架构作为OpenStack 的后端服务器连接本地存储,通常同时使用外部存储来扩展存储。基于云的实例也是如此,即: 本地存储关联到实例,同时利用外部存储来扩展本地存储
- 由于云环境的自服务性质,存储是重要的资源,需要正确管理,让最大数量的用户可以利用这些资源
- 实例的本地存储,在实例终止时会被回收,这种存储称为临时存储
- 可用的本地存储受限于物理服务器的硬盘空间。若要扩展实例的存储,可通过OpenStack 的块存储服务、对象存储服务或文件共享服务。这些服务提供的存储具有持久性,它们在实例终止后保留
2)临时存储:
- 临时存储基于部署了实例的计算节点上可用的本地存储。这种存储在实例内提供更佳的性能,因此,临时存储最适合用于操作系统或swap 等操作系统根磁盘创建自镜像模板
3)永久存储:
- 永久存储基于外部设备上的存储,使用网络调配,所以它的运行要慢于计算节点的本地存储
- 有多种不同的存储资源提供永久存储,包括卷、对象容器和共享等
- 卷: 向实例提供永久存储的最常见方式,由OpenStack 块存储服务管理。和物理计算机中一样,卷以裸设备形式呈现,可格式化并挂载以供使用。卷在一个时间点上只能连接到一个实例,但可在不同实例之间移动,例如为了共享数据
- 对象容器:OpenStack Platform 也包括对象存储服务,允许将文件存储为对象。这些对象收集在容器中,容器上可以配置特定的访问权限。这种永久存储可使用API 来访问共享:,在以前的OpenStack 版本中,必须在几个卷上创建一个分布式文件系统,才能同时在多个实例之间共享数据。OpenStack 文件共享服务(代号Manila)可同时挂载到多个实例上的共享
4)块存储:
- OSP 目前支持两种类型的永久存储: 即块存储和对象存储块存储将卷用作其存储单元,要求卷连接到实例以便能被访问对象存储将对象容器用作其存储单元,对象容器由文件和文件夹组成。所有对象都可使用API 进行访问
- 块存储的用例: 在OpenStack 中使用块存储取决于后端的存储架构。根据后端存储基础架构的性能,块存储服务应当适合一组特定的用例。目前,
- Openstack 块存储服务支持Ceph 存储和NFS 作为后端,并提供最常见SAN 供应商的原生驱动程序
- 通常而言,块存储非常适合下列用例需要
- 持久存储大量数据的额外空间
- 分布式数据库等关键云应用的后端存储
- OpenStack 中建议对块存储采取以下做法:
- 避免将LVM 后端用于生产环境。红帽不支持将LVM 用作块存储的后端
- 基于工作负载要求,为OpenStack 块存储服务配置适当的存储后端
2 管理临时存储
1)临时存储的后端文件:
- 实例的临时存储资源由用于创建实例的类别定义
- OpenStack 类别目前支持三种资源的定义: 根磁盘、临时磁盘和交换内存。它们各自映射为实例的设备
- 在部署实例时,计算节点文件系统上会创建用于不同临时存储资源的后端文件。这些文件在
/var/lib/nova/instances
目录下。这个新目录采用相关联实例的UUID 命名。这个目录内会创建支持各个临时存储资源的后端文件 - 部署实例时会创建下列文件,并且其关联的类别定义有根磁盘、临时磁盘和交换内存
- 在实例终止时,其关联的临时存储的所有后端文件会被删除,包括含有这些文件的目录。与物理服务器截然不同,后者中不会删除关联的本地存储
- 实例的所有临时存储资源在用于创建该实例的类别中定义。根磁盘、临时磁盘和交换内存的大小可由类别定义。虽然定义根磁盘大小是强制性的,但临时磁盘和交换磁盘都是可选的。如果它们的大小定义为零,则不会在实例中创建它们。对临时磁盘或交换内存使用较大的大小会影响资源对其他用户的可用性,而且也会影响云资源的使用优化
根磁盘: 从创建实例时指定的模板镜像创建。此镜像由OpenStack 镜像服务管理。镜像复制到部署实例的计算节点。此镜像在
/var/lib/nova/instances
目录中创建。这个目录包含供该计算节点上部署的实例所使用的镜像集合。此集合充当缓存;因此,如果新实例需要以前用过的镜像,就可从缓存中拉取它,而不必从OpenStack 镜像服务节点检索。在镜像传输到计算节点(或从缓存拉取)后,将根据这个镜像创建根磁盘,并且放大到根磁盘大小的类别规格。根磁盘挂载为实例中第一可用设备,在基于Red Hat Linux 的实例中通常为/dev/vda临时磁盘: 作为裸设备映射到实例。它通常映射为第二可用设备,在基于Linux 的实例中为/dev/vdb。cloud-init 进程使用文件系统配置这个设备,并将它挂载到实例的/mnt 目录中
交换磁盘: 交换磁盘也作为裸设备映射到实例。它作为第三可用设备映射到实例,在基于EnterpriseLinux 的实例中为/dev/vdc.cloud-init 进程将此设备配置为交换设备,并在实例中启用为交换内存
2)利用OpenStack 统一CLI 管理临时存储的流程:
- 提供Keystone 凭据环境文件以加载用户的凭据
- 使用
openstack server create
命令启动实例。使用配置有临时磁盘和交换磁盘的类别 - 前往部署了实例的计算节点
- 在
/var/lib/nova/instances
目录中浏览支持实例的关联根磁盘、临时磁盘和交换磁盘的后端文件。它们应当位于将实例ID 用作名称的目录中 - 返回到客户端计算机,使用
openstack console url show
命令获取实例的控制台URL,然后利用Web 浏览器打开该URL - 使用控制台登录实例, 再使用
parted
命令列出临时磁盘和交换磁盘(我用fdisk
) - 在临时磁盘关联的设备中创建一个分区,并使用XFS 文件系统格式化,然后将它挂载到实例内的目录中
- 使用
mkswap
命令配置交换磁盘关联的设备。 - 使用
swapon
命令启用它,返回到客户端计算机终端,删除该实例 - 重新登录计算节点,然后确认实例关联的后端文件和目录已被删除
3 管理永久存储
1)OpenStack Platform 中的永久存储:
- OSP 中支持两种类型的永久存储:
- 即块存储和对象存储块存储基于由OpenStack 块存储服务提供的卷
- 对象存储基于由OpenStack 对象存储服务提供的对象容器
- 这些容器可以包含文件夹和文件对象,它们通过OpenStack 对象存储服务API 进行管理
- 永久卷:
- 块存储(有时称为卷存储)为OpenStack 实例提供永久块存储。用户将卷连接到运行中的实例。可以格式化为所需的任何文件系统。这为将永久存储连接到实例提供了途径
- 由于这些卷是永久的,它们可以从一个实例分离,重新连接到另一个实例上,其数据会保持完好
- 在OpenStack Platform 中,块存储由OpenStack 块存储服务(代号为Cinder)提供,它以驱动程序的形式支持多种后端。RHOSP 为各种支持的块存储类型提供卷驱动程序。这些类型包括: iSCSI、NFS、Ceph还可以使用其他主流存储供应商系统的驱动程序
创建卷:
openstack vloume create
- 1
- 删除卷:
- 可以从Project > Compute 下的Volumes 子选项卡删除卷
- 选中需要删除的卷的复选框。单击Delete Volumes 并确认选择
在实例被删除后,卷会自动从实例分离,并可连接到其他实例在实例被删除时,它所连接的卷中的数据不会被删除删除卷时,会向它填充零
将卷与实例连接:
- 卷可以连接到运行中的实例。卷的状态可以从控制面板的Volumes 选项卡中查看
- 卷的状态可以是Available 或In-Use。
在连接了卷后用户可以登录实例并挂载、格式化和使用磁盘
将卷与实例分离:
- 要分离卷,可前往Project>Compute 选项卡,再单击Volumes 类别
单击Manage Attachments,再单击Detach Volume 并确认更改,即可将该卷分离
在实例中使用卷:
- 要使用卷,可登录实例,使用一种文件系统格式化卷,然后挂载卷可以使用各种不同的文件系统,如ext4、xfs、zfs 和许多其他种类
- 如果一个卷同时连接到多个实例,请确保文件系统为只读,或者该文件系统是集群感知型
2)使用OpenStack CLI 管理永久存储:
- 提供Keystone 凭据文件以加载用户的凭据。
- 使用
openstack volume create
命令创建卷。利用–size 选项配置卷的大小。 - 使用
openstack server add volume
命令,将卷连接到可用的实例。 - 使用
openstack console url show
命令,检索实例控制台的URL。 - 打开Firefox,再导航到实例控制台URL。
- 单击Click here to only show console, 再根据需要接受自签名证书。
- 登录实例。
- 在与前面标识的卷关联的设备中创建一个分区,再利用一种文件系统格式化该分区(例如,通过
mkfs.xfs
命令使用XFS 文件系统格式化)。 - 创建一个目录,然后将分区挂载到该目录。向它写一个文件。
- 返回到包含OpenStack 凭据的终端,使用
openstack volume list
命令验证卷状态。 - 尝试使用
cinder transfer-create
命令为卷创建转让。这应当会引发错误,因为卷需要处于available 状态,但目前它处于in-use 状态 - 在实例控制台中,卸载该分区。
- 返叵到包含OpenStack 凭据的终端,使用
openstack server remove volume
命令将该卷从实例分离。 - 使用
cinder transfer-create
命令转让卷。命令输出将返回转让ID 和授权密钥。 - 提供Keystone 凭据环境文件以加载另一用户的凭据。
- 使用
cinder transfer-accept
命令接受卷转让。使用前面获取的转让ID 和授权密钥。 - 使用
openstack volume list
命令列出当前可用的卷。应当会列出转让的卷。 - 使用
openstack volume delete
命令删除该卷
4 管理快照
1)永久块存储快照
- 可以执行卷快照,保留卷在某一时点上的状态。在卷被删除时,可以从快照中
- 恢复卷
- 快照也可用于从正在运行的实例创建新镜像。为正在运行的实例执行实例快照
- 可能会导致数据不一致。该实例可能会无法引导或运行所需的服务。在这样的情形中,需要同步和冻结实例文件系统,然后再执行快照,从而获得永久的快照
- 快照创建之后,可用作单独的卷,该卷也可与实例连接。一个卷可以关联有多个快照。注意快照占用的空间根据块存储配额进行计数
2)使用Horizon 控制面板管理快照:略(去图形界面随便点点)
3)使用OpenStack CLI 管理快照:
- 提供Keystone 凭据环境文件以加载用户的凭据
- 使用
openstack snapshot create
命令,为可用的卷创建快照。使用–name 选项配置快照名称 - 使用
openstack volume create
命令,从快照创建卷。利用–snapshot 选项,将快照配置为用作卷的来源。利用–size 选项,将快照配置为具有源卷的大小 - 使用
openstack server add volume
命令,将卷连接到可用的实例 - 使用
openstack console url show
命令,检索实例控制台的URL - 打开Firefox,再导航到实例控制台URL。如有需要,接受自签名证书
- 登录实例
- 在与前面标识的设备关联的卷中创建一个分区。通过
mkfs.xfs
命令,使用XFS 文件系统格式化该分区 - 创建一个目录,然后将分区挂载到该目录。向它写一些文件
- 使用
openstack snapshot delete
命令,册除该快照
5 管理永久根磁盘
(我不怎么用)
1)使用卷的永久根磁盘:
- 在某些用例中,需要为实例的根磁盘增添持久性。这可以通过将可引导卷用作根磁盘来实现。这种可引导卷可以利用镜像进行创建
- 在控制面板中,可以将镜像用作来源来创建卷,单击Create Volume,它位于Project > Compute> Volumes 中。这会打开一个含有所有卷选项的对话框,包括Volume Source,从中可以选择Image。选择了Image 时,会显示一个名为 Use image as a source 的新窗口,其中可以选择卷的源镜像。创建了卷后,可以通过单击控制面板菜单中的Launch Instance,使用这个卷来部署实例。 选择要用作源磁盘的卷,而不选择镜像
- 类似地,可以将镜像用作卷来源通过CLI 来创建卷,只需利用openstack volume create 命令和–image 选项。当创建了卷时,可以通过
openstack server create
命令及--block-device
选项,利用这个卷来部署实例。
2)搁置实例:
- 关闭实例电源不会释放它在部署的计算节点,上所占用的资源,因此这些资源无法被重复利用。如果实例需要被长时间停止,OpenStack 计算服务支持搁置实例,使得计算节点资源能被释放
- 当实例被搁置时,如果该实例不基于卷,则对其根磁盘执行一个快照
- 在控制面板中,使用实例的Actions 菜单中的Shelve Instance和Unshelve
- Instance选项来支持实例搁置。在CLI中,则通过
openstack shelve
和openstack unshelve
命令来支持实例搁置。实例被搁置后,它会显示为SHELVED OFFLOADED状态