RBD 和 OPENSTACK(pacific版本)

您可以通过 将 Ceph 块设备映像附加到 OpenStack libvirt实例,这会将 QEMU 接口配置为librbd。 Ceph 跨集群内的多个 OSD 对卷进行条带化,这意味着大卷可以实现比独立服务器上的本地驱动器更好的性能!

要将 Ceph 块设备与 OpenStack 一起使用,您必须先安装 QEMU 、libvirt 和 OpenStack。我们建议为您的 OpenStack 安装使用单独的物理节点。OpenStack 建议至少 8GB 的​​ RAM 和四核处理器。下图描述了 OpenStack/Ceph 技术栈。

../../_images/51dd72cbc0174196f75f96e252d70d62bfe28ed6392c31d85e5a4975a0f4c564.png

重要:要将 Ceph 块设备与 OpenStack 一起使用,您必须有权访问正在运行的 Ceph 存储集群。

OpenStack 的三个部分与 Ceph 的块设备集成:

  • 映像(Images):OpenStack Glance 管理 VM 的映像。镜像是不可变的。OpenStack 将镜像视为二进制 blob 并相应地下载它们。

  • 卷(Volumes):卷是块设备。OpenStack 使用卷来引导 VM,或者将卷附加到正在运行的 VM。OpenStack 使用 Cinder 服务管理卷。

  • 访客磁盘(Guest Disks):访客(虚拟机)磁盘是访客操作系统磁盘。默认情况下,当你启动一个虚拟机时,它的磁盘在虚拟机管理程序的文件系统中显示为一个文件(通常在 /var/lib/nova/instances/<uuid>/下)。在 OpenStack Havana 之前,在 Ceph 中启动 VM 的唯一方法是使用 Cinder 的 boot-from-volume 功能。但是,现在可以在不使用 Cinder 的情况下直接启动 Ceph 中的每个虚拟机,这是有利的,因为它允许您通过实时迁移过程轻松执行维护操作。此外,如果您的虚拟机管理程序死机,nova evacuate也可以方便地在其他地方几乎无缝地触发和恢复虚拟机。这样做时, 排他锁可防止多个计算节点同时访问来宾磁盘。

您可以使用 OpenStack Glance 将镜像存储为 Ceph 块设备,并且可以使用 Cinder 使用镜像的写时复制克隆来引导 VM。

下面的说明详细说明了 Glance、Cinder 和 Nova 的设置,尽管它们不必一起使用。您可以在使用本地磁盘运行 VM 时将映像存储在 Ceph 块设备中,反之亦然。

重要:不建议使用 QCOW2 托管虚拟机磁盘。如果您想在 Ceph 中启动虚拟机(临时后端或从卷启动),请使用Glance 中的raw映像格式。

1. 创建一个池

默认情况下,Ceph 块设备位于rbd池中。您可以通过明确指定任何合适的池来使用它。我们建议为 Cinder 创建一个池,为 Glance 创建一个池。确保您的 Ceph 集群正在运行,然后创建池。

ceph osd pool create volumes
ceph osd pool create images
ceph osd pool create backups
ceph osd pool create vms

有关为池指定归置组数量的详细信息,请参阅创建池,有关应为池设置的归置数量的详细信息,请参阅归置组。

新创建的池必须在使用前进行初始化。使用该rbd工具初始化池:

rbd pool init volumes
rbd pool init images
rbd pool init backups
rbd pool init vms

2. 配置 OPENSTACK CEPH 客户端

运行glance-apicinder-volumecinder-backupnova-compute的节点充当 Ceph 客户端。每个都需要ceph.conf文件:

ssh {your-openstack-server} sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf

2.1 安装 CEPH 客户端包

glance-api节点上,您将需要 Python 绑定librbd

sudo apt-get install python-rbd
sudo yum install python-rbd

nova-computecinder-volumecinder-backup节点上,使用 Python 绑定和客户端命令行工具:

sudo apt-get install ceph-common
sudo yum install ceph-common

2.2 设置 CEPH 客户端身份验证

如果您启用了cephx 身份验证,请为 Nova/Cinder 和 Glance 创建一个新用户。执行以下操作:

ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=images' mgr 'profile rbd pool=images'
ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images' mgr 'profile rbd pool=volumes, profile rbd pool=vms'
ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups' mgr 'profile rbd pool=backups'

client.cinderclient.glanceclient.cinder-backup的密钥环添加到适当的节点并更改其所有权:

ceph auth get-or-create client.glance | ssh {your-glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring
ssh {your-glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
ceph auth get-or-create client.cinder | ssh {your-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring
ssh {your-cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder-backup | ssh {your-cinder-backup-server} sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
ssh {your-cinder-backup-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring

运行nova-compute的节点需要nova-compute 进程的密钥环文件:

ceph auth get-or-create client.cinder | ssh {your-nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring

他们还需要将用户 client.cinder的密钥存储在libvirtlibvirt 进程需要它在从 Cinder 附加块设备时访问集群。

在运行nova-compute的节点上创建密钥的临时副本:

ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key

然后,在计算节点上,将密钥添加到libvirt并删除密钥的临时副本:

uuidgen
457eb676-33da-42ec-9a8c-9293d545c337

cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF
sudo virsh secret-define --file secret.xml
Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml

保存 secret 的 uuid 以供nova-compute以后配置。

重要:您不一定需要所有计算节点上的 UUID 相同。但是从平台一致性的角度来看,最好保持相同的 UUID。

3. 配置 OPENSTACK 以使用 CEPH

3.1 配置 GLANCE 

Glance 可以使用多个后端来存储镜像。要默认使用 Ceph 块设备,请按如下方式配置 Glance。

3.1.1 KILO 版本及以后

[glance_store]部分下编辑/etc/glance/glance-api.conf并添加:

[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8

有关 Glance 中可用配置选项的更多信息,请参阅 OpenStack 配置参考:http ://docs.openstack.org/ 。

3.1.2 启用镜像的写时复制克隆

请注意,这会通过 Glance 的 API 公开后端位置,因此启用此选项的端点不应公开访问。

  • 除 MITAKA 版本以外的任何 OPENSTACK 版本

如果要启用镜像的写时复制克隆,还要在以下[DEFAULT]部分添加:

show_image_direct_url = True

3.1.3 禁用缓存管理(任何 OPENSTACK 版本)

假设您的配置文件具有以下flavor = keystone+cachemanagement内容,请禁用 Glance 缓存管理以避免镜像被缓存/var/lib/glance/image-cache/

[paste_deploy]
flavor = keystone

3.1.4 镜像属性

我们建议为您的镜像使用以下属性:

  • hw_scsi_model=virtio-scsi: 添加 virtio-scsi 控制器并获得更好的性能和对丢弃操作的支持

  • hw_disk_bus=scsi:将每个cinder块设备连接到该控制器

  • hw_qemu_guest_agent=yes: 启用 QEMU 来宾代理

  • os_require_quiesce=yes: 通过 QEMU 来宾代理发送 fs-freeze/thaw 调用

3.2 配置 CINDER

OpenStack 需要一个驱动程序来与 Ceph 块设备交互。您还必须指定块设备的池名称。在您的 OpenStack 节点上, 在/etc/cinder/cinder.conf中添加以下内容进行编辑:

[DEFAULT]
...
enabled_backends = ceph
glance_api_version = 2
...
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1

如果您使用的是cephx authentication,还请配置您添加到libvirt的密码的用户和 uuid,如前所述:

[ceph]
...
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

请注意,如果您要配置多个 cinder 后端,则 glance_api_version = 2必须在[DEFAULT]部分中。

3.3 配置 CINDER 备份

OpenStack Cinder Backup 需要一个特定的守护进程,所以不要忘记安装它。在 Cinder Backup 节点上,编辑/etc/cinder/cinder.conf并添加:

backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

3.4 配置 NOVA 以附加 CEPH RBD 块设备

为了附加 Cinder 设备(普通块或通过从卷启动),您必须告诉 Nova(和 libvirt)在附加设备时要引用哪个用户和 UUID。libvirt 将在与 Ceph 集群连接和认证时引用此用户。

[libvirt]
...
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

Nova 临时后端也使用这两个标志。

3.5 配置 NOVA 

为了直接从 Ceph 卷引导虚拟机,您必须为 Nova 配置临时后端。

建议在 Ceph 配置文件中启用 RBD 缓存;自 Giant 版本发布以来,这已默认启用。此外,启用客户端管理套接字允许收集指标,并且对于故障排除非常宝贵。

可以在 hypvervisor(Nova 计算)节点上访问此套接字:

ceph daemon /var/run/ceph/ceph-client.cinder.19195.32310016.asok help

要启用 RBD 缓存和管理套接字,请确保在每个虚拟机管理程序上 ceph.conf文件包含:

[client]
    rbd cache = true
    rbd cache writethrough until flush = true
    admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
    log file = /var/log/qemu/qemu-guest-$pid.log
    rbd concurrent management ops = 20

为这些目录配置权限:

mkdir -p /var/run/ceph/guests/ /var/log/qemu/
chown qemu:libvirtd /var/run/ceph/guests /var/log/qemu/

请注意,用户qemu和组libvirtd可能因您的系统而异。提供的示例适用于基于 RedHat 的系统。

提示:如果您的虚拟机已经在运行,您只需重新启动它即可启用管理套接字。

4. 重启 OPENSTACK 

要激活 Ceph 块设备驱动程序并将块设备池名称加载到配置中,您必须重新启动相关的 OpenStack 服务。对于基于 Debian 的系统,在适当的节点上执行这些命令:

sudo glance-control api restart
sudo service nova-compute restart
sudo service cinder-volume restart
sudo service cinder-backup restart

对于基于 Red Hat 的系统,执行:

sudo service openstack-glance-api restart
sudo service openstack-nova-compute restart
sudo service openstack-cinder-volume restart
sudo service openstack-cinder-backup restart

一旦 OpenStack 启动并运行,您应该能够创建一个卷并从中引导。

5. 从块设备启动

您可以使用 Cinder 命令行工具从映像创建卷:

cinder create --image-id {id of image} --display-name {name of volume} {size of volume}

您可以使用qemu-img从一种格式转换为另一种格式。例如:

qemu-img convert -f {source-format} -O {output-format} {source-filename} {output-filename}
qemu-img convert -f qcow2 -O raw precise-cloudimg.img precise-cloudimg.raw

当 Glance 和 Cinder 都使用 Ceph 块设备时,该映像是一个写时复制克隆,因此可以快速创建新卷。在 OpenStack 仪表板中,您可以通过执行以下步骤从该卷引导:

  1. 启动一个新实例。

  2. 选择与写时复制克隆关联的镜像。

  3. 选择“从卷启动”。

  4. 选择您创建的卷。

posted @ 2022-04-11 17:07  Varden  阅读(241)  评论(0编辑  收藏  举报