当前位置: 首页 > news >正文

Ceph分布式存储核心知识点与实验总结

Ceph分布式存储核心知识点与实验总结

一、文档概述

本文档是一本完整的Ceph分布式存储教材,涵盖了从基础概念、架构原理、部署实施到高级特性(块存储、对象存储、文件系统)的全栈知识。Ceph作为开源的软件定义存储(SDS)解决方案,提供统一存储能力(对象、块、文件),具有去中心化、高扩展性、自修复等特点。文档重点介绍了Cephadm容器化部署方式、集群管理、存储池配置、RBD镜像管理、RADOS网关对象存储以及CephFS文件系统等内容。

二、核心知识点总结

1. Ceph架构组件

组件功能
MON维护集群状态映射(Cluster Map),通过Paxos算法保证一致性,奇数个节点构成仲裁
OSD对象存储设备,实际存储数据,处理数据复制、恢复和再平衡
MGR提供集群监控、Dashboard Web界面和REST API
MDS元数据服务器,仅为CephFS服务,管理文件名、目录、权限等元数据
RADOS可靠自主分布式对象存储核心,实现CRUSH算法进行数据分布

2. 核心原理

  • CRUSH算法:客户端直接计算对象存储位置,无需中心查表,实现线性扩展。
  • PG(Placement Group):对象→PG→OSD的映射中间层,聚合对象以减少管理开销。
  • 数据访问流程:客户端先连接MON获取Cluster Map → CRUSH计算PG及主OSD → 直接与主OSD通信读写。
  • 数据保护模式
    • 复本池(Replicated):默认size=3,高读性能,空间利用率低。
    • 纠删码池(Erasure Code):k+m模式,空间利用率高,需消耗CPU计算。

3. 部署方式

  • Cephadm(推荐):容器化部署,使用Podman/Docker,通过SSH管理节点,支持Pacific及更新版本。
  • Rook:Kubernetes原生部署。
  • 其他:ceph-ansible、手动部署(已不推荐)。

4. 访问接口

接口说明典型应用
librados原生C/C++ API,最高性能直接开发应用
RBD块设备,支持精简配置、快照、克隆OpenStack Cinder、KVM虚拟机
RGW对象网关,兼容S3和Swift API备份、图片存储、云存储服务
CephFSPOSIX兼容的文件系统共享存储、HPC、容器持久化

5. 高可用与容灾

  • RBD Mirroring:两个Ceph集群间异步复制RBD镜像,支持主动-被动和主动-主动模式。
  • CephFS Mirror:基于快照的异步文件系统镜像,用于灾难恢复。
  • RADOS Gateway多站点:跨区域对象数据同步,通过Realm、Zonegroup、Zone实现。

6. 认证与授权

  • Cephx:共享密钥认证协议,所有访问需认证。
  • 用户类型client.<name>用于外部客户端,守护进程(如osd.0)内置账户。
  • 能力(Capabilities)allow r(读)、allow w(写)、allow x(执行类方法)、allow *(全部)。

7. 配置管理

  • 集中配置数据库:存储在MON节点,使用ceph config set命令持久化修改,优先级高于本地ceph.conf。
  • 运行时覆盖ceph tell <daemon> injectargs临时生效,重启后恢复。

三、关键实验及注释代码

以下实验基于Ceph Pacific(v16)和CentOS Stream 8环境,使用cephadm部署。

实验1:使用Cephadm引导单节点集群

# 步骤1:安装cephadm(需要网络访问yum源)dnfinstall-ycephadm# 步骤2:引导集群,指定Monitor IP和Dashboard密码cephadm bootstrap\--mon-ip192.168.108.11\# Monitor所在的IP地址--allow-fqdn-hostname\# 允许使用完全限定域名--initial-dashboard-user admin\# Dashboard登录用户名--initial-dashboard-password laogao@123\# 初始密码--dashboard-password-noupdate# 禁止后续自动更新密码# 引导成功后输出重要信息:# - Dashboard访问URL: https://ceph1.laogao.cloud:8443/# - 管理员密钥环文件: /etc/ceph/ceph.client.admin.keyring# - 集群FSID: 自动生成的UUID

说明:bootstrap命令会在当前节点创建一个最小集群(1个MON+1个MGR),并自动生成SSH密钥、配置文件、密钥环文件,同时部署监控组件(Prometheus、Grafana、Alertmanager等)。

实验2:添加新节点并部署OSD

# 在ceph1节点(已引导)上操作# 1. 获取集群公钥并分发到其他节点ceph cephadm get-pub-key>~/ceph.pub ssh-copy-id-f-i~/ceph.pub root@ceph2.laogao.cloud ssh-copy-id-f-i~/ceph.pub root@ceph3.laogao.cloud# 2. 将主机添加到集群ceph orchhostaddceph2.laogao.cloud192.168.108.12 ceph orchhostaddceph3.laogao.cloud192.168.108.13# 3. 查看主机列表ceph orchhostls# 输出示例:# HOST ADDR LABELS STATUS# ceph1.laogao.cloud 192.168.108.11 _admin# ceph2.laogao.cloud 192.168.108.12# ceph3.laogao.cloud 192.168.108.13# 4. 自动将所有空闲磁盘部署为OSDceph orch apply osd --all-available-devices# 5. 查看OSD状态ceph osd tree# 输出显示每个主机的OSD及其权重、状态(up/in)

说明:cephadm的编排器会自动在新主机上部署MON、MGR、OSD等守护进程(容器化)。--all-available-devices会将所有未使用的磁盘(无分区、无文件系统)直接作为OSD使用,默认使用bluestore后端。

实验3:创建存储池并管理对象

# 1. 创建复本池(默认size=3)ceph osd pool create mypool3232replicated# 参数:池名称,PG数量,PGP数量(通常等于PG数),类型# 2. 查看池列表ceph osd poollsdetail# 输出包含池ID、副本数、CRUSH规则、应用类型等# 3. 为池指定应用类型(RBD、RGW、CephFS)ceph osd pool applicationenablemypool rbd# 4. 上传对象到池中rados-pmypool put myobject /etc/hosts# rados命令:-p指定池,put表示上传,myobject为对象名,后跟本地文件# 5. 列出池中所有对象rados-pmypoolls# 6. 查看对象位置(映射到哪个OSD)ceph osd map mypool myobject# 输出:对象 -> PG -> up([主OSD, 从OSD...]) -> acting([主OSD, 从OSD...])# 7. 获取对象到本地rados-pmypool get myobject ./downloaded_hosts# 8. 删除对象rados-pmypoolrmmyobject

说明:PG的数量计算经验公式:(OSD数 * 100) / 副本数,结果向上取整到2的幂。生产环境建议单个OSD对应100~200个PG。

实验4:RBD块设备操作

# 1. 创建RBD专用池并初始化ceph osd pool create rbd_pool6464rbd pool init rbd_pool# 这等同于执行:ceph osd pool application enable rbd_pool rbd# 2. 创建1GB大小的RBD镜像rbd create--size1G rbd_pool/webimage# 或者:rbd create rbd_pool/webimage --size 1G# 3. 查看镜像信息rbd info rbd_pool/webimage# 输出关键字段:size, order(对象大小4M), features( layering, exclusive-lock等)# 4. 将RBD镜像映射到内核块设备(需要root权限)rbd device map rbd_pool/webimage# 默认映射为 /dev/rbd0# 5. 格式化并挂载mkfs.xfs /dev/rbd0mkdir/mnt/rbdmount/dev/rbd0 /mnt/rbd# 6. 写入测试数据echo"Hello RBD">/mnt/rbd/test.txt# 7. 创建快照(先卸载或冻结文件系统)umount/mnt/rbd rbd snap create rbd_pool/webimage@snap1# 8. 列出快照rbd snaplsrbd_pool/webimage# 9. 回滚快照(会覆盖当前数据)rbd snap rollback rbd_pool/webimage@snap1# 10. 保护快照(防止误删,支持克隆)rbd snap protect rbd_pool/webimage@snap1# 11. 从快照克隆出新的可写镜像rbd clone rbd_pool/webimage@snap1 rbd_pool/webimage_clone# 12. 扁平化克隆(脱离父快照依赖)rbd flatten rbd_pool/webimage_clone# 13. 删除快照(需先解除保护)rbd snap unprotect rbd_pool/webimage@snap1 rbd snaprmrbd_pool/webimage@snap1# 14. 删除镜像(放入垃圾箱再彻底删除)rbd trashmvrbd_pool/webimage rbd trashlsrbd_pool# 获取镜像IDrbd trashrmrbd_pool<image-id>

说明:RBD默认开启layering、exclusive-lock、object-map、fast-diff、deep-flatten等特性。其中exclusive-lock保证同一时刻只有一个客户端写入,防止数据损坏;object-map加速快照差异计算。

实验5:RADOS网关(RGW)部署与S3访问

# 1. 创建Realm(全局命名空间)radosgw-admin realm create --rgw-realm=myrealm--default# 2. 创建Zonegroup(区域组)radosgw-admin zonegroup create --rgw-realm=myrealm --rgw-zonegroup=mygroup--master--default# 3. 创建Zone(区域)radosgw-admin zone create --rgw-realm=myrealm --rgw-zonegroup=mygroup --rgw-zone=myzone--master--default# 4. 提交配置周期radosgw-admin period update--commit# 5. 使用编排器部署RGW服务(3个实例,端口8080)ceph orch apply rgw myrealm--placement="3 ceph1 ceph2 ceph3"--realm=myrealm--zone=myzone--port=8080# 6. 创建S3用户(自动生成access_key和secret_key)radosgw-admin user create--uid=s3user --display-name="S3 User"--email=s3@example.com# 7. 在客户端安装awscli并配置pip3installawscli aws configure# 输入Access Key, Secret Key, 区域留空# 8. 创建存储桶(bucket)aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3 mb s3://mybucket# 9. 上传文件aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3cp./localfile s3://mybucket/# 10. 列出桶内对象aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3lss3://mybucket/# 11. 下载对象aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3cps3://mybucket/localfile ./downloaded# 12. 删除桶(需先清空)aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3rms3://mybucket/localfile aws --endpoint-url=http://ceph1.laogao.cloud:8080 s3 rb s3://mybucket

说明:RGW默认使用端口80(HTTP)或443(HTTPS),本例改为8080。多站点配置需在两个集群间建立对等关系,通过radosgw-admin realm pull同步配置。

实验6:CephFS文件系统挂载

# 1. 创建CephFS所需的两个池(元数据池和数据池)ceph osd pool create cephfs_metadata3232ceph osd pool create cephfs_data12832# 2. 为元数据池增加副本数(保证元数据可靠性)ceph osd poolsetcephfs_metadata size3# 3. 创建文件系统ceph fs new mycephfs cephfs_metadata cephfs_data# 4. 部署MDS(至少一个active,可选standby)ceph orch apply mds mycephfs--placement="2 ceph1 ceph2"# 5. 查看文件系统状态ceph fs status mycephfs# 6. 在客户端安装ceph-common并复制配置和密钥# 服务端操作:ceph auth get-or-create client.myuser mon'allow r'mds'allow rw'osd'allow rw pool=cephfs_data'-o/etc/ceph/ceph.client.myuser.keyringscp/etc/ceph/ceph.conf root@client:/etc/ceph/scp/etc/ceph/ceph.client.myuser.keyring root@client:/etc/ceph/# 7. 客户端使用内核驱动挂载(需内核支持)mount-tceph ceph1.laogao.cloud:6789,ceph2.laogao.cloud:6789:/ /mnt/cephfs\-oname=myuser,secretfile=/etc/ceph/ceph.client.myuser.keyring# 8. 或者使用FUSE挂载(支持配额和ACL)ceph-fuse-nclient.myuser /mnt/cephfs# 9. 测试文件读写echo"CephFS test">/mnt/cephfs/test.txtls-l/mnt/cephfs/# 10. 创建快照(在.snap目录下创建子目录)mkdir/mnt/cephfs/.snap/snapshot1# 恢复文件:从.snap/snapshot1中拷贝cp/mnt/cephfs/.snap/snapshot1/test.txt /restore/# 11. 设置目录配额(限制5GB)setfattr-nceph.quota.max_bytes-v5000000000/mnt/cephfs/my_dir

说明:CephFS支持多个active MDS以提高元数据性能(需设置max_mds>1)。快照功能默认启用,创建快照实质是在.snap目录下创建空目录,Ceph自动记录该时间点所有元数据和数据。

实验7:配置管理(集中配置数据库)

# 1. 查看所有可配置项ceph configls# 2. 获取某个守护进程的完整运行时配置(含默认值)ceph config show-with-defaults mon.ceph1# 3. 获取特定配置项的值ceph config get mon.ceph1 mon_allow_pool_delete# 输出:false# 4. 修改配置(永久生效,自动同步到所有相关守护进程)ceph configsetmon mon_allow_pool_deletetrue# 5. 临时覆盖某个守护进程的配置(重启后丢失)ceph tell mon.ceph1 injectargs--mon_allow_pool_delete=false# 6. 查看配置修改历史ceph config log5# 7. 回滚到指定历史版本ceph config reset12# 12为日志中的条目序号

说明:集中配置数据库优先级高于本地ceph.conf,建议使用ceph config set进行永久配置。临时修改用于调试,使用injectargs

四、总结与最佳实践

  1. 部署规划

    • MON节点奇数个(3/5/7),独立于OSD节点以降低故障半径。
    • 网络分离:public_network(客户端访问)和cluster_network(OSD心跳和复制)。
    • 磁盘规划:OSD推荐使用SSD作WAL/DB分区,HDD作数据盘;日志独立SSD可显著提升性能。
  2. 性能调优

    • PG数量:单个OSD 100~200个PG,过多消耗内存,过少导致再平衡缓慢。
    • RBD缓存:启用rbd_cache = true,写策略writearound适合顺序读写,writeback适合随机写。
    • OSD内存:默认4GB,可通过osd_memory_target动态调整。
  3. 高可用配置

    • 关键池副本数至少3,min_size设为2,防止脑裂。
    • 部署至少2个MGR实现主备。
    • 跨地域灾备使用RBD Mirroring或RGW多站点。
  4. 安全加固

    • 启用Cephx认证,禁用匿名访问。
    • 使用防火墙限制端口(6789, 3300, 6800-7300, 8443等)。
    • 定期轮换client.admin密钥。
  5. 监控与运维

    • 内置Dashboard提供图形化管理(URL: https://:8443)。
    • 使用Prometheus + Grafana导出集群指标。
    • 定期执行ceph health detail排查告警。
http://www.jsqmd.com/news/985794/

相关文章:

  • 115、FFT在飞控中的应用:振动分析
  • TSN恶劣环境鲁棒性测试全攻略:从实验室到工业现场的确定性验证
  • 2026年口碑好的新加坡留学服务机构:五家优选深度解析 - 科技焦点
  • JSM12N60F 600V N沟道功率MOSFET
  • 上海APP开发公司技术路径拆解:从架构选型到跨端落地的工程实践
  • AtomGit Flutter鸿蒙客户端:共享组件
  • 马鞍山市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 千叶啊
  • # Claude Code + Playwright MCP 使用
  • 普通代理记账公司和懂出口退税的财税顾问,差距体现在哪?| 出口企业选型对照
  • 学习卷积操作
  • 基于RK3588平台的ALSA音频学习与开发指南
  • 贺州市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 干豆腐啊
  • 食品造型玩具为什么在北美走红?从IP授权角度看一门正在变大的生意
  • 阿坝藏族羌族自治州2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 千叶啊
  • python DNN反向链推理
  • 滑动窗口:定长滑动窗口与不定长滑动窗口
  • 【新版 SeaTunnel Web 最佳实践9】:11 个场景讲清楚 MySQL 到 Oracle 单表同步
  • 【课程设计/毕业设计】基于Android的全民健身App设计与实现【附源码、数据库、万字文档】
  • 美州手工牛肉汉堡2026年合作政策解析
  • 微信小程序计算机毕设之基于Android的全民健身App设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序毕业设计-基于微信小程序的演唱会售票系统基于springboot+微信小程序的演唱会售票系统小程序(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 金昌市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 干豆腐啊
  • 轻量化落地!四维精益TPM实操体系,根治车间设备故障难题
  • 鞍山市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 千叶啊
  • 浏览器市场与用户画像分析-数据大屏
  • MySQL高可用架构实战:备份恢复、主从复制、读写分离与MHA
  • Spring AI 1.x 系列【56】用大模型评判大模型:递归顾问实现自动化评估方案
  • MySQL的学习之路:存储引擎、数据类型与表设计规范
  • iOS 27的11个新变化,你觉得值得更新吗?
  • 墨香情手游:以水墨绘江湖,用情义写春秋