news 2026/6/10 12:43:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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排查告警。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:33:17

windows菜单搜索栏无法显示历史记录或者无法使用修复方法

Windows 搜索栏坏了&#xff1f;三步搞定症状&#xff1a;开始菜单搜索框没反应&#xff0c;搜不出东西。原因&#xff1a;Windows Search 服务挂了。修复&#xff1a;打开 PowerShell&#xff08;管理员&#xff09;&#xff0c;依次运行&#xff1a;Set-Service -Name "…

作者头像 李华
网站建设 2026/6/10 12:32:56

特种纸厂分布在哪里?从原纸到功能纸的产区格局解读

特种纸厂分布在哪里&#xff1f;从原纸到功能纸的产区格局解读 特种纸是造纸业中技术壁垒最高的细分品类&#xff0c;涵盖装饰原纸、电气绝缘纸、茶叶滤纸、无碳复写纸、热敏纸基纸、防油纸、医用包装纸等数十个功能性门类。与普通文化纸、白板纸相比&#xff0c;特种纸的生产商…

作者头像 李华
网站建设 2026/6/10 12:30:26

【AgentScope Java新手村系列】(1)框架简介与环境搭建

第一章 AgentScope Java 2.0 入门&#xff1a;从源码编译到第一个能对话的 Agent "本章把 2.0.0-RC2 框架从 GitHub 拉下来编译安装、用纯 Java 启动工程、接入 DeepSeek 模型并跑通对话——完成你 AgentScope Java 学习之旅的第 0 步。" 1.1 AgentScope Java 是什么…

作者头像 李华
网站建设 2026/6/10 12:26:36

Python 高手编程系列十三:字典

字典是 Python 中最通用的数据结构之一。dict 可以将一组唯一键映射到对应的值&#xff0c; 如下所示&#xff1a; { 1: ’ one’, 2: ’ two’, 3: ’ three’, } 字典是你应该已经了解的基本内容。不管怎样&#xff0c;程序员还可以用和前面列表推导类似 的推导来创建一个新的…

作者头像 李华
网站建设 2026/6/10 12:19:08

Mythos模型:面向世界建模的AI叙事引擎与闸门式部署实践

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次能力边界的实质性突破“TAI #200: Anthropic’s Mythos Capability Step Change and Gated Release”这个标题里藏着三个关键信号&#xff1a;TAI&#xff08;The AI Index&#xff0c;全球AI领域最具公信力的年…

作者头像 李华