OpenStack 块设备指南
配置 Ceph、QEMU、libvirt 和 OpenStack,以将 Ceph 用作 OpenStack 的后端。
摘要
第 1 章 Ceph 块设备和 OpenStack
Red Hat Enterprise Linux OpenStack Platform Director 提供了两种使用 Ceph 作为 Glance 后端的方法:Cinder、Cinder Backup 和 Nova:
- OpenStack 创建 Ceph 存储集群: OpenStack Director 可以创建 Ceph 存储集群。这需要为 Ceph OSD 配置模板。OpenStack 处理 Ceph 节点的安装和配置。使用此场景时,OpenStack 将安装 Ceph 监视器和 OpenStack 控制器节点。
- OpenStack 连接到现有的 Ceph 存储集群: OpenStack Director 使用红帽 OpenStack 平台 9 和更高版本连接到 Ceph 监控器并配置 Ceph 存储集群,以用作 OpenStack 的后端。
这些方法是将 Ceph 配置为 OpenStack 后端的首选方法,因为它们将自动处理大部分安装和配置。
本文档详细介绍了配置 Ceph、QEMU、libvirt 和 OpenStack 以将 Ceph 用作后端的手动步骤。本文档适用于那些不想使用 RHEL OSP Director 的用户。
需要一个正在运行的 Ceph 存储集群和至少一个 OpenStack 节点,才能将 Ceph 块设备用作 OpenStack 的后端。
OpenStack 的三个部分与 Ceph 的块设备集成:
- 映像: OpenStack Glance 管理虚拟机的映像。镜像不可变。OpenStack 将镜像视为二进制 Blob,并相应地下载它们。
- 卷: 卷是块设备。OpenStack 使用卷引导虚拟机,或者将卷附加到运行中的虚拟机。OpenStack 使用 Cinder 服务管理卷。Ceph 可以充当 OpenStack Cinder 和 Cinder 备份的黑端。
-
客户机磁盘: 客户机磁盘是客户机操作系统磁盘。默认情况下,引导虚拟机时,其磁盘默认显示为虚拟机监控程序文件系统中
/var/lib/nova/instances/<uuid>/
目录下的文件。OpenStack Glance 可以在 Ceph 块设备中存储镜像,并且可以使用 Cinder 通过映像写时复制克隆来启动虚拟机。
Ceph 不支持用于托管虚拟机磁盘的 QCOW2。要引导虚拟机(临时后端或从卷引导),Glance 镜像格式必须是 RAW。
OpenStack 可以将 Ceph 用于镜像、卷或客户机磁盘虚拟机。不要求全部使用。
其它资源
- 如需了解更多详细信息,请参阅 Red Hat OpenStack Platform 文档。
第 2 章 为 OpenStack 安装和配置 Ceph
作为存储管理员,您必须安装和配置 Ceph,然后红帽 OpenStack 平台才能使用 Ceph 块设备。
2.1. 先决条件
- 新的或现有的红帽 Ceph 存储集群。
2.2. 为 Openstack 创建 Ceph 池
创建 Ceph 池以用于 OpenStack.默认情况下,Ceph 块设备使用 rbd
池,但您可以使用任何可用的池。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
流程
验证 Red Hat Ceph Storage 集群是否正在运行,并处于
HEALTH_OK
状态:[root@mon ~]# ceph -s
创建 Ceph 池:
示例
[root@mon ~]# ceph osd pool create volumes 128 [root@mon ~]# ceph osd pool create backups 128 [root@mon ~]# ceph osd pool create images 128 [root@mon ~]# ceph osd pool create vms 128
在上例中,
128
是放置组的数量。重要红帽建议使用 Ceph 放置组的每个池计算器 来计算池的适当 PG 数量。
其它资源
- 有关创建 池 的更多详细信息,请参阅 存储策略 指南中的池章节。
2.3. 在 Openstack 上安装 Ceph 客户端
在红帽 OpenStack 平台上安装 Ceph 客户端软件包,以访问 Ceph 存储集群。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 访问 Ceph 软件存储库。
- OpenStack Nova、Cinder、Cinder Backup 和 Glance 节点的根级别访问权限。
流程
在 OpenStack Nova 中,Cinder 备份节点安装以下软件包:
[root@nova ~]# yum install python-rbd [root@nova ~]# yum install ceph-common
在 OpenStack Glance 节点上安装
python-rbd
软件包:[root@glance ~]# yum install python-rbd
2.4. 将 Ceph 配置文件复制到 Openstack
将 Ceph 配置文件复制到 nova-compute、cinder-
backup
、cinder-volume
和 glance-api
节点。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 访问 Ceph 软件存储库。
- OpenStack Nova、Cinder 和 Glance 节点的根级别访问权限。
流程
将 Ceph 配置文件从 Ceph 监控节点复制到 OpenStack Nova、Cinder、Cinder Backup 和 Glance 节点:
[root@mon ~]# scp /etc/ceph/ceph.conf OPENSTACK_NODES:/etc/ceph
2.5. 配置 Ceph 客户端身份验证
配置 Ceph 客户端的身份验证,以访问红帽 OpenStack 平台。
先决条件
- Ceph 监控节点的根级别访问权限.
- 一个正在运行的 Red Hat Ceph Storage 集群。
流程
从 Ceph 监控节点,为 Cinder、Cinder Backup 和 Glance 创建新用户:
[root@mon ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' [root@mon ~]# ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' [root@mon ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
为
client.cinder、client.cinder
-backup 和
添加密钥环到适当的节点,并更改其所有权:client.
glance[root@mon ~]# ceph auth get-or-create client.cinder | ssh CINDER_VOLUME_NODE sudo tee /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ssh CINDER_VOLUME_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ceph auth get-or-create client.cinder-backup | ssh CINDER_BACKUP_NODE tee /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ssh CINDER_BACKUP_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ceph auth get-or-create client.glance | ssh GLANCE_API_NODE sudo tee /etc/ceph/ceph.client.glance.keyring [root@mon ~]# ssh GLANCE_API_NODE chown glance:glance /etc/ceph/ceph.client.glance.keyring
OpenStack Nova 节点需要
nova-compute
进程的 keyring 文件:[root@mon ~]# ceph auth get-or-create client.cinder | ssh NOVA_NODE tee /etc/ceph/ceph.client.cinder.keyring
OpenStack Nova 节点还需要将
client.cinder
用户的机密密钥存储在libvirt
中。libvirt
进程需要 secret 密钥来访问集群,同时从 Cinder 附加块设备。在 OpenStack Nova 节点上创建 secret 密钥的临时副本:[root@mon ~]# ceph auth get-key client.cinder | ssh NOVA_NODE tee client.cinder.key
如果存储集群包含使用
exclusive-lock
功能的 Ceph 块设备镜像,请确保所有 Ceph 块设备用户都有将客户端列入黑名单的权限:[root@mon ~]# ceph auth caps client.ID mon 'allow r, allow command "osd blacklist"' osd 'EXISTING_OSD_USER_CAPS'
返回到 OpenStack Nova 节点:
[root@mon ~]# ssh NOVA_NODE
为 secret 生成 UUID,并保存 secret 的 UUID,以便稍后配置
nova-compute
:[root@nova ~]# uuidgen > uuid-secret.txt
注意您不一定需要所有 Nova 计算节点上的 UUID。但是,从平台一致性角度来看,最好保持相同的 UUID。
在 OpenStack Nova 节点上,将 secret 密钥添加到
libvirt
中并删除密钥的临时副本:cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>`cat uuid-secret.txt`</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF
为
libvirt
设置并定义 secret:[root@nova ~]# virsh secret-define --file secret.xml [root@nova ~]# virsh secret-set-value --secret $(cat uuid-secret.txt) --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
其它资源
- 如需了解更多详细信息,请参阅《 红帽 Ceph 存储管理指南》 中的管理 Ceph 用户 章节。
第 3 章 将 OpenStack 配置为使用 Ceph 块设备
作为存储管理员,您必须配置红帽 OpenStack 平台以使用 Ceph 块设备。红帽 OpenStack 平台可以将 Ceph 块设备用于 Cinder、Cinder Backup、Glance 和 Nova。
3.1. 先决条件
- 新的或现有的红帽 Ceph 存储集群。
- 正在运行的红帽 OpenStack 平台环境。
3.2. 配置 Cinder 以使用 Ceph 块设备
红帽 OpenStack 平台可以使用 Ceph 块设备为 Cinder 卷提供后端存储。
先决条件
- 对 Cinder 节点的根级别访问权限.
-
Ceph
卷
池. - 与 Ceph 块设备交互的机密的用户和 UUID。
流程
编辑 Cinder 配置文件:
[root@cinder ~]# vim /etc/cinder/cinder.conf
在
[DEFAULT]
部分中,启用 Ceph 作为 Cinder 的后端:enabled_backends = ceph
确保 Glance API 版本设置为 2。如果您要在
enabled_backends
中配置多个 Cinder 后端,glance_api_version = 2
设置必须位于[DEFAULT]
部分中,而不是[ceph]
部分中。glance_api_version = 2
-
在
cinder.conf
文件中创建[ceph]
部分。在[ceph]
部分下的下列步骤中添加 Ceph 设置。 指定
volume_driver
设置并将其设置为使用 Ceph 块设备驱动程序:volume_driver = cinder.volume.drivers.rbd.RBDDriver
指定集群名称和 Ceph 配置文件位置。在典型的部署中,Ceph 集群具有集群名称
ceph
和位于/etc/ceph/ceph.conf
的 Ceph 配置文件。如果 Ceph 集群名称不是ceph
,请相应地指定集群名称和配置文件路径:rbd_cluster_name = us-west rbd_ceph_conf = /etc/ceph/us-west.conf
默认情况下,红帽 OpenStack 平台将 Ceph 卷存储在
rbd
池中。要使用之前创建的volumes
池,请指定rbd_pool
设置并设置volumes
池:rbd_pool = volumes
Red Hat OpenStack Platform 没有卷的默认用户名或 secret 的 UUID。指定
rbd_user
,并将它设置为cinder
用户。然后,指定rbd_secret_uuid
设置,并将其设置为uuid-secret.txt
文件中存储的 UUID:rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964
指定以下设置:
rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
当您将 Cinder 配置为使用 Ceph 块设备时,配置文件可能类似如下:
示例
[DEFAULT] enabled_backends = ceph glance_api_version = 2 … [ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
注意考虑删除默认的
[lvm]
部分及其设置:
3.3. 配置 Cinder 备份以使用 Ceph 块设备
红帽 OpenStack 平台可以将 Cinder 备份配置为使用 Ceph 块设备。
先决条件
- 对 Cinder 节点的根级别访问权限.
流程
编辑 Cinder 配置文件:
[root@cinder ~]# vim /etc/cinder/cinder.conf
-
前往配置文件的
[ceph]
部分。 指定
backup_driver
设置并将其设置为 Ceph 驱动程序:backup_driver = cinder.backup.drivers.ceph
指定
backup_ceph_conf
设置并指定 Ceph 配置文件的路径:backup_ceph_conf = /etc/ceph/ceph.conf
注意Cinder 备份 Ceph 配置文件可能与用于 Cinder 的 Ceph 配置文件不同。例如,它可以指向不同的 Ceph 存储群集。
指定用于备份的 Ceph 池:
backup_ceph_pool = backups
注意用于 Cinder 备份的 Ceph 配置文件可能与用于 Cinder 的 Ceph 配置文件不同。
指定
backup_ceph_user
设置,并将用户指定为cinder-backup
:backup_ceph_user = cinder-backup
指定以下设置:
backup_ceph_chunk_size = 134217728 backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
当包含 Cinder 选项时,cinder
.conf
文件的[ceph]
部分可能类似如下:示例
[ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 backup_driver = cinder.backup.drivers.ceph backup_ceph_user = cinder-backup backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
验证是否启用了 Cinder 备份:
[root@cinder ~]# cat /etc/openstack-dashboard/local_settings | grep enable_backup
如果
enable_backup
设为False
,请编辑local_settings
文件并将它设为True
。示例
OPENSTACK_CINDER_FEATURES = { 'enable_backup': True, }
3.4. 将 Glance 配置为使用 Ceph 块设备
红帽 OpenStack 平台可以将 Glance 配置为使用 Ceph 块设备。
先决条件
- Glance 节点的根级别访问权限.
流程
若要默认使用 Ceph 块设备,请编辑
/etc/glance/glance-api.conf
文件。如果您使用了不同的池,用户或 Ceph 配置文件设置会应用适当的值。如有必要,取消注释以下设置并相应地更改其值:[root@glance ~]# vim /etc/glance/glance-api.conf
stores = rbd default_store = rbd rbd_store_chunk_size = 8 rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
要启用写时复制(CoW)克隆,请将
show_image_direct_url
设置为True
。show_image_direct_url = True
重要启用 CoW 通过 Glance 的 API 公开后端位置,因此不应公开访问端点。
如有必要,禁用缓存管理。
该类别
应仅设置为keystone
,而不应设置为keystone+cachemanagement
。flavor = keystone
红帽推荐镜像的以下属性:
hw_scsi_model=virtio-scsi hw_disk_bus=scsi hw_qemu_guest_agent=yes os_require_quiesce=yes
virtio-scsi
控制器获得了更好的性能,并且为丢弃操作提供支持。对于使用 SCSI/SAS 驱动器的系统,请将每个 Cinder 块设备连接到该控制器。另外,启用 QEMU 客户机代理并通过 QEMU 客户机代理发送fs-freeze/thaw
调用。
3.5. 将 Nova 配置为使用 Ceph 块设备
红帽 OpenStack 平台可以将 Nova 配置为使用 Ceph 块设备。
您必须将每个 Nova 节点配置为使用临时后端存储设备,这将允许所有虚拟机使用 Ceph 块设备。
先决条件
- 对 Nova 节点的根级别访问权限.
流程
编辑 Ceph 配置文件:
[root@nova ~]# vim /etc/ceph/ceph.conf
将以下部分添加到 Ceph 配置文件的
[client]
部分:[client] rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 20 admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/ceph/qemu-guest-$pid.log
为 admin socket 和日志文件创建新目录,并更改目录权限以使用
qemu
用户和libvirtd
组:[root@nova ~]# mkdir -p /var/run/ceph/guests/ /var/log/ceph/ [root@nova ~]# chown qemu:libvirt /var/run/ceph/guests /var/log/ceph/
注意这些目录必须被 SELinux 或 AppArmor 允许。
在每个 Nova 节点上,编辑
/etc/nova/nova.conf
文件。在[libvirt]
部分下,配置以下设置:示例
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 disk_cachemodes="network=writeback" inject_password = false inject_key = false inject_partition = -2 live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" hw_disk_discard = unmap
将
rbd_user_secret
中的 UUID 替换为uuid-secret.txt
文件中的 UUID。
3.6. 重启 OpenStack 服务
通过重新启动红帽 OpenStack 平台服务,您可以激活 Ceph 块设备驱动程序。
先决条件
- 对红帽 OpenStack 平台节点的根级别访问权限.
流程
- 将块设备池名称和 Ceph 用户名加载到 配置文件。
修改相应配置文件后,重启适当的 OpenStack 服务:
[root@osp ~]# systemctl restart openstack-cinder-volume [root@osp ~]# systemctl restart openstack-cinder-backup [root@osp ~]# systemctl restart openstack-glance-api [root@osp ~]# systemctl restart openstack-nova-compute