Ceph 分布式存储从入门到实战

文章目录

  • [Ceph 分布式存储从入门到实战](#Ceph 分布式存储从入门到实战)
    • 引言
    • [一、Ceph 核心亮点与应用场景](#一、Ceph 核心亮点与应用场景)
      • [1. 核心优势](#1. 核心优势)
      • [2. 典型应用场景](#2. 典型应用场景)
    • 二、核心概念速通(必懂基础)
      • [1. 核心架构与组件](#1. 核心架构与组件)
      • [2. 关键术语](#2. 关键术语)
      • [3. PG 数量计算(核心公式)](#3. PG 数量计算(核心公式))
    • [三、Ceph 部署实战(cephadm 方式)](#三、Ceph 部署实战(cephadm 方式))
      • [1. 环境准备(所有节点执行)](#1. 环境准备(所有节点执行))
      • [2. 引导集群(主节点执行)](#2. 引导集群(主节点执行))
      • [3. 添加集群节点](#3. 添加集群节点)
      • [4. 部署 OSD(存储数据核心)](#4. 部署 OSD(存储数据核心))
      • [5. 验证集群状态](#5. 验证集群状态)
    • 四、核心配置(部署后必做)
      • [1. 集群配置数据库](#1. 集群配置数据库)
      • [2. 网络配置](#2. 网络配置)
      • [3. 防火墙规则(如需开启防火墙)](#3. 防火墙规则(如需开启防火墙))
    • 五、池管理(数据组织核心)
      • [1. 创建池](#1. 创建池)
      • [2. 池配置管理](#2. 池配置管理)
      • [3. 池快照与命名空间](#3. 池快照与命名空间)
      • [4. 删除池](#4. 删除池)
    • [六、认证与授权(cephx 协议)](#六、认证与授权(cephx 协议))
      • [1. 核心概念](#1. 核心概念)
      • [2. 用户管理核心命令](#2. 用户管理核心命令)
    • 七、三大存储类型实战
      • [1. 块存储(RBD)------ 虚拟机 / 云实例存储](#1. 块存储(RBD)—— 虚拟机 / 云实例存储)
      • [2. 对象存储(RGW)------ S3/Swift API 访问](#2. 对象存储(RGW)—— S3/Swift API 访问)
        • [(1)部署 RGW](#(1)部署 RGW)
        • [(2)创建 S3 访问用户](#(2)创建 S3 访问用户)
        • [(3)S3 API 访问(使用 awscli)](#(3)S3 API 访问(使用 awscli))
      • [3. 文件系统(CephFS)------ 共享文件存储](#3. 文件系统(CephFS)—— 共享文件存储)
        • [(1)部署 CephFS](#(1)部署 CephFS)
        • [(2)挂载 CephFS](#(2)挂载 CephFS)
        • [(3)CephFS 快照](#(3)CephFS 快照)
    • 八、核心总结

Ceph 分布式存储从入门到实战

引言

在海量数据存储场景中,Ceph 凭借「分布式架构、统一存储接口、高可用、可扩展」的核心优势,成为云原生时代的首选存储方案。它支持块存储(RBD)、对象存储(RGW)、文件系统(CephFS)三种存储类型,可部署在通用 x86/ARM 服务器上,无需专用硬件,能轻松扩展至 EB 级容量。

一、Ceph 核心亮点与应用场景

1. 核心优势

  • 统一存储:一套集群支持块、对象、文件三种存储类型,无需部署多套存储系统。
  • 去中心化:基于 RADOS 架构,无单点故障,数据自动分片、复制和恢复。
  • 高可用:支持多副本、纠删码容错,节点故障时自动恢复数据。
  • 弹性扩展:新增节点即可扩容,容量和性能线性增长,支持 PB/EB 级存储。
  • 兼容性强:兼容 OpenStack、K8s、S3/Swift API,无缝集成云原生生态。

2. 典型应用场景

  • 虚拟化 / 云平台存储(OpenStack Cinder、K8s PVC)
  • 海量非结构化数据存储(图片、日志、备份)
  • 大数据分析、AI 训练数据存储
  • 企业级文件共享、数据库存储
  • 灾备存储(多站点复制)

二、核心概念速通(必懂基础)

1. 核心架构与组件

Ceph 核心是 RADOS(可靠的自主分布式对象存储),所有数据以对象形式存储,上层通过不同接口提供三种存储服务。核心组件如下:

组件 核心作用
监视器(MON) 维护集群映射(Cluster Map),协调集群状态,需部署奇数个(推荐 3 个)。
对象存储设备(OSD) 存储数据、处理数据复制 / 恢复 / 再平衡,每个 OSD 对应一块硬盘(推荐 SSD 加速)。
管理器(MGR) 提供集群监控、Dashboard、统计数据,推荐部署 2 个实现高可用。
元数据服务器(MDS) 管理 CephFS 的元数据(目录、权限),仅用于文件系统存储。
对象网关(RGW) 提供 S3/Swift API 接口,用于对象存储访问。

2. 关键术语

  • 池(Pool):逻辑存储分区,用于隔离数据,分为复本池(多副本容错)和纠删码池(省空间)。
  • 放置组(PG):对象的集合,是池与 OSD 之间的抽象层,用于分散数据压力,需提前规划数量。
  • CRUSH 算法:Ceph 核心数据分布算法,客户端通过该算法直接计算对象存储位置,无需中央索引。
  • 集群映射(Cluster Map):包含 MON/OSD/PG/CRUSH 等映射,客户端通过它获取集群拓扑,实现直接访问 OSD。

3. PG 数量计算(核心公式)

PG 数量直接影响集群性能,推荐公式:

  • 集群总 PG 数 =(OSD 总数 × 100)÷ 最大副本数(向上取 2 的幂)
  • 单个池 PG 数 = 总 PG 数 ÷ 池数量(示例:10 个 OSD、副本数 3 → 总 PG 333 → 取 512;3 个池 → 每个池 170 → 取 128)
  • 简化原则:OSD <5 → 128;5-10 → 512;10-50 → 4096

三、Ceph 部署实战(cephadm 方式)

cephadm 是官方推荐的容器化部署工具,支持自动部署、升级、运维,以下是 CentOS Stream 8 环境下的核心步骤:

1. 环境准备(所有节点执行)

bash 复制代码
# 1. 关闭 SELinux 和防火墙
sed -ri 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld --now

# 2. 配置阿里云 YUM 源
cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific
enabled=1
gpgcheck=0
EOF

# 3. 安装基础依赖和 cephadm
dnf install -y chrony bash-completion vim
systemctl enable chronyd --now
dnf install -y cephadm

2. 引导集群(主节点执行)

bash 复制代码
# 引导集群(指定 MON IP、Dashboard 账号密码)
cephadm bootstrap --mon-ip 192.168.108.11 \
--initial-dashboard-user admin \
--initial-dashboard-password Ceph@123 \
--allow-fqdn-hostname

# 验证引导结果(出现 Dashboard 地址即成功)
# 访问地址:https://192.168.108.11:8443,账号 admin/Ceph@123

3. 添加集群节点

bash 复制代码
# 1. 获取集群公钥(主节点)
ceph cephadm get-pub-key > ~/ceph.pub

# 2. 推送公钥到其他节点(免密登录)
ssh-copy-id -f -i ~/ceph.pub root@192.168.108.12
ssh-copy-id -f -i ~/ceph.pub root@192.168.108.13

# 3. 添加节点到集群
ceph orch host add 192.168.108.12
ceph orch host add 192.168.108.13

# 4. 部署 MON/MGR(指定标签节点)
ceph orch host label add 192.168.108.12 _admin
ceph orch host label add 192.168.108.13 _admin
ceph orch apply mon --placement="label:_admin"
ceph orch apply mgr --placement="label:_admin"

4. 部署 OSD(存储数据核心)

bash 复制代码
# 自动部署所有节点的空闲硬盘为 OSD
ceph orch apply osd --all-available-devices

# 验证 OSD 状态(状态 up/in 即正常)
ceph osd tree

5. 验证集群状态

bash 复制代码
ceph -s  # 查看集群健康状态(HEALTH_OK 为正常)
ceph orch ls  # 查看所有部署的服务

四、核心配置(部署后必做)

1. 集群配置数据库

Ceph 优先使用集中配置数据库,而非 ceph.conf,核心命令:

bash 复制代码
# 查看所有配置
ceph config ls

# 设置配置(例:修改 MON 允许删除池)
ceph config set mon mon_allow_pool_delete true

# 查看特定配置
ceph config get mon mon_allow_pool_delete

# 运行时临时修改(重启失效)
ceph tell mon.* config set mon_allow_pool_delete true

2. 网络配置

bash 复制代码
# 配置公共网络(客户端与集群通信)
ceph config set global public_network 192.168.108.0/24

# 配置集群网络(OSD 数据复制/恢复,可选)
ceph config set global cluster_network 192.168.109.0/24

3. 防火墙规则(如需开启防火墙)

bash 复制代码
# MON 端口
firewall-cmd --add-port=6789/tcp --add-port=3300/tcp --permanent
# OSD 端口
firewall-cmd --add-port=6800-7300/tcp --permanent
# Dashboard 端口
firewall-cmd --add-port=8443/tcp --permanent
firewall-cmd --reload

五、池管理(数据组织核心)

池是 Ceph 数据的逻辑分区,所有数据存储在池中,核心操作如下:

1. 创建池

bash 复制代码
# 1. 复本池(默认,高可用,适合高频访问)
ceph osd pool create pool_web 128 128 replicated
# 说明:128 为 PG/PGP 数量,replicated 为复本池类型

# 2. 纠删码池(省空间,适合备份/归档,k=4 数据块,m=2 校验块)
ceph osd erasure-code-profile set ec_profile k=4 m=2
ceph osd pool create pool_backup 128 128 erasure ec_profile

2. 池配置管理

bash 复制代码
# 查看池列表
ceph osd pool ls
ceph osd pool ls detail  # 查看详细配置

# 修改复本数
ceph osd pool set pool_web size 3  # 3 副本
ceph osd pool set pool_web min_size 2  # 最小可用副本数

# 设置配额(限制最大对象数/容量)
ceph osd pool set-quota pool_web max_objects 100000
ceph osd pool set-quota pool_web max_bytes 10G

# 查看配额
ceph osd pool get-quota pool_web

3. 池快照与命名空间

bash 复制代码
# 创建快照
ceph osd pool mksnap pool_web snap1

# 查看快照
rados -p pool_web lssnap

# 从快照恢复对象
rados -p pool_web -s snap1 get 文件名 本地文件

# 创建命名空间(隔离对象,多应用共享一个池)
rados -p pool_web -N app1 put 文件名 本地文件
rados -p pool_web -N app1 ls  # 查看命名空间内对象

4. 删除池

bash 复制代码
# 必须先允许删除池
ceph config set mon mon_allow_pool_delete true

# 删除池(需输入池名两次)
ceph osd pool rm pool_backup pool_backup --yes-i-really-really-mean-it

六、认证与授权(cephx 协议)

1. 核心概念

Ceph 用 cephx 协议加密认证,用户分为:

  • 系统用户(如 client.adminosd.0):集群内部通信
  • 客户端用户(如 client.openstack):外部应用访问集群

2. 用户管理核心命令

bash 复制代码
# 查看所有用户
ceph auth ls

# 创建用户(例:创建 RBD 访问用户)
ceph auth get-or-create client.rbd mon 'profile rbd' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd.keyring

# 授权用户访问特定池
ceph auth caps client.rbd mon 'allow r' osd 'allow rw pool=pool_web'

# 导出/导入用户
ceph auth export client.rbd -o client.rbd.keyring
ceph auth import -i client.rbd.keyring

# 删除用户
ceph auth rm client.rbd

七、三大存储类型实战

1. 块存储(RBD)------ 虚拟机 / 云实例存储

(1)基础操作
bash 复制代码
# 1. 初始化 RBD 池
ceph osd pool application enable pool_web rbd
rbd pool init pool_web

# 2. 创建 RBD 镜像(10G)
rbd create pool_web/nginx-img --size 10G

# 3. 映射镜像到本地(客户端需安装 ceph-common)
rbd map pool_web/nginx-img --id rbd

# 4. 格式化并挂载
mkfs.xfs /dev/rbd0
mkdir /mnt/rbd
mount /dev/rbd0 /mnt/rbd

# 5. 查看映射
rbd showmapped
(2)快照与克隆
bash 复制代码
# 创建快照
rbd snap create pool_web/nginx-img@snap1

# 保护快照(禁止删除,用于克隆)
rbd snap protect pool_web/nginx-img@snap1

# 克隆快照为新镜像
rbd clone pool_web/nginx-img@snap1 pool_web/nginx-img-clone

# 扁平化克隆(脱离父快照独立)
rbd flatten pool_web/nginx-img-clone
(3)持久化映射
bash 复制代码
# 编辑 /etc/ceph/rbdmap
echo "pool_web/nginx-img id=rbd,keyring=/etc/ceph/ceph.client.rbd.keyring" >> /etc/ceph/rbdmap

# 编辑 /etc/fstab
echo "/dev/rbd/pool_web/nginx-img /mnt/rbd xfs _netdev 0 0" >> /etc/fstab

# 启用服务
systemctl enable rbdmap --now

2. 对象存储(RGW)------ S3/Swift API 访问

(1)部署 RGW
bash 复制代码
# 创建域、区域组、区域
radosgw-admin realm create --rgw-realm=myrealm --default
radosgw-admin zonegroup create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup --master --default
radosgw-admin zone create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup --rgw-zone=myzone --master --default
radosgw-admin period update --rgw-realm=myrealm --commit

# 部署 RGW 服务(3 个实例,端口 8080)
ceph orch apply rgw myrealm --placement="3 192.168.108.11 192.168.108.12 192.168.108.13" --port=8080
(2)创建 S3 访问用户
bash 复制代码
radosgw-admin user create --uid=s3user --display-name="S3 User" --access-key=AKIAEXAMPLE --secret-key=EXAMPLESECRET
(3)S3 API 访问(使用 awscli)
bash 复制代码
# 安装 awscli
pip3 install awscli

# 配置凭据
aws configure
# Access Key: AKIAEXAMPLE
# Secret Key: EXAMPLESECRET
# Region: 留空
# Output Format: 留空

# 创建桶
aws --endpoint=http://192.168.108.11:8080 s3 mb s3://mybucket

# 上传文件
aws --endpoint=http://192.168.108.11:8080 s3 cp localfile.txt s3://mybucket

# 查看桶内容
aws --endpoint=http://192.168.108.11:8080 s3 ls s3://mybucket

3. 文件系统(CephFS)------ 共享文件存储

(1)部署 CephFS
bash 复制代码
# 1. 创建元数据池和数据池(元数据池复本数 3)
ceph osd pool create cephfs_meta 64 64 replicated
ceph osd pool create cephfs_data 256 256 replicated
ceph osd pool set cephfs_meta size 3

# 2. 创建 CephFS 文件系统
ceph fs new mycephfs cephfs_meta cephfs_data

# 3. 部署 MDS(元数据服务器)
ceph orch apply mds mycephfs --placement="2 192.168.108.11 192.168.108.12"

# 4. 验证
ceph fs ls
ceph fs status mycephfs
(2)挂载 CephFS
bash 复制代码
# 1. Kernel 挂载(推荐,需内核 ≥4.0)
mkdir /mnt/cephfs
mount.ceph 192.168.108.11:/ /mnt/cephfs -o name=admin,fs=mycephfs

# 2. FUSE 挂载(兼容老内核,需安装 ceph-fuse)
dnf install -y ceph-fuse
ceph-fuse -n client.admin /mnt/cephfs --client_fs=mycephfs

# 3. 持久化挂载(/etc/fstab)
echo "192.168.108.11:/ /mnt/cephfs ceph name=admin,fs=mycephfs,_netdev 0 0" >> /etc/fstab
(3)CephFS 快照
bash 复制代码
# 创建快照(.snap 为隐藏目录)
mkdir /mnt/cephfs/.snap/snap1

# 恢复文件
cp /mnt/cephfs/.snap/snap1/file.txt /mnt/cephfs/

# 删除快照
rmdir /mnt/cephfs/.snap/snap1

八、核心总结

  1. Ceph 核心是 RADOS,通过 MON 维护集群状态,OSD 存储数据,MGR 提供监控,MDS/RGW 提供文件 / 对象接口。
  2. 部署优先用 cephadm,简单高效,支持容器化管理,减少依赖冲突。
  3. 池是数据组织的核心,PG 数量需按 OSD 数量合理规划,复本池适合高频访问,纠删码池适合归档。
  4. 三大存储类型按需选择:块存储用于虚拟机,对象存储用于海量文件,文件系统用于共享存储。
相关推荐
wniuniu_2 小时前
ceph的参数
java·数据库·ceph
wniuniu_2 小时前
ceph心跳机制
开发语言·ceph·php
FinTech老王2 小时前
制造业Oracle迁移替换:集中式vs分布式架构如何选择?
分布式·oracle·架构
风跟我说过她2 小时前
HBase完全分布式部署详细教程(含HA高可用版+普通非HA版)
大数据·数据库·分布式·centos·hbase
十五年专注C++开发3 小时前
Jieba库: 一个中文分词领域的经典库
c++·分布式·自然语言处理·中文分词
Vic101013 小时前
【无标题】
java·数据库·分布式
武子康4 小时前
Java-216 RocketMQ 4.5.1 在 JDK9+ 从0到1全流程启动踩坑全解:脚本兼容修复(GC 参数/CLASSPATH/ext.dirs)
java·大数据·分布式·消息队列·系统架构·rocketmq·java-rocketmq
回家路上绕了弯4 小时前
分布式事务本地消息表详解:中小团队的低侵入落地方案
分布式·后端
Wang's Blog4 小时前
Kafka: 高吞吐量原理、应用场景
分布式·kafka