十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Ceph与OpenStack超融合部署实战:从原理到生产级配置

Ceph与OpenStack超融合部署实战:从原理到生产级配置 在云计算和虚拟化技术快速发展的今天如何高效、灵活地管理存储资源是每一个云平台架构师和运维工程师必须面对的挑战。传统的集中式存储方案在扩展性、成本和性能上往往难以兼顾尤其是在构建私有云或超融合基础设施时。本文将深入探讨如何将开源分布式存储系统 Ceph 与 OpenStack 的核心计算组件 Nova 和块存储组件 Cinder 进行深度集成从而实现一套稳定、可扩展的超融合云平台。无论你是正在规划云平台的技术决策者还是负责具体实施和运维的工程师通过本文的完整流程拆解、代码示例和避坑指南都能掌握从环境准备到生产级部署的全套实战技能。1. 背景与核心概念在深入实操之前我们首先需要理清几个关键概念理解“为什么”要这么做这比“怎么做”更重要。1.1 什么是超融合基础设施超融合基础设施将计算、存储和网络资源整合到一套标准化的服务器硬件中并通过软件进行统一管理。其核心优势在于简化架构告别独立的存储区域网络和存储阵列降低硬件复杂性和采购成本。线性扩展可以通过增加标准服务器节点来同时扩展计算和存储能力。易于管理通过统一的软件界面管理所有资源提升运维效率。1.2 Ceph软件定义的统一存储Ceph 是一个开源的、软件定义的、统一的分布式存储系统。它在一个平台上同时提供了对象存储、块存储和文件系统三种服务接口。其核心特性包括高可靠性数据通过 CRUSH 算法自动分布和复制无单点故障。高扩展性可以轻松地从几个节点扩展到上千个节点。自我修复能自动检测故障并恢复数据副本。开源与开放拥有活跃的社区和广泛的生态支持。在超融合场景中我们主要利用 Ceph 的块存储服务为虚拟机提供持久化磁盘。1.3 OpenStack Nova 与 Cinder 的角色NovaOpenStack 的计算服务负责虚拟机实例的生命周期管理包括创建、调度、关闭、删除等。当创建虚拟机时Nova 需要为虚拟机挂载启动盘和数据盘。CinderOpenStack 的块存储服务为虚拟机提供持久化的块存储设备。它管理着各种后端存储驱动将创建卷、挂载卷等请求翻译成后端存储能理解的操作。1.4 对接的价值为什么选择 Ceph将 Ceph 作为 Nova 和 Cinder 的后端存储可以实现统一存储池所有虚拟机的系统盘和数据盘都来自同一个 Ceph 集群便于容量管理和性能监控。高级功能支持无缝支持虚拟机热迁移、卷快照、卷克隆等高级功能因为 Ceph RBD 本身支持这些特性。摆脱本地磁盘限制虚拟机磁盘不再绑定在某一台计算节点的本地硬盘上实现了计算与存储的解耦这是实现高可用和灵活调度的基础。性能与成本平衡利用服务器本地硬盘构建 Ceph 集群在获得分布式存储可靠性的同时避免了昂贵的企业级 SAN 存储。2. 环境准备与版本说明一个成功的部署始于清晰的环境规划。以下是一个典型的测试环境配置生产环境需要根据负载进行扩容和优化。2.1 硬件与网络规划角色数量最低配置推荐配置网络要求Ceph/OpenStack 控制节点18核 CPU, 16GB RAM, 200GB 系统盘16核 CPU, 32GB RAM, SSD 系统盘管理网、存储网万兆、外部网Ceph OSD / Nova 计算节点316核 CPU, 64GB RAM, 系统盘 多块数据盘如 4x 1TB HDD24核 CPU, 128GB RAM, SSD 系统盘 多块 NVMe/SSD 数据盘管理网、存储网强烈推荐万兆分离注意数据盘用于创建 Ceph OSD不要使用 LVM/VG直接使用裸盘。生产环境建议至少5个节点且控制节点与计算节点分离。存储网络必须独立且低延迟这是性能关键。2.2 软件版本说明版本兼容性是 OpenStack 和 Ceph 集成中最常见的坑点。以下组合经过广泛测试相对稳定操作系统Ubuntu 20.04 LTS 或 CentOS 8 Stream / Rocky Linux 8。本文以 CentOS 8 系列为例。OpenStack 版本Victoria (2020.2) 或 Yoga (2023.1)。这两个版本与 Ceph 的集成非常成熟。本文示例基于 Victoria。Ceph 版本Pacific (16.2.x) 或 Quincy (17.2.x)。建议选择与 OpenStack 版本对应的稳定版。本文使用 Quincy。Python 版本系统自带 Python 3.6。重要提示请根据你的实际需求选择版本并务必查阅 OpenStack 和 Ceph 官方发布的版本兼容性矩阵。下文中的配置命令和路径可能需要根据具体版本进行微调。2.3 前置条件检查在所有节点上执行以下检查主机名与解析确保每个节点有唯一的主机名且/etc/hosts文件或 DNS 能正确解析所有节点的主机名。# 设置主机名以控制节点为例 hostnamectl set-hostname controller # 编辑 /etc/hosts添加所有节点的IP和主机名映射 echo “192.168.1.10 controller” /etc/hosts echo “192.168.1.11 compute1” /etc/hosts echo “192.168.1.12 compute2” /etc/hosts时间同步分布式系统对时间一致性要求极高。# CentOS/Rocky Linux dnf install chrony -y systemctl enable --now chronyd chronyc sources禁用 SELinux 和防火墙仅用于实验环境生产环境需配置精细的防火墙规则。# 临时禁用 SELinux setenforce 0 # 永久禁用 SELinux sed -i ‘s/SELINUXenforcing/SELINUXpermissive/g’ /etc/selinux/config # 停止并禁用防火墙 systemctl stop firewalld systemctl disable firewalld3. Ceph 集群部署与基础配置我们将首先部署一个基础的 Ceph 集群。这里使用cephadm工具进行部署它是 Ceph 官方推荐的现代化部署方式。3.1 安装 cephadm在控制节点上执行curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm chmod x cephadm ./cephadm add-repo --release quincy ./cephadm install3.2 引导新集群使用cephadm bootstrap命令在控制节点上初始化一个单节点集群后续再添加 OSD 节点。cephadm bootstrap --mon-ip 192.168.1.10命令执行成功后会输出管理器的访问信息包括 Dashboard 的 URL 和初始密码。请妥善保存。3.3 添加 OSD 节点将 Ceph 集群扩展到计算节点上使存储与计算共存。将 SSH 公钥复制到计算节点允许控制节点免密登录计算节点。ssh-copy-id -f -i /etc/ceph/ceph.pub rootcompute1 ssh-copy-id -f -i /etc/ceph/ceph.pub rootcompute2将主机添加到集群ceph orch host add compute1 192.168.1.11 ceph orch host add compute2 192.168.1.12 ceph orch host ls # 查看已添加的主机在每个计算节点上添加数据盘作为 OSD首先查看可用磁盘。# 在控制节点上为 compute1 添加磁盘 /dev/sdb ceph orch daemon add osd compute1:/dev/sdb # 为 compute2 添加磁盘 /dev/sdb ceph orch daemon add osd compute2:/dev/sdb可以使用ceph osd tree命令查看 OSD 的分布状态。3.4 创建存储池存储池是 Ceph 中存储数据的逻辑分区。我们需要为 OpenStack 创建专用的池。创建用于 Cinder 卷的池ceph osd pool create volumes 128 128128是 PG (Placement Group) 数量这是一个重要的性能参数。粗略估算公式PG 总数 (OSD 总数 * 100) / 副本数。这里创建了一个名为volumes的池。创建用于 Nova 虚拟机磁盘的池ceph osd pool create vms 128 128启用 RBD 功能ceph osd pool application enable volumes rbd ceph osd pool application enable vms rbd4. OpenStack 基础服务安装与配置我们使用 OpenStack 的自动化部署工具packstack来快速搭建基础服务。注意packstack适合 PoC 和测试环境生产环境建议使用Kolla-Ansible或OpenStack-Helm。4.1 安装 Packstack在控制节点上执行dnf install -y centos-release-openstack-victoria dnf update -y dnf install -y openstack-packstack4.2 生成应答文件并编辑生成一个包含所有组件的默认应答文件然后针对我们的需求进行修改。packstack --gen-answer-fileanswer-file.txt使用文本编辑器如vi打开answer-file.txt修改以下关键参数# 配置使用 Ceph 作为后端 CONFIG_CEPH_INSTALLn CONFIG_CINDER_BACKENDceph CONFIG_GLANCE_BACKENDceph CONFIG_NOVA_LIBVIRT_VIRT_TYPEkvm # 配置 Ceph 集群信息 CONFIG_CEPH_CLIENT_FSID你的Ceph集群FSID通过ceph fsid命令获取 CONFIG_CEPH_CLIENT_USERNAMEclient.openstack CONFIG_CEPH_CLIENT_KEY你的client.openstack用户的密钥通过ceph auth get-key client.openstack获取如果不存在需先创建 # 配置 Ceph 存储池名称与前面创建的一致 CONFIG_CEPH_GLANCE_POOLimages CONFIG_CEPH_CINDER_POOLvolumes CONFIG_CEPH_NOVA_POOLvms # 指定计算节点主机名 CONFIG_COMPUTE_HOSTScompute1,compute2 # 其他网络配置根据你的环境调整 CONFIG_KEYSTONE_ADMIN_PW设置一个强密码 CONFIG_PROVISION_DEMOn # 不安装演示组件注意需要先在 Ceph 中创建client.openstack用户并授权以及images池。# 在Ceph控制节点执行 ceph osd pool create images 128 128 ceph osd pool application enable images rbd # 创建客户端用户并授权 ceph auth get-or-create client.openstack mon ‘profile rbd’ osd ‘profile rbd poolimages, profile rbd poolvolumes, profile rbd poolvms’ # 获取密钥 ceph auth get-key client.openstack4.3 执行安装使用修改后的应答文件开始安装 OpenStack。packstack --answer-fileanswer-file.txt安装过程耗时较长请耐心等待。成功后会输出各个服务的访问地址。5. 配置 Nova 和 Cinder 使用 Ceph RBD虽然packstack应答文件已经指定了后端但我们仍需深入检查并手动确认关键配置这是排错和深度定制的必要步骤。5.1 配置 Cinder 使用 Ceph (控制节点)编辑 Cinder Volume 配置vi /etc/cinder/cinder.conf在[DEFAULT]部分和末尾添加/确认以下内容[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 rbd_user openstack rbd_secret_uuid 你的Secret UUIDrbd_secret_uuid需要后续在 Libvirt 中配置并填入此处。创建 Secret 文件Libvirt 需要密钥来访问 Ceph。cat /etc/ceph/secret.xml EOF secret ephemeral‘no’ private‘no’ uuid你的Secret UUID/uuid usage type‘ceph’ nameclient.openstack secret/name /usage /secret EOF使用uuidgen命令生成一个 UUID 并替换到上述文件和cinder.conf中。定义并设置 Secretvirsh secret-define --file /etc/ceph/secret.xml virsh secret-set-value --secret {上一步生成的UUID} --base64 $(ceph auth get-key client.openstack)5.2 配置 Nova 使用 Ceph (所有计算节点)安装客户端软件包dnf install -y python3-rbd ceph-common复制 Ceph 配置文件scp rootcontroller:/etc/ceph/ceph.conf /etc/ceph/ scp rootcontroller:/etc/ceph/ceph.client.openstack.keyring /etc/ceph/ chown root:root /etc/ceph/ceph.client.openstack.keyring chmod 600 /etc/ceph/ceph.client.openstack.keyring配置 Nova 使用 RBDvi /etc/nova/nova.conf找到[libvirt]部分修改如下[libvirt] virt_type kvm images_type rbd images_rbd_pool vms images_rbd_ceph_conf /etc/ceph/ceph.conf rbd_user openstack rbd_secret_uuid {填入与cinder.conf中相同的Secret UUID} disk_cachemodes “networkwriteback” hw_disk_discard unmapdisk_cachemodes和hw_disk_discard的设置有助于提升性能。配置 Libvirt编辑 Libvirt 的 QEMU 配置。vi /etc/libvirt/qemu.conf确保以下行未被注释user “root” group “root”重启服务systemctl restart libvirtd systemctl restart openstack-nova-compute5.3 重启服务并验证在控制节点上重启相关服务使配置生效systemctl restart openstack-cinder-volume systemctl restart openstack-cinder-scheduler systemctl restart openstack-cinder-api systemctl restart openstack-glance-api6. 完整实战创建基于 Ceph 后端的虚拟机现在我们来完成一个端到端的测试验证整个链路是否通畅。6.1 环境变量与镜像准备加载管理员 OpenRC 文件source /root/keystonerc_admin下载并上传一个云镜像到 GlanceGlance 后端已配置为 Ceph所以镜像会存储在 Ceph 的images池中。wget https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img openstack image create --file cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros openstack image list # 确认镜像已上传6.2 创建 Cinder 卷类型与卷创建 Cinder 卷类型可选用于标记存储后端openstack volume type create --public ceph-ssd cinder extra-specs-create ceph-ssd volume_backend_nameceph创建一个启动卷openstack volume create --size 1 --image cirros --type ceph-ssd boot-from-volume-test openstack volume list # 等待状态变为 available此时这个卷已经作为 RBD 镜像创建在 Ceph 的volumes池中。6.3 启动虚拟机创建网络如果尚未存在openstack network create test-net openstack subnet create --network test-net --subnet-range 192.168.200.0/24 test-subnet创建虚拟机指定从我们刚创建的卷启动openstack server create --flavor m1.tiny --volume boot-from-volume-test --network test-net --key-name mykey test-vm-ceph关键点这里使用了--volume参数而非--image。Nova 会指示 Libvirt 使用rbd协议直接从这个位于 Ceph 的卷启动虚拟机。查看虚拟机状态和详细信息openstack server list openstack server show test-vm-ceph在openstack server show的输出中可以查看虚拟机的宿主机例如compute1。6.4 验证与观察在 Ceph 侧验证登录到 Ceph 控制节点或任意安装ceph客户端工具的节点。rbd -p volumes ls # 应能看到以 volume- 开头的卷 rbd -p vms ls # 应能看到以 instance- 开头的虚拟机磁盘如果从镜像创建Nova可能会在vms池中创建副本 ceph df # 查看存储池容量使用情况在计算节点验证登录到运行该虚拟机的计算节点。virsh list virsh dumpxml {虚拟机ID} | grep rbd在 XML 定义中你应该能看到类似以下的磁盘配置这证明虚拟机磁盘直接挂载了 Ceph RBD 镜像disk type‘network’ device‘disk’ driver name‘qemu’ type‘raw’ cache‘writeback’ discard‘unmap’/ auth username‘openstack’ secret type‘ceph’ uuid‘你的Secret-UUID’/ /auth source protocol‘rbd’ name‘vms/instance-xxxxxx’ host name‘192.168.1.10’ port‘6789’/ host name‘192.168.1.11’ port‘6789’/ host name‘192.168.1.12’ port‘6789’/ /source target dev‘vda’ bus‘virtio’/ address type‘pci’ domain‘0x0000’ bus‘0x00’ slot‘0x04’ function‘0x0’/ /disk7. 常见问题与排查思路对接过程中难免遇到问题以下是一些典型场景的排查路径。问题现象可能原因排查步骤与解决方案虚拟机创建失败状态为ERROR错误信息包含Cannot discover…或Connection reset by peer1. Ceph 集群健康状态异常。2. 计算节点无法连接 Ceph Monitor。3.ceph.conf或密钥文件权限错误。4. Libvirt Secret 未正确设置。1.ceph -s检查集群状态是否为HEALTH_OK。2. 从计算节点telnet mon-ip 6789测试网络连通性。3. 检查/etc/ceph/下文件权限是否为600属主为root。4.virsh secret-list查看 Secret 是否存在virsh secret-get-value uuid核对密钥。卷创建失败Cinder Volume 服务日志报RBD image not found或权限错误1. Cinder 配置中的rbd_user、rbd_pool错误。2.client.openstack用户对指定池没有权限。3. Ceph 集群存储空间不足。1. 核对/etc/cinder/cinder.conf中[ceph]段配置。2. 在 Ceph 集群执行ceph auth get client.openstack检查能力列表。3.ceph df检查池的剩余空间。虚拟机启动极慢或磁盘 IO 性能很差1. 存储网络集群网络带宽不足或延迟高。2. 未使用万兆网络或网络未分离。3. OSD 磁盘性能瓶颈如使用 HDD 且未配置 SSD 日志盘。4. Nova 配置中未启用writeback缓存。1. 使用iperf3测试计算节点与 Ceph OSD 节点间的网络带宽。2. 规划独立的存储网络。3. 考虑使用 SSD 或 NVMe 作为 OSD。4. 确认/etc/nova/nova.conf中disk_cachemodes “networkwriteback”。卷无法挂载到虚拟机1. 卷状态非available。2. 卷类型与计算节点后端不匹配多后端时。3. 虚拟机已挂载卷数量达到上限。1.openstack volume show volume-id检查状态。2. 确保卷类型的volume_backend_name与计算节点可用的后端匹配。3. 检查虚拟机规格。Ceph Dashboard 或ceph -s显示 PG 状态不活跃PG (Placement Group) 数量设置不合理或 OSD 状态异常。1.ceph pg stat查看 PG 详细状态。2. 根据 OSD 数量调整 PG 数使用ceph osd pool set pool pg_num value调整。3. 检查是否有 OSD down 或 out。8. 最佳实践与工程建议将 Ceph 与 OpenStack 对接用于生产环境超融合除了基本功能更需要关注稳定性、性能和安全。8.1 存储规划与性能优化硬件选型OSD 磁盘优先选择 SSD 或 NVMe。如果必须使用 HDD务必为每个 OSD 配置单独的 SSD 日志盘使用ceph-volume部署时可指定--block.db。网络存储网络Cluster Network必须与公共/管理网络分离并使用万兆及以上网络。考虑使用 RDMA 进一步降低延迟。内存Ceph OSD 进程对内存消耗较大建议每块 OSD 磁盘预留 3-5GB 内存。Ceph 配置优化PG 数量使用官方 PG 计算器进行计算避免 PG 数量设置不当导致的性能问题和恢复缓慢。CRUSH Map 调优如果硬件配置不一致如有的节点有 SSD有的只有 HDD需要编辑 CRUSH Map 建立不同的故障域和存储类别并在池中指定。缓存层对于混合存储SSDHDD可以考虑为volumes和vms池配置缓存层将热数据缓存到 SSD。8.2 OpenStack 配置与高可用多后端支持可以在 Cinder 中配置多个后端如ceph-ssd,ceph-hdd通过卷类型让用户选择不同性能或成本的存储。启用卷扩展与迁移确保 Cinder 和 Ceph 配置支持卷在线扩展和迁移这是云平台的必备功能。计算节点高可用结合 OpenStack Nova 的疏散功能当某个计算节点故障时其上运行的虚拟机可以自动在另一台拥有相同 Ceph 存储访问权限的节点上重建并启动。定期快照与备份虽然 Ceph 提供了副本保护但仍需制定基于 RBD 快照或rbd export的跨集群备份策略防止逻辑错误或机房级灾难。8.3 监控与运维全面监控Ceph使用 Ceph Dashboard、Prometheus Grafana通过ceph-mgr插件监控集群健康、容量、IOPS、延迟等。OpenStack使用 Ceilometer/Gnocchi 或 Prometheus 监控虚拟机、卷、镜像的数量和状态。节点监控计算/存储节点的 CPU、内存、磁盘 IO、网络流量。日志集中将 Ceph 各组件、Nova、Cinder、Libvirt 的日志收集到 ELK 或 Loki 等日志平台便于关联排查。容量预警为 Ceph 存储池设置使用率阈值告警如 80%并建立流程及时扩容。8.4 安全加固最小权限原则为client.openstack用户仅授予必要的权限。我们之前使用的profile rbd是合理的。网络隔离严格限制存储网络6789, 6800-7300 端口的访问仅允许计算节点和 Ceph 集群节点之间通信。密钥管理定期轮换client.openstack的密钥并更新所有计算节点和配置文件。Libvirt 沙盒考虑使用 SELinux 或 AppArmor 对 QEMU 进程进行进一步的约束。通过以上步骤你不仅能够搭建起一个可用的 Ceph OpenStack 超融合环境更能理解其背后的原理、掌握排错方法并建立起面向生产环境的运维意识。这套架构为构建私有云、开发测试云提供了强大的基础设施支撑其扩展性和开放性使得后续引入容器、边缘计算等新型负载成为可能。建议在测试环境中反复演练整个流程特别是故障模拟和恢复这将在实际运维中带来巨大信心。
返回列表