文章目录
- [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.admin、osd.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
八、核心总结
- Ceph 核心是 RADOS,通过 MON 维护集群状态,OSD 存储数据,MGR 提供监控,MDS/RGW 提供文件 / 对象接口。
- 部署优先用 cephadm,简单高效,支持容器化管理,减少依赖冲突。
- 池是数据组织的核心,PG 数量需按 OSD 数量合理规划,复本池适合高频访问,纠删码池适合归档。
- 三大存储类型按需选择:块存储用于虚拟机,对象存储用于海量文件,文件系统用于共享存储。