Ceph分布式存储核心技术精要与运维实践指南

第一章:Ceph 分布式存储系统概述

1.1 用户角色与职责

  • 存储管理员:安装、配置、维护集群;培训架构师;提供弹性和恢复;实现自动化。
  • 存储操作员:日常操作,使用Dashboard监控告警、更换故障设备。
  • 其他角色:云操作员、自动化工程师、应用开发人员、基础架构架构师、数据中心操作员等。

1.2 Ceph 核心优势

  • 开源、分布式、软件定义存储(SDS)
  • 高可用、高扩展、易用,支持海量数据
  • 可部署于 x86/ARM 通用服务器,支持异构节点
  • 去中心化:客户端通过 CRUSH 算法自行计算对象位置
  • 自动扩展、数据再平衡、自我恢复

1.3 Ceph 架构组件

  • RADOS(可靠自主分布式对象存储):核心后端
  • 访问方式:librados(原生API)、RBD(块)、RGW(对象)、CephFS(文件)
  • 后端守护进程
    • MON:维护集群状态映射,提供仲裁
    • OSD:存储数据,处理复制、恢复、再平衡
    • MGR:提供 Dashboard 和 REST API,跟踪指标
    • MDS:CephFS 元数据管理

1.4 版本与生命周期

  • 自 Nautilus (14.2.0) 起每年 3 月 1 日发布稳定版,支持周期约 2 年
  • 版本格式:x.y.z(x=发行周期,y=类型,z=修订号)
  • 企业版(Red Hat Ceph Storage)基于社区 LTS,提供 36 个月支持

第二章:Ceph 分布式存储部署

2.1 部署方式

  • Cephadm(推荐):基于容器,支持 Octopus+,通过引导创建单节点,后续扩容
  • Rook:基于 Kubernetes
  • 其他:ceph-ansible、DeepSea、手动(不推荐 ceph-deploy)

2.2 硬件与网络要求

  • OSD:≥1核CPU,4G内存,整块硬盘/SSD分区,1G/10G网卡
  • MON:≥2核,2-4G内存,60G磁盘
  • MDS:≥2核,≥2G内存
  • 关键端口:MON(3300,6789)、OSD(6800-7300)、MGR(8443)、RGW(80) 等

2.3 Cephadm 引导与集群初始化

  • 命令示例:cephadm bootstrap --mon-ip <IP> --allow-fqdn-hostname
  • 生成 Dashboard 访问地址(默认8443端口)及 admin 用户
  • 自动部署 MON、MGR、crash、Prometheus、Grafana、Alertmanager 等

2.4 节点添加与 OSD 部署

  • 获取 SSH 公钥:ceph cephadm get-pub-key
  • 添加主机:ceph orch host add <hostname>
  • 部署 OSD:ceph orch apply osd --all-available-devices
  • 禁用服务自动扩展:ceph orch apply <service> --unmanaged=true

2.5 集群组件管理

  • ceph orch ls:查看服务
  • ceph orch ps:查看守护进程
  • 删除 OSD:ceph orch osd rm <id> [--force --zap]
  • 删除主机:需先停止并删除其上所有服务,清理 OSD 及 crush 映射

第三章:Ceph 集群配置管理

3.1 配置来源与优先级

  • 默认值 → 集中配置数据库 → 本地配置文件 → 环境变量 → 命令行参数
  • MON 维护集中配置数据库,优先使用

3.2 配置文件(ceph.conf)

  • INI 格式,支持 [global][mon][osd][mgr][mds][client] 等段
  • 实例段:[mon.ceph1] 用于特定守护进程
  • 元变量:$cluster$type$id$name$host

3.3 集中配置数据库管理

  • ceph config ls:列出所有可配置项
  • ceph config get <daemon> [key]:获取配置值
  • ceph config set <daemon> <key> <value>:持久化修改
  • ceph config rm <daemon> <key>:清除自定义值
  • ceph config reset <num>:回滚历史版本

3.4 运行时临时修改

  • ceph tell <type.id> config set <key> <value>:临时生效,重启恢复
  • ceph daemon <type.id> config set <key> <value>:本地生效,无需连接 MON

3.5 监控器(MON)配置

  • 维护集群映射(MON map、OSD map、PG map、CRUSH map、MDS map)
  • 建议至少 3 个 MON 节点,奇数个以保证仲裁
  • 查看仲裁:ceph quorum_statusceph mon stat
  • 压缩 MON 数据库:ceph tell mon.<id> compact

3.6 网络与安全

  • public_network:客户端与集群通信
  • cluster_network:OSD 间复制/恢复流量,建议独立以提高性能
  • 支持 IPv6,巨型帧(MTU=9000)
  • 防火墙:开放相应端口(MON:6789/3300,OSD:6800-7300等)
  • 认证协议:默认启用 cephx,可通过 auth_*_required 调整

第四章:Ceph 存储池管理

4.1 数据组织结构

  • Pool(池):逻辑分区,包含多个 PG,可设置副本或纠删码
  • PG(Placement Group):对象的集合,映射到 OSD 集
  • 对象:由对象ID、二进制数据、元数据组成

4.2 客户端访问流程

  1. 从 MON 获取集群映射
  2. 计算 PG ID:hash(object_id) % pg_num
  3. CRUSH 算法确定主 OSD 及副本 OSD
  4. 客户端直接与主 OSD 通信

4.3 数据保护类型

  • 副本池:多份完整副本,读性能好,空间开销大
  • 纠删码池:k+m 模式,节省空间,需 CPU 计算,适合冷数据

4.4 创建与配置池

  • 创建副本池:ceph osd pool create <name> <pg_num> replicated
  • 创建纠删码池:ceph osd pool create <name> <pg_num> erasure [profile]
  • 管理应用类型:ceph osd pool application enable <pool> rbd|cephfs|rgw
  • 设置配额:ceph osd pool set-quota <pool> max_objects|max_bytes <value>
  • 修改副本数:ceph osd pool set <pool> size <n>
  • PG 自动扩展:pg_autoscale_mode on/off/warn

4.5 对象操作

  • 上传:rados -p <pool> put <obj> <file>
  • 下载:rados -p <pool> get <obj> <file>
  • 列表:rados -p <pool> ls
  • 删除:rados -p <pool> rm <obj>

4.6 快照与命名空间

  • 创建池快照:ceph osd pool mksnap <pool> <snap>
  • 回滚:rados -p <pool> rollback <obj> <snap>
  • 命名空间:逻辑隔离对象,rados -p <pool> -N <ns> put ...

4.7 删除池

  • 需先设置 mon_allow_pool_delete = true
  • 命令:ceph osd pool rm <pool> <pool> --yes-i-really-really-mean-it

第五章:Ceph 认证与授权管理

5.1 cephx 协议

  • 基于共享密钥的认证系统
  • 客户端与 MON 之间通过会话密钥加密通信
  • 认证流程:请求会话密钥 → 获取加密会话密钥 → 解密 → 请求票据 → 与 OSD/MDS 通信

5.2 用户账户

  • 类型:守护进程账户(osd.0、mgr.ceph1)和客户端账户(client.*)
  • 超级用户:client.admin,拥有全部权限
  • 密钥环文件默认位置:/etc/ceph/ceph.client.<name>.keyring

5.3 用户管理命令

  • 列出用户:ceph auth ls
  • 获取用户详情:ceph auth get <name>
  • 创建用户:ceph auth addceph auth get-or-create
  • 删除用户:ceph auth del
  • 导出/导入:ceph auth exportceph auth import

5.4 权限(Capabilities)

  • 守护进程类型:monosdmgrmds
  • 权限值:allowr(读)、w(写)、x(执行类方法)、class-readclass-write*(全部)
  • 预定义 profile:osdbootstrap-osdrbdrbd-read-only
  • 精细化限制:pool=<pool>namespace=<ns>object_prefix <prefix>path=<path>command "<cmd>"

5.5 修改用户权限

  • ceph auth caps <name> <daemon> '<caps>'
  • 示例:ceph auth caps client.myuser mon 'allow r' osd 'allow rw pool=mypool'

5.6 客户端使用

  • 指定用户:--id <name>--name client.<name>
  • 指定密钥环:--keyring <path>
  • 可通过环境变量 CEPH_ARGS 设置默认用户
相关推荐
tianyuanwo2 小时前
Jenkins × Gerrit 集成:自动触发构建的全流程解析
运维·servlet·jenkins
顾默@2 小时前
双系统Ubuntu18.04升级22.04,安装docker进行openclaw安装
运维·docker·容器
杨充2 小时前
1.1 数据编码设计原理
linux·运维·网络·底层原理·数据编码
一只鹿鹿鹿2 小时前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
wanhengidc3 小时前
双线服务器有哪些优点?
运维·服务器
一个行走的民3 小时前
Ceph OSD NUMA 亲和性、Page Cache 跨 NUMA 访问与绑核实践
ceph
蜀道山老天师3 小时前
Docker Compose 多容器编排实战:LNMP、Tomcat 集群、云桌面、Portainer、Zabbix 一键部署
运维·docker·容器·tomcat·zabbix
jscxy52063 小时前
ospf综合实验
运维·服务器·网络
潮起鲸落入海3 小时前
ceph集群组件管理 ceph orch 和ceph config命令
ceph