OpenStack:为不同的 hypervisor 使用临时和持久的根存储

使用 Ceph 镜像后端和使用本地镜像后端的计算节点。在某个时候,您可能希望构建 hypervisor 并使用它们的本地存储作为虚拟机根磁盘。使用本地存储将帮助您最大化 IO,并将 IO 延迟降至最低(与网络块存储相比)。但是,您将失去方便的功能,例如实时迁移(块迁移仍然是一种选择,但速度较慢)。计算节点上的数据也不会有良好的可用性级别。如果计算节点崩溃,用户将无法在一段时间内访问其虚拟机。另一方面,您希望构建 hypervisor,虚拟机的根磁盘将驻留在 Ceph 中。然后,您将能够无缝地使用实时迁移来移动虚拟机。虚拟机磁盘将具有高可用性,因此如果计算节点崩溃,您可以快速将虚拟机磁盘迁移到另一个计算节点。最终,您的目标是将它们解耦,幸运的是,OpenStack 提供了基于主机聚合的机制,可以帮助您实现目标。借助聚合过滤器,您将能够暴露这些 hypervisor。

I. 计算节点配置
I.1. 调度器 ¶
为了指示 Nova 调度器必须通过新的过滤器运行,您必须添加一个名为 AggregateInstanceExtraSpecsFilter 的新过滤器到过滤器中。借助此过滤器,nova-scheduler 将读取虚拟机附加规格
scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateIn
I.2. 本地存储配置 ¶
这是 Nova 的默认行为,因此无需配置任何内容,一切都是默认的。
I.3. Ceph 存储配置 ¶
编辑您的 nova.conf 并修改
[libvirt]
inject_partition=-2
disk_cachemodes=network=writeback
rbd_secret_uuid=a705a325-6cfb-466c-887e-2158f9cecc29
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST
inject_key=False
images_rbd_pool=vms
images_type=rbd
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=cinder
有关更多详细信息,请访问 官方 Ceph 文档。
II. OpenStack 配置
然后创建包含 ceph 计算节点和本地存储计算节点实例的聚合
bash $ nova aggregate-create ephemeral-compute-storage $ nova aggregate-create ceph-compute-storage
您可以使用 nova hypervisor-list 来检索 hypervisor 名称,如下所示
bash $ nova hypervisor-list +----+---------------------+ | ID | Hypervisor hostname | +----+---------------------+ | 5 | compute01 | | 2 | compute02 | | 8 | compute03 | | 11 | compute04 | +----+---------------------+
在此示例中,我将使用以下映射
本地存储
- compute01
- compute02
Ceph 存储
- compute03
- compute04
将主机添加到您的聚合
bash $ nova aggregate-add-host ephemeral-compute-storage compute01 $ nova aggregate-add-host ephemeral-compute-storage compute02 $ nova aggregate-add-host ceph-compute-storage compute03 $ nova aggregate-add-host ceph-compute-storage compute04
为该聚合创建一个新的元数据
bash $ nova aggregate-set-metadata <ephemeral-compute-storage aggregate ID> ephemeralcomputestorage=true $ nova aggregate-set-metadata <ceph-compute-storage aggregate ID> cephcomputestorage=true
小心,如果您修改聚合的名称,所有元数据都将被删除(在 Icehouse 中看到的行为)。
为本地存储和 ceph 存储实例创建一个新的 flavor
bash $ nova flavor-create m1.ephemeral-compute-storage 6 4096 40 2 $ nova flavor-create m1.ceph-compute-storage 7 4096 40 2
为该 flavor 分配一个特殊属性
bash $ nova flavor-key m1.ephemeral-compute-storage set ephemeralcomputestorage=true $ nova flavor-key m1.ceph-compute-storage set cephcomputestorage=true
简单:)