资讯动态

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

发布时间:2026/9/12 15:26:29 来源:尧图企业网站定制
Ceph分布式存储核心知识点与实验总结一、文档概述本文档是一本完整的Ceph分布式存储教材涵盖了从基础概念、架构原理、部署实施到高级特性块存储、对象存储、文件系统的全栈知识。Ceph作为开源的软件定义存储SDS解决方案提供统一存储能力对象、块、文件具有去中心化、高扩展性、自修复等特点。文档重点介绍了Cephadm容器化部署方式、集群管理、存储池配置、RBD镜像管理、RADOS网关对象存储以及CephFS文件系统等内容。二、核心知识点总结1. Ceph架构组件组件功能MON维护集群状态映射Cluster Map通过Paxos算法保证一致性奇数个节点构成仲裁OSD对象存储设备实际存储数据处理数据复制、恢复和再平衡MGR提供集群监控、Dashboard Web界面和REST APIMDS元数据服务器仅为CephFS服务管理文件名、目录、权限等元数据RADOS可靠自主分布式对象存储核心实现CRUSH算法进行数据分布2. 核心原理CRUSH算法客户端直接计算对象存储位置无需中心查表实现线性扩展。PGPlacement Group对象→PG→OSD的映射中间层聚合对象以减少管理开销。数据访问流程客户端先连接MON获取Cluster Map → CRUSH计算PG及主OSD → 直接与主OSD通信读写。数据保护模式复本池Replicated默认size3高读性能空间利用率低。纠删码池Erasure Codekm模式空间利用率高需消耗CPU计算。3. 部署方式Cephadm推荐容器化部署使用Podman/Docker通过SSH管理节点支持Pacific及更新版本。RookKubernetes原生部署。其他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内置账户。能力Capabilitiesallow r读、allow w写、allow x执行类方法、allow *全部。7. 配置管理集中配置数据库存储在MON节点使用ceph config set命令持久化修改优先级高于本地ceph.conf。运行时覆盖ceph tell daemon injectargs临时生效重启后恢复。三、关键实验及注释代码以下实验基于Ceph Pacificv16和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 laogao123\# 初始密码--dashboard-password-noupdate# 禁止后续自动更新密码# 引导成功后输出重要信息# - Dashboard访问URL: https://ceph1.laogao.cloud:8443/# - 管理员密钥环文件: /etc/ceph/ceph.client.admin.keyring# - 集群FSID: 自动生成的UUID说明bootstrap命令会在当前节点创建一个最小集群1个MON1个MGR并自动生成SSH密钥、配置文件、密钥环文件同时部署监控组件Prometheus、Grafana、Alertmanager等。实验2添加新节点并部署OSD# 在ceph1节点已引导上操作# 1. 获取集群公钥并分发到其他节点ceph cephadm get-pub-key~/ceph.pub ssh-copy-id-f-i~/ceph.pub rootceph2.laogao.cloud ssh-copy-id-f-i~/ceph.pub rootceph3.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. 创建复本池默认size3ceph osd pool create mypool3232replicated# 参数池名称PG数量PGP数量通常等于PG数类型# 2. 查看池列表ceph osd poollsdetail# 输出包含池ID、副本数、CRUSH规则、应用类型等# 3. 为池指定应用类型RBD、RGW、CephFSceph osd pool applicationenablemypool rbd# 4. 上传对象到池中rados-pmypool put myobject /etc/hosts# rados命令-p指定池put表示上传myobject为对象名后跟本地文件# 5. 列出池中所有对象rados-pmypoolls# 6. 查看对象位置映射到哪个OSDceph 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。实验4RBD块设备操作# 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. 写入测试数据echoHello RBD/mnt/rbd/test.txt# 7. 创建快照先卸载或冻结文件系统umount/mnt/rbd rbd snap create rbd_pool/webimagesnap1# 8. 列出快照rbd snaplsrbd_pool/webimage# 9. 回滚快照会覆盖当前数据rbd snap rollback rbd_pool/webimagesnap1# 10. 保护快照防止误删支持克隆rbd snap protect rbd_pool/webimagesnap1# 11. 从快照克隆出新的可写镜像rbd clone rbd_pool/webimagesnap1 rbd_pool/webimage_clone# 12. 扁平化克隆脱离父快照依赖rbd flatten rbd_pool/webimage_clone# 13. 删除快照需先解除保护rbd snap unprotect rbd_pool/webimagesnap1 rbd snaprmrbd_pool/webimagesnap1# 14. 删除镜像放入垃圾箱再彻底删除rbd trashmvrbd_pool/webimage rbd trashlsrbd_pool# 获取镜像IDrbd trashrmrbd_poolimage-id说明RBD默认开启layering、exclusive-lock、object-map、fast-diff、deep-flatten等特性。其中exclusive-lock保证同一时刻只有一个客户端写入防止数据损坏object-map加速快照差异计算。实验5RADOS网关RGW部署与S3访问# 1. 创建Realm全局命名空间radosgw-admin realm create --rgw-realmmyrealm--default# 2. 创建Zonegroup区域组radosgw-admin zonegroup create --rgw-realmmyrealm --rgw-zonegroupmygroup--master--default# 3. 创建Zone区域radosgw-admin zone create --rgw-realmmyrealm --rgw-zonegroupmygroup --rgw-zonemyzone--master--default# 4. 提交配置周期radosgw-admin period update--commit# 5. 使用编排器部署RGW服务3个实例端口8080ceph orch apply rgw myrealm--placement3 ceph1 ceph2 ceph3--realmmyrealm--zonemyzone--port8080# 6. 创建S3用户自动生成access_key和secret_keyradosgw-admin user create--uids3user --display-nameS3 User--emails3example.com# 7. 在客户端安装awscli并配置pip3installawscli aws configure# 输入Access Key, Secret Key, 区域留空# 8. 创建存储桶bucketaws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3 mb s3://mybucket# 9. 上传文件aws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3cp./localfile s3://mybucket/# 10. 列出桶内对象aws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3lss3://mybucket/# 11. 下载对象aws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3cps3://mybucket/localfile ./downloaded# 12. 删除桶需先清空aws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3rms3://mybucket/localfile aws --endpoint-urlhttp://ceph1.laogao.cloud:8080 s3 rb s3://mybucket说明RGW默认使用端口80HTTP或443HTTPS本例改为8080。多站点配置需在两个集群间建立对等关系通过radosgw-admin realm pull同步配置。实验6CephFS文件系统挂载# 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可选standbyceph orch apply mds mycephfs--placement2 ceph1 ceph2# 5. 查看文件系统状态ceph fs status mycephfs# 6. 在客户端安装ceph-common并复制配置和密钥# 服务端操作ceph auth get-or-create client.myuser monallow rmdsallow rwosdallow rw poolcephfs_data-o/etc/ceph/ceph.client.myuser.keyringscp/etc/ceph/ceph.conf rootclient:/etc/ceph/scp/etc/ceph/ceph.client.myuser.keyring rootclient:/etc/ceph/# 7. 客户端使用内核驱动挂载需内核支持mount-tceph ceph1.laogao.cloud:6789,ceph2.laogao.cloud:6789:/ /mnt/cephfs\-onamemyuser,secretfile/etc/ceph/ceph.client.myuser.keyring# 8. 或者使用FUSE挂载支持配额和ACLceph-fuse-nclient.myuser /mnt/cephfs# 9. 测试文件读写echoCephFS 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. 设置目录配额限制5GBsetfattr-nceph.quota.max_bytes-v5000000000/mnt/cephfs/my_dir说明CephFS支持多个active MDS以提高元数据性能需设置max_mds1。快照功能默认启用创建快照实质是在.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_deletefalse# 6. 查看配置修改历史ceph config log5# 7. 回滚到指定历史版本ceph config reset12# 12为日志中的条目序号说明集中配置数据库优先级高于本地ceph.conf建议使用ceph config set进行永久配置。临时修改用于调试使用injectargs。四、总结与最佳实践部署规划MON节点奇数个3/5/7独立于OSD节点以降低故障半径。网络分离public_network客户端访问和cluster_networkOSD心跳和复制。磁盘规划OSD推荐使用SSD作WAL/DB分区HDD作数据盘日志独立SSD可显著提升性能。性能调优PG数量单个OSD 100~200个PG过多消耗内存过少导致再平衡缓慢。RBD缓存启用rbd_cache true写策略writearound适合顺序读写writeback适合随机写。OSD内存默认4GB可通过osd_memory_target动态调整。高可用配置关键池副本数至少3min_size设为2防止脑裂。部署至少2个MGR实现主备。跨地域灾备使用RBD Mirroring或RGW多站点。安全加固启用Cephx认证禁用匿名访问。使用防火墙限制端口6789, 3300, 6800-7300, 8443等。定期轮换client.admin密钥。监控与运维内置Dashboard提供图形化管理URL: https://:8443。使用Prometheus Grafana导出集群指标。定期执行ceph health detail排查告警。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价