千家信息网

ceph与openstack结合提供存储后端的示例分析

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章将为大家详细讲解有关ceph与openstack结合提供存储后端的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。CEPH BLOCK DEVICES
千家信息网最后更新 2025年12月01日ceph与openstack结合提供存储后端的示例分析

这篇文章将为大家详细讲解有关ceph与openstack结合提供存储后端的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

CEPH BLOCK DEVICES AND OPENSTACK

官方文档:http://ceph.com/docs/master/rbd/rbd-openstack/

环境:ubuntu14.04 server,openstack icehouse版本, ceph version 0.94.2

libvirt 配置了 librbd 的 QEMU 接口,通过它可以在 OpenStack 中使用 Ceph 块设备镜像。Ceph 块设备镜像被当作集群对象,这意味着它比独立的服务器有更好的性能。

在 OpenStack 中使用 Ceph 块设备,必须首先安装 QEMU,libvirt 和 OpenStack。建议 OpenStack 安装的时候使用独立的物理节点。OpenStack 节点建议最小 8G RAM和四核处理器。下图描述了 OpenStack 和 Ceph 技术层次。

Important:要在 OpenStack 中使用 Ceph,必须首先运行 Ceph 存储集群

OpenStack 与 Ceph 的三个结合点:

镜像:OpenStack Glance 管理虚拟机镜像。镜像是不变的。OpenStack 把镜像当作二进制对象并以此格式下载。

卷:卷是块设备。OpenStack 使用卷来启动虚拟机,或者绑定卷到运行中的虚拟机。OpenStack 使用 Cinder 服务管理卷。

客户磁盘:客户磁盘是客户操作系统磁盘。默认情况下,当启动一台虚拟机时,它的系统盘以文件的形式出现在 hypervisor 系统上(通常/var/lib/nova/instances/)。在 OpenStack Havana 以前的版本,在 Ceph 中启动虚拟机的唯一方式是使用 Cinder 的 boot-from-volume 功能,现在能够在 Ceph 中直接启动虚拟机而不用依赖于 Cinder,这是非常有利的因为它能够让你很容易的进行虚拟机的热迁移。除此之外,如果 hypervisor 挂掉还能够方便地触发 nova evacute 然后无缝得在其他的地方继续运行虚拟机。

可以使用 OpenStack Glance 来存储镜像在 Ceph 块设备中,也可以使用 Cinder 通过镜像的写时复制来启动虚拟机。

下面详细介绍 Glance,Cinder 和 Nova 的配置过程,尽管它们没有必要一起使用。当虚拟机运行使用本地磁盘运行的时候,可以把镜像存储在 Ceph 块设备中,或者正相反。

Important:Ceph 不支持 QCOW2 格式的虚拟机磁盘。所以,如果想要在 Ceph 中启动虚拟机(后端文件或者从卷启动),Glance 镜像必须是 RAW格式

创建一个池

默认情况下,Ceph 块设备使用 rbd 池。可以使用任何能够使用的池。建议为 Cinder 和 Glance 单独创建池。确保 Ceph 集群正常运行,然后创建池。

ceph osd pool create volumes 128ceph osd pool create images 128ceph osd pool create backups 128(注:未安装cinder-backup可不创建)ceph osd pool create vms 128

看 Create a Pool 和 Placement Groups 来了解指定池的 pg 数量的详细信息和应该为你的池指定多少 pg。

配置 OpenStack Ceph 客户端

运行 glance-api,cinder-volume,nova-compute 和 cinder-backup(注:未安装) 的节点是 Ceph 客户端。每一个节点都需要 ceph.conf 文件:

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

安装 Ceph 客户端包

在 glance-api 节点,需要为 librbd 绑定 Python

sudo apt-get install python-ceph

在 nova-compute,cinder-backup 和 cinder-volume 节点要用到 Python 和 Ceph 客户端命令行工具:

sudo apt-get install ceph-common

设置 Ceph 客户端认证

如果使用了 cephx authentication,创建一个新用户为 Nova/Cinder 和 Glance。执行下面的命令:

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'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.glance添加密钥来访问节点并改变所有者:

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

运行 nova-compute 的节点 nova-compute 进程需要密钥文件。它们也存储 client.cinder 用户的密钥在 libvirt。libvirt 进程在 Cinder 中绑定块设备时需要用到它来访问集群。

创建一个临时的密钥文件副本在运行 nova-compute 的节点:

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

然后在计算节点,为 libvirt 添加密钥文件并且移除临时的副本密钥:

$~:uuidgen457eb676-33da-42ec-9a8c-9293d545c337$~:cat > secret.xml <  457eb676-33da-42ec-9a8c-9293d545c337      client.cinder secret  EOF$~:sudo virsh secret-define --file secret.xmlSecret 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

配置 OpenStack 使用 Ceph

配置 Glance

Glance 能够使用多种后端来存储镜像。默认使用 Ceph 块设备,配置 Glance 如下:

Juno 之前的版本编辑 /etc/glance/glance-api.conf 并且添加下面的 [DEFAULT] 部分:

default_store = rbdrbd_store_user = glancerbd_store_pool = imagesrbd_store_chunk_size = 8

Juno

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

[DEFAULT]...default_store = rbd...[glance_store]stores = rbdrbd_store_pool = imagesrbd_store_user = glancerbd_store_ceph_conf = /etc/ceph/ceph.confrbd_store_chunk_size = 8

更多关于 Glance 的配置信息请看:http://docs.openstack.org/trunk/config-reference/content/section_glance-api.conf.html。

Important:Glance 还没有完全移到 'store'。所以仍然需要在 DEFAULT 部分配置 store。

所有 OpenStack 版本

如果要启用镜像的写时复制功能,添加下面的 [DEFAULT] 部分:

show_image_direct_url = True

注意这会在 Glance API 中暴露后端存储位置,所以 endpoint 不应该被公开访问

禁用 Glance 缓存管理来避免镜像被缓存到 /var/lib/glance/image-cache/,确保配置文件中有 flavor = keystone+cachemanagement:

[paste_deploy] flavor = keystone

配置 Cinder

OpenStack 需要驱动来与 Ceph 块设备交互。必须为块设备指定池,在 OpenStack 节点编辑 /etc/cinder/cinder.conf 并添加:

volume_driver = cinder.volume.drivers.rbd.RBDDriverrbd_pool = volumesrbd_ceph_conf = /etc/ceph/ceph.confrbd_flatten_volume_from_snapshot = falserbd_max_clone_depth = 5rbd_store_chunk_size = 4rados_connect_timeout = -1glance_api_version = 2

配置 Nova 绑定 Ceph rbd 块设备

为了绑定 Cinder 设备(块设备或者启动卷),必须告诉 Nova(和 libvirt)用户和 UUID。libvirt 在与 Ceph 集群进行连接和认证的时候提供这个用户。

rbd_user = cinderrbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

这两个配置项同样用于 Nova 的后端。

配置 Nova

为了直接从 Ceph 启动所有虚拟机,你必须配置 Nova 的临时后端。

建议在 Ceph 配置文件中启用 RBD 缓存(从 Giant 版本默认启用)。还有,启用 admin socket 对于故障排除的时候很有帮助。每台使用 Ceph 块设备的虚拟机都有一个 socket 有助于性能分析和错误判断。

socket 可以通过这种方式访问:

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

现在,在每个计算节点编辑 Ceph 配置文件:

[client]    rbd cache = true    rbd cache writethrough until flush = trueadmin socket = /var/run/ceph/$cluster-$type.$id.$pid.$cctid.asok

Tip:如果虚拟机正在运行,可以直接重启来获得 socket。

HAVANA 和 ICEHOUSE

HAVANA 和 ICEHOUSE 需要补丁来实现写时复制并且修复 rbd 临时磁盘的镜像大小和热迁移 Bug。

这些可用的分支基于主干Nova stable/havana 和 stable/icehouse。使用它们不是强制性的但是是非常建议的,为了利用写时复制的功能。

在每个计算节点,编辑 /etc/nova/nova.conf 并且添加:

libvirt_images_type = rbdlibvirt_images_rbd_pool = vmslibvirt_images_rbd_ceph_conf = /etc/ceph/ceph.confrbd_user = cinderrbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

禁用文件注入也是一个好的习惯。启动一个实例的时候,Nova 通常试图去打开虚拟机的根文件系统。然后 Nova 注入值比如密码,ssh 密钥等,直接进入文件系统。然而,最好依赖元数据服务和 cloud-init。

在每个计算节点,编辑 /etc/nova/nova.conf 并且添加:

libvirt_inject_password = falselibvirt_inject_key = falselibvirt_inject_partition = -2

Juno

在 Juno 版本,Ceph 块设备被移到 [libvirt] 部分。在每个计算节点,编辑 /etc/nova/nova.conf 在 [libvirt] 部分添加:

[libvirt]images_type = rbdimages_rbd_pool = vmsimages_rbd_ceph_conf = /etc/ceph/ceph.confrbd_user = cinderrbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

禁用文件注入也是一个好的习惯。启动一个实例的时候,Nova 通常试图去打开虚拟机的根文件系统。然后 Nova 注入值比如密码,ssh 密钥等,直接进入文件系统。然而,最好依赖元数据服务和 cloud-init。

在每个计算节点,编辑 /etc/nova/nova.conf 并且添加:

libvirt_inject_password = falselibvirt_inject_key = falselibvirt_inject_partition = -2

确保热迁移,使用下面的标志:

live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"

重启 OpenStack

激活 Ceph 块设备驱动并且载入块设备池的名称到配置中,必须重启 OpenStack。

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

OpenStack 启动并运行起来之后,就能够创建一个卷并从它启动。

从块设备启动

使用下面的 Cinder 命令创建一个启动卷:

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

注意镜像必须是 RAW 格式。可以使用 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.rawglance image-create --name cirros --file cirros-0.3.2-x86_64-disk.raw --disk-format raw --container-format bare --is-public True

或者:

在Dashboard中创建一个启动卷:

关于"ceph与openstack结合提供存储后端的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

设备 配置 节点 文件 镜像 运行 存储 客户 密钥 系统 时候 版本 磁盘 部分 客户端 建议 格式 集群 面的 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天气预报代理服务器 三峡大学网络安全研究生录取分数 平谷区正规软件开发价格网 网鼎杯网络安全大赛第一名奖励 数据库安全测试主要涉及漏洞 华为断垄网络技术 网络安全的人才 会玩显示未连接服务器什么意思 如何让mc服务器优化 雨人互联网科技 网通服务器租 网络安全员条件 广东什么是网络技术分类创新服务 数据库知识要点 认识数据库 金华市肥猫网络技术有限公 信息系统的网络安全一共分为几级 甘肃省网络安全知识竞赛平台 网络安全宣传周怎么上网 重庆库存外贸软件开发 精灵4pro怎样更新数据库 狭义广义网络安全 重大网络安全事件处置记录表 深圳访客管理软件开发方案 湖北网络安全招聘应届生 系统集成软件开发用什么语言 青岛企业软件开发代码 杭州一站式网络技术咨询热线 软件开发需要学什么东西 软件开发类合同技术协议样本
0