ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenStack与Ceph超融合部署实战:从环境配置到生产优化

OpenStack与Ceph超融合部署实战:从环境配置到生产优化 最近在规划私有云平台时遇到了一个典型需求如何将计算Nova、存储Cinder与底层分布式存储Ceph深度整合构建一个稳定、高性能且易于管理的超融合基础设施。传统的分离式架构计算节点用本地盘存储用独立SAN在弹性、可靠性和运维复杂度上逐渐显现瓶颈。本文将基于 OpenStack 与 Ceph 的集成实战完整拆解从 Ceph 集群准备、OpenStack 服务配置到虚拟机创建与卷挂载的全流程并附上生产环境中常见的问题排查与优化建议。无论你是正在搭建测试环境还是为生产系统寻求架构优化方案都能从中获得可直接复用的代码与配置。1. 超融合架构核心概念与价值在深入实操之前我们有必要厘清几个关键概念理解为什么“Ceph OpenStack”是构建超融合私有云的黄金组合。什么是超融合超融合基础设施HCI的核心思想是将计算、存储、网络等资源通过软件定义的方式整合到标准的商用服务器集群中。与传统三层架构计算、存储、网络设备分离相比它通过分布式软件消除了专用的存储硬件使所有节点都能同时提供计算和存储能力从而提升资源利用率、简化运维并增强横向扩展能力。Ceph 在其中的角色Ceph 是一个开源的、统一的、分布式存储系统以其卓越的可扩展性、可靠性和性能著称。在 OpenStack 超融合场景中Ceph 主要承担两大核心存储后端镜像存储Glance 存储虚拟机镜像ISO、QCOW2等。所有计算节点从 Ceph 集群拉取镜像无需在本地缓存极大加快了虚拟机创建速度并节省存储空间。块存储Cinder 为虚拟机提供持久化块设备云硬盘。Cinder 卷以 RBDRADOS Block Device的形式存在于 Ceph 中支持快照、克隆等高级功能。实例存储Nova 虚拟机的系统盘和数据盘可以直接使用 Ceph RBD实现实例的实时迁移Live Migration和故障恢复等高可用特性。为什么选择 Ceph 对接 OpenStack消除单点故障 Ceph 数据多副本或纠删码分布硬件故障不影响服务。实现实时迁移 虚拟机磁盘在共享的 Ceph 上计算节点间迁移无需拷贝磁盘数据仅迁移内存状态速度极快。简化存储管理 统一存储池管理镜像、卷和实例磁盘无需为不同服务配置独立的存储后端。高性能与扩展性 Ceph 性能随节点增加线性增长完美匹配云平台的弹性扩展需求。接下来我们将从环境准备开始一步步实现对接。2. 环境准备与版本说明一个稳定的基础环境是成功集成的第一步。以下配置基于一个经过验证的版本组合在实际部署时请务必参考官方文档的版本兼容性矩阵。基础环境规划操作系统 Ubuntu 20.04 LTS 或 CentOS 8 Stream本文示例以 Ubuntu 20.04 为主。部署架构 至少3个节点同时运行 Ceph 和 OpenStack 服务超融合节点。node1: Ceph Monitor, Ceph Manager, Ceph OSD, OpenStack Controller (Nova, Glance, Cinder API/Scheduler)node2: Ceph OSD, OpenStack Compute (Nova Compute)node3: Ceph OSD, OpenStack Compute (Nova Compute)网络 管理网、存储网Ceph Cluster Network、外部网分离至少万兆网络用于存储流量。软件版本Ceph: Pacific (16.2.x) 或 Quincy (17.2.x)。Pacific 版本稳定社区资源丰富。OpenStack: Yoga 或 Antelope。Yoga 版本与 Ceph Pacific 兼容性良好。Python: 3.8部署工具 可以使用cephadm部署 Ceph使用kolla-ansible或手动安装 OpenStack。关键前提Ceph 集群已健康部署并运行。你需要拥有一个活跃的 Ceph 集群并创建了用于 OpenStack 的存储池如volumes,vms,images。OpenStack 基础服务Keystone, Nova, Glance, Cinder已安装并基本配置。所有节点间已配置 SSH 免密登录用于 Ceph 密钥分发。各节点主机名解析正确时间已同步。3. Ceph 端关键配置在 OpenStack 使用 Ceph 之前需要在 Ceph 集群中完成必要的准备工作。3.1 创建专属存储池为不同用途的数据创建独立的存储池有利于性能隔离和管理。通常在 Ceph 集群的任一管理节点上操作。# 登录到 Ceph 管理节点如 node1 ssh node1 # 创建用于 Glance 镜像的存储池副本数设为3 ceph osd pool create images 128 128 ceph osd pool application enable images rbd # 创建用于 Cinder 卷的存储池 ceph osd pool create volumes 128 128 ceph osd pool application enable volumes rbd # 创建用于 Nova 虚拟机磁盘的存储池可选也可与 volumes 共用 ceph osd pool create vms 128 128 ceph osd pool application enable vms rbd参数解释128 128 第一个是 PGPlacement Group数量第二个是 PGPPlacement Group for Placement数量。通常设置为相同值。PG 数量需要根据集群规模和池的预期数据量计算128 是一个适用于中小规模测试环境的起始值。application enable 为存储池打上应用标签帮助 Ceph 监控和管理。3.2 创建 OpenStack 专属用户与密钥为了安全OpenStack 各服务应使用独立的 Ceph 客户端用户而非client.admin。# 为 Glance 服务创建用户和密钥 ceph auth get-or-create client.glance mon profile rbd osd profile rbd poolimages mgr profile rbd poolimages -o /etc/ceph/ceph.client.glance.keyring # 为 Cinder 服务创建用户和密钥 ceph auth get-or-create client.cinder mon profile rbd osd profile rbd poolvolumes, profile rbd poolvms, profile rbd-read-only poolimages mgr profile rbd poolvolumes, profile rbd poolvms -o /etc/ceph/ceph.client.cinder.keyring # 为 Nova 服务创建用户和密钥。注意Nova 需要访问 images只读、vms读写和 volumes读写用于挂载卷 ceph auth get-or-create client.nova mon profile rbd osd profile rbd poolvms, profile rbd poolvolumes, profile rbd-read-only poolimages mgr profile rbd poolvms, profile rbd poolvolumes -o /etc/ceph/ceph.client.nova.keyring权限说明mon profile rbd 允许用户与 Monitor 通信。osd profile rbd poolpool_name 允许用户对指定存储池进行读写操作。osd profile rbd-read-only poolpool_name 允许用户对指定存储池进行只读操作如 Nova 读取镜像。3.3 分发密钥环与配置文件将创建好的密钥环和 Ceph 配置文件分发到所有需要访问 Ceph 的 OpenStack 节点Controller 和 Compute 节点。# 在 Ceph 管理节点上执行 # 1. 分发 Ceph 配置文件 scp /etc/ceph/ceph.conf rootopenstack-controller:/etc/ceph/ scp /etc/ceph/ceph.conf rootopenstack-compute1:/etc/ceph/ scp /etc/ceph/ceph.conf rootopenstack-compute2:/etc/ceph/ # 2. 分发 Glance 密钥环 scp /etc/ceph/ceph.client.glance.keyring rootopenstack-controller:/etc/ceph/ # 3. 分发 Cinder 密钥环 scp /etc/ceph/ceph.client.cinder.keyring rootopenstack-controller:/etc/ceph/ # 4. 分发 Nova 密钥环到所有 Controller 和 Compute 节点 scp /etc/ceph/ceph.client.nova.keyring rootopenstack-controller:/etc/ceph/ scp /etc/ceph/ceph.client.nova.keyring rootopenstack-compute1:/etc/ceph/ scp /etc/ceph/ceph.client.nova.keyring rootopenstack-compute2:/etc/ceph/ # 5. 在所有目标节点上修改密钥环文件权限确保只有相应服务用户可读 # 例如在 Controller 节点上 ssh rootopenstack-controller chown glance:glance /etc/ceph/ceph.client.glance.keyring chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring chown nova:nova /etc/ceph/ceph.client.nova.keyring注意 请将openstack-controller,openstack-compute1等替换为实际的主机名或 IP。4. OpenStack 服务端配置Ceph 端准备就绪后需要修改 OpenStack 各服务的配置文件指向 Ceph 集群。4.1 配置 Glance 使用 Ceph 作为后端Glance 负责存储镜像。编辑 Controller 节点上的 Glance API 配置文件。# 文件路径/etc/glance/glance-api.conf [DEFAULT] # 启用多个后端这里只配置 ceph enabled_backends ceph [ceph] # 指定后端类型为 rbd stores rbd # Glance 镜像将存储在 Ceph 的 images 池中 rbd_store_pool images # 使用我们创建的 glance 用户 rbd_store_user glance # 密钥环文件路径 rbd_store_ceph_conf /etc/ceph/ceph.conf # 指定 Ceph 集群的 Monitor 地址多个用逗号分隔 rbd_store_chunk_size 8重启 Glance 服务systemctl restart glance-api4.2 配置 Cinder 使用 Ceph 作为后端Cinder 负责管理卷。需要配置cinder.conf并启用对应的后端驱动。# 文件路径/etc/cinder/cinder.conf [DEFAULT] # 启用 Ceph 后端驱动 enabled_backends ceph [ceph] # 使用 Ceph 的 RBD 驱动 volume_driver cinder.volume.drivers.rbd.RBDDriver # Cinder 卷存储池 rbd_pool volumes # Ceph 集群用户 rbd_user cinder # Ceph 配置文件路径 rbd_ceph_conf /etc/ceph/ceph.conf # 用于从镜像创建卷的临时存储池通常与 rbd_pool 相同 rbd_flatten_volume_from_snapshot false rbd_max_clone_depth 5 # 连接 Ceph 的 RADOS 客户端特性保持默认 rados_connect_timeout -1 # 启用卷的本地缓存可选提升性能 rbd_store_chunk_size 4重启 Cinder 服务systemctl restart cinder-volume cinder-scheduler cinder-api4.3 配置 Nova 使用 Ceph 作为实例磁盘后端这是实现超融合和实时迁移的关键。需要配置nova.conf使 Nova Compute 能够将虚拟机磁盘创建在 Ceph RBD 上。# 文件路径/etc/nova/nova.conf (在所有 Compute 节点上配置) [libvirt] # 虚拟化类型根据硬件选择 kvm 或 qemu virt_type kvm # 将磁盘类型设置为 rbd这是最重要的配置之一 images_type rbd # 禁用本地镜像缓存直接从 Ceph 读取 images_rbd_pool vms images_rbd_ceph_conf /etc/ceph/ceph.conf # 使用我们创建的 nova 用户 images_rbd_glance_store_name rbd # 启用实时迁移 live_migration_flag VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_PERSIST_DEST live_migration_uri qemussh://nova%s/system [glance] # 指定 Glance 后端为 ceph api_servers http://controller-ip:9292 [cinder] # 指定 Cinder 后端信息 os_region_name RegionOne注意 还需要配置libvirtd以支持 RBD。编辑/etc/libvirt/qemu.conf# 取消以下行的注释 user nova group nova并确保 Nova 用户可以访问 RBD之前已通过密钥环设置。重启服务systemctl restart nova-compute libvirtd5. 完整实战创建基于 Ceph 后端的虚拟机环境配置完成后我们通过一个完整的流程来验证集成是否成功。5.1 上传镜像至 Glance (Ceph)首先将一个系统镜像上传到 Glance它会自动存储到 Ceph 的images池中。# 在 Controller 节点或任何安装了 OpenStack 客户端的机器上操作 source admin-openrc.sh # 加载管理员权限的环境变量 # 下载一个测试镜像如 CirrOS wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img # 上传镜像到 Glance指定格式为 qcow2并设置可见性 openstack image create cirros-ceph-test \ --file cirros-0.5.2-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public # 查看镜像详情确认状态为 active openstack image show cirros-ceph-test验证点 在 Ceph 管理节点上可以检查images池中是否出现了新的 RBD 镜像。rbd -p images ls5.2 创建 Cinder 卷 (Ceph)创建一个空的卷或者从刚才上传的镜像创建一个启动卷。# 创建一个 1GB 的空白卷 openstack volume create --size 1 test-volume-ceph # 或者从镜像创建一个启动卷更常用 openstack volume create --size 1 --image cirros-ceph-test bootable-volume-ceph # 查看卷状态等待变为 available openstack volume show bootable-volume-ceph验证点 在 Ceph 管理节点上检查volumes池。rbd -p volumes ls5.3 启动虚拟机并使用 Ceph 后端现在启动一个虚拟机其系统盘将存储在 Ceph 的vms池中并挂载刚才创建的 Cinder 卷。# 1. 创建一个测试网络如果已有网络可跳过 openstack network create test-net openstack subnet create --network test-net --subnet-range 192.168.100.0/24 test-subnet # 2. 启动虚拟机指定使用 Ceph 镜像并挂载 Cinder 卷 # 首先获取网络ID和卷ID NET_ID$(openstack network show test-net -f value -c id) VOL_ID$(openstack volume show bootable-volume-ceph -f value -c id) # 启动实例 openstack server create \ --flavor m1.tiny \ --image cirros-ceph-test \ --nic net-id$NET_ID \ --block-device-mapping vdb$VOL_ID \ ceph-vm-test # 查看虚拟机状态等待变为 ACTIVE openstack server show ceph-vm-test5.4 验证与高级操作验证磁盘位置 登录到运行该虚拟机的 Compute 节点查看虚拟机的 XML 定义。virsh dumpxml instance-id | grep -A5 -B5 rbd你应该能看到类似source protocolrbd ...的配置指向 Ceph 的vms池。测试实时迁移 这是超融合的核心优势之一。由于磁盘在共享的 Ceph 上迁移仅涉及内存状态。# 将虚拟机从 compute1 迁移到 compute2 openstack server migrate --live compute2-hostname ceph-vm-test # 迁移完成后需要确认 openstack server migrate confirm ceph-vm-test观察迁移过程速度会比基于共享文件系统如 NFS的迁移快很多。6. 常见问题与排查思路对接过程中难免会遇到问题下面是一些典型故障及排查方法。问题现象可能原因排查步骤与解决方案Glance 上传镜像失败1. Cephimages池不存在或权限不足。2.glance-api.conf配置错误。3. 密钥环权限或路径错误。1.ceph osd pool ls检查池是否存在。ceph auth get client.glance检查权限。2. 核对glance-api.conf中rbd_store_*参数。3. 检查/etc/ceph/ceph.client.glance.keyring文件权限是否为glance:glance。Cinder 创建卷失败状态为error1. Cephvolumes池权限问题。2.cinder-volume服务日志报连接超时或权限拒绝。3. Ceph 集群空间不足或 PG 状态异常。1. 检查cinder用户的 Ceph 权限。2.tail -f /var/log/cinder/volume.log查看详细错误。3.ceph -s检查集群健康状态和存储空间。Nova 启动虚拟机失败错误提示Cannot get RBD volume1. Nova 配置images_typerbd但[libvirt]部分配置缺失。2.nova-compute服务无法读取/etc/ceph/ceph.client.nova.keyring。3. Libvirt 未正确配置用户/组。1. 确认/etc/nova/nova.conf中[libvirt]段配置完整。2. 确认密钥环文件存在且属主为nova:nova。3. 确认/etc/libvirt/qemu.conf中user和group设置为nova并重启libvirtd。虚拟机启动后无法访问卷1. 卷挂载参数错误。2. 虚拟机内部未识别磁盘或未格式化。3. Cinder 卷状态非in-use。1. 检查openstack server create命令中的--block-device-mapping参数。2. 登录虚拟机使用fdisk -l查看磁盘。3.openstack volume list确认卷状态。实时迁移失败1. 计算节点间 SSH 免密登录未配置。2. 防火墙阻止了 Libvirt 迁移端口默认 49152-49215。3. 源/目标主机 CPU 特性不兼容。1. 配置 Nova 用户通常是nova在计算节点间的 SSH 免密登录。2. 开放防火墙端口或禁用防火墙测试环境。3. 在nova.conf中配置[libvirt] cpu_mode host-model或host-passthrough。通用排查命令查看服务日志journalctl -u service-name -f或tail -f /var/log/service/log-file。检查 Ceph 集群状态ceph -sceph health detail。检查 RBD 镜像rbd -p pool_name lsrbd -p pool_name info image_name。检查 OpenStack 资源状态openstack server listopenstack volume listopenstack image list。7. 生产环境最佳实践与优化建议将 Ceph 与 OpenStack 用于生产环境除了基本对接还需要考虑性能、稳定性和可维护性。1. 存储网络分离务必为 Ceph 配置独立的存储网络Cluster Network与业务网络Public Network分离。这能避免存储流量影响虚拟机网络性能并提高安全性。在ceph.conf中配置cluster network。2. 存储池规划与优化PG 数量计算 使用 Ceph 官方 PG 计算器根据 OSD 数量、池大小和预期数据量合理设置 PG 数避免 PG 数量不当导致的性能问题或数据不平衡。缓存层 对于性能要求高的卷如数据库可以考虑为volumes池创建基于 SSD 的缓存层。纠删码 对于容量型、冷数据存储如镜像备份可以使用纠删码池替代多副本在保证可靠性的同时显著提升存储利用率。3. Ceph 与 OpenStack 配置优化RBD 缓存 在nova.conf和cinder.conf中可以调整rbd_cache,rbd_cache_size,rbd_cache_max_dirty等参数来优化 RBD 客户端的缓存行为提升 IO 性能。Libvirt IO 线程 在nova.conf的[libvirt]部分设置disk_cachemodesnetworkwriteback并启用hw_disk_discard可以提升虚拟磁盘性能并支持 TRIM。Cinder 多后端 可以配置多个 Cinder 后端如ceph-ssd,ceph-hdd通过卷类型让用户选择不同性能的存储。4. 监控与告警Ceph 监控 部署 Ceph Dashboard 或集成 Prometheus Grafana监控集群健康状态、OSD 使用率、IOPS、带宽等关键指标。OpenStack 监控 监控 Nova、Cinder 服务的状态以及虚拟机和卷的使用情况。设置对服务异常、存储空间不足的告警。5. 备份与容灾Ceph 自身 定期检查池的副本数监控慢请求 OSD。对于关键数据考虑跨机房的 Ceph 集群同步RBD Mirroring。OpenStack 层面 定期对重要虚拟机创建快照快照也存储在 Ceph 中。利用 Cinder Backup 服务将卷备份到其他存储系统。6. 安全加固密钥管理 妥善保管client.admin的密钥环。为不同服务使用最小权限原则创建的用户正如我们之前所做的。网络隔离 严格限制存储网络的访问权限仅允许 Ceph 集群节点和 OpenStack 计算/控制节点访问。版本升级 制定详细的升级计划先升级 Ceph再升级 OpenStack并在测试环境充分验证。通过以上步骤你不仅能够完成 Ceph 与 OpenStack Nova、Cinder 的基础对接更能构建一个适合生产环境的高可用、高性能超融合私有云平台。这套架构解耦了计算与存储使得节点可以随时添加或移除实现了真正的弹性伸缩。在实际操作中请结合你的硬件资源和业务需求灵活调整配置参数。如果在部署中遇到本文未覆盖的特定问题建议详细查阅 OpenStack 和 Ceph 的官方文档社区邮件列表和问题追踪系统也是宝贵的资源。
返回列表