ceph分布式存储

Ceph 分布式存储

一、Ceph 概述

1. 核心特性

  • 开源、分布式、软件定义存储,支持对象、块、文件三种存储模式
  • 高可用、高扩展、易用性强,可部署在 x86/ARM 混合架构服务器
  • 采用 RADOS 核心架构,去中心化设计,通过 CRUSH 算法实现数据自主存储
  • 支持 PB/EB 级存储容量,数千客户端并发访问

2. 应用场景

  • 高性能计算、日志留存、智慧城市、虚拟化/云环境
  • 数据库存储、资源池化、海量数据挖掘

二、用户角色与权限

1. 核心角色

角色 核心职责
存储管理员 集群安装配置、维护、培训、灾难恢复、自动化集成
存储操作员 日常运维、集群监控、故障设备更换(依赖 Dashboard)
应用架构师 集群架构设计、资源规划、延迟优化
云操作员 云资源管理(OpenStack/OpenShift)、集群协作维护

2. 角色配置差异

  • 云服务提供商:侧重云操作员、存储操作员(不维护存储)
  • 金融机构:全角色内部配备,存储管理员作为服务核心
  • 小型机构/高校:技术支持人员兼任多角色

三、集群架构

1. 核心组件

  • RADOS:可靠自主分布式对象存储,Ceph 核心
  • MON(监控器):维护集群状态映射,奇数部署(需超过半数正常运行)
  • OSD(对象存储设备):存储数据、处理复制/恢复/重平衡,每磁盘对应一个 OSD 进程
  • MGR(管理器):集群指标监控、提供 Dashboard/REST API
  • MDS(元数据服务器):管理 CephFS 元数据,支持 POSIX 命令

2. 访问接口

  • librados:原生 API,支持多语言(C/C++/Java/Python 等),性能最优
  • RBD:块设备接口,支持 KVM/QEMU/OpenStack Cinder
  • RADOSGW:对象网关,支持 S3/Swift API,适用于备份/文件共享
  • CephFS:并行文件系统,支持快照、POSIX 兼容

3. 集群映射(Cluster Map)

包含 5 类核心映射,通过 ceph mon dump/ceph osd dump 等命令查看:

  • 监视器映射:集群 ID、MON 地址端口
  • OSD 映射:池列表、复本大小、OSD 状态
  • 放置组映射:PG 状态、数据使用统计
  • CRUSH 映射:存储设备层级、数据放置规则
  • MDS 映射:元数据服务器状态

四、集群部署(cephadm 方式)

1. 环境准备

Bash 复制代码
# 1. 配置主机名解析
cat >> /etc/hosts << EOF
192.168.108.10 client.laogao.cloud client
192.168.108.11 ceph1.laogao.cloud ceph1
192.168.108.12 ceph2.laogao.cloud ceph2
192.168.108.13 ceph3.laogao.cloud ceph3
192.168.108.14 ceph4.laogao.cloud ceph4
192.168.108.15 ceph5.laogao.cloud ceph5
192.168.108.16 ceph6.laogao.cloud ceph6
EOF

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

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

# 4. 安装依赖包
dnf install -y bash-completion vim chrony cephadm podman

# 5. 时间同步
systemctl enable chronyd --now

# 6. 下载镜像
podman pull quay.io/ceph/ceph:v16
podman pull quay.io/ceph/ceph-grafana:8.3.5
podman pull quay.io/prometheus/node-exporter:v1.3.1

2. 集群初始化

Bash 复制代码
# 引导集群(ceph1 作为引导节点)
cephadm bootstrap --mon-ip 192.168.108.11 \
--allow-fqdn-hostname \
--initial-dashboard-user admin \
--initial-dashboard-password laogao@123 \
--dashboard-password-noupdate

# 安装客户端工具
dnf install -y ceph-common

# 验证集群状态
ceph status

3. 添加集群节点

Bash 复制代码
# 获取集群公钥
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

# 添加节点到集群
ceph orch host add ceph2.laogao.cloud
ceph orch host add ceph3.laogao.cloud

# 验证节点状态
ceph orch host ls

4. 部署核心组件

Bash 复制代码
# 部署 MON(指定 admin 标签节点)
ceph orch host label add ceph2.laogao.cloud _admin
ceph orch host label add ceph3.laogao.cloud _admin
ceph orch apply mon --placement="label:_admin"

# 部署 MGR
ceph orch apply mgr --placement="label:_admin"

# 部署 OSD(使用所有可用设备)
ceph orch apply osd --all-available-devices

# 验证组件状态
ceph orch ls
ceph osd tree

五、核心功能操作

1. 池管理

Bash 复制代码
# 创建复本池
ceph osd pool create pool_web 32 32 replicated

# 创建纠删码池
ceph osd pool create pool_era 32 32 erasure

# 设置池配额(最大 10G/10 万对象)
ceph osd pool set-quota pool_web max_bytes 10G
ceph osd pool set-quota pool_web max_objects 100000

# 重命名池
ceph osd pool rename pool_web pool_apache

# 删除池(需先开启删除权限)
ceph config set mon mon_allow_pool_delete true
ceph osd pool rm pool_apache pool_apache --yes-i-really-really-mean-it

2. 对象管理(rados 命令)

Bash 复制代码
# 上传对象
echo "test data" > testfile
rados -p pool_web put testobj testfile

# 查看对象
rados -p pool_web ls
rados -p pool_web stat testobj

# 下载对象
rados -p pool_web get testobj downloadfile

# 删除对象
rados -p pool_web rm testobj

# 创建池快照
ceph osd pool mksnap pool_web snap1

# 恢复快照对象
rados -p pool_web -s snap1 rollback testobj

3. 块存储管理(RBD)

Bash 复制代码
# 创建 RBD 池并初始化
ceph osd pool create rbd_pool 32
rbd pool init rbd_pool

# 创建 RBD 镜像(10G)
rbd create rbd_pool/webapp --size 10G

# 映射镜像到本地
rbd map rbd_pool/webapp

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

# 创建快照
rbd snap create rbd_pool/webapp@snap1

# 克隆快照
rbd snap protect rbd_pool/webapp@snap1
rbd clone rbd_pool/webapp@snap1 rbd_pool/webapp_clone

# 卸载并取消映射
umount /mnt/rbd_webapp
rbd unmap /dev/rbd0

4. 对象存储管理(RGW)

Bash 复制代码
# 创建对象存储域/区域组/区域
radosgw-admin realm create --rgw-realm=webapp --default
radosgw-admin zonegroup create --rgw-realm=webapp --rgw-zonegroup=video --master --default
radosgw-admin zone create --rgw-realm=webapp --rgw-zonegroup=video --rgw-zone=storage --master --default
radosgw-admin period update --rgw-realm=webapp --commit

# 部署 RGW 服务
ceph orch apply rgw webapp --placement="3 ceph1 ceph2 ceph3" --realm=webapp --zone=storage --port=8080

# 创建 RGW 用户
radosgw-admin user create --uid="s3user" --display-name="S3 User"

# AWS CLI 配置
aws configure set aws_access_key_id <access_key>
aws configure set aws_secret_access_key <secret_key>

# 创建存储桶并上传文件
aws --endpoint=http://ceph1:8080 s3 mb s3://mybucket
aws --endpoint=http://ceph1:8080 s3 cp testfile s3://mybucket

5. 文件系统管理(CephFS)

Bash 复制代码
# 创建 CephFS(卷方式)
ceph fs volume create cephfs --placement="3 ceph1 ceph2 ceph3"

# 授权用户
ceph fs authorize cephfs client.cephfs_user / rwps > /etc/ceph/ceph.client.cephfs_user.keyring

# Kernel 挂载
mkdir /mnt/cephfs
mount.ceph ceph1.laogao.cloud:/ /mnt/cephfs -o name=cephfs_user,fs=cephfs

# FUSE 挂载(需安装 ceph-fuse)
dnf install -y ceph-fuse
ceph-fuse -n client.cephfs_user /mnt/cephfs_fuse

# 创建快照
mkdir /mnt/cephfs/.snap/snap1

# 卸载
umount /mnt/cephfs
umount /mnt/cephfs_fuse

6. 认证与授权

Bash 复制代码
# 创建用户
ceph auth add client.test mon 'allow r' osd 'allow rw pool=pool_web'

# 导出用户密钥
ceph auth get client.test -o /etc/ceph/ceph.client.test.keyring

# 修改权限
ceph auth caps client.test mon 'allow rw' osd 'allow *'

# 删除用户
ceph auth rm client.test

六、集群配置与维护

1. 配置管理

Bash 复制代码
# 查看配置
ceph config ls
ceph config get mon public_network

# 修改配置
ceph config set mon public_network 192.168.108.0/24
ceph config set osd osd_pool_default_size 3

# 运行时修改配置
ceph tell mon.* config set mon_allow_pool_delete true

# 查看配置历史
ceph config log

2. 集群监控

Bash 复制代码
# 查看集群状态
ceph -s
ceph health detail

# 查看 OSD 状态
ceph osd status
ceph osd tree

# 查看 MON 仲裁状态
ceph mon stat
ceph quorum_status -f json-pretty

# Dashboard 访问
# URL: https://ceph1.laogao.cloud:8443
# 用户名: admin,密码: laogao@123

3. 故障处理

Bash 复制代码
# 替换故障 OSD
ceph osd out osd.0
ceph orch daemon rm osd.0 --force
ceph osd crush rm osd.0
ceph osd rm 0
ceph orch device zap ceph1 /dev/sdb --force

# 重启组件
ceph orch daemon restart mon.ceph1
ceph orch restart osd.all-available-devices

# 修复 PG 不一致
ceph pg repair <pg_id>

七、多站点部署

1. RBD 镜像同步(单向)

Bash 复制代码
# 主集群创建池和镜像
ceph osd pool create rbd 32
rbd pool init rbd
rbd create rbd/image1 --size 1024 --image-feature=layering,exclusive-lock,journaling
rbd mirror pool enable rbd pool

# 生成引导令牌
rbd mirror pool peer bootstrap create --site-name prod rbd > bootstrap_token

# 备集群导入令牌并部署 rbd-mirror
scp bootstrap_token root@ceph4:
ceph orch apply rbd-mirror --placement=ceph4
rbd mirror pool peer bootstrap import --site-name backup --direction rx-only rbd bootstrap_token

2. CephFS 镜像同步

Bash 复制代码
# 源集群部署 mirror 守护进程
ceph orch apply cephfs-mirror ceph1

# 目标集群创建用户
ceph fs authorize cephfs client.cephfs-mirror / rwps

# 目标集群生成引导令牌
ceph fs snapshot mirror peer_bootstrap create cephfs client.cephfs-mirror backup

# 源集群导入令牌
ceph fs snapshot mirror peer_bootstrap import cephfs <token>

# 添加同步目录
ceph fs snapshot mirror add cephfs /webapp
相关推荐
北亚数据恢复2 小时前
VSAN分布式存储下非正常关机导致的虚拟机磁盘丢失如何恢复数据?
分布式·数据恢复·服务器数据恢复·北亚数据恢复·vsan数据恢复
阎*水3 小时前
Ceph 分布式存储完整实践指南
linux·运维·分布式·ceph
yours_Gabriel3 小时前
【kafka】基本概念
分布式·中间件·kafka
柒.梧.4 小时前
MyBatis一对一关联查询深度解析:大实体类、SQL99联表、分布式查询实践
分布式·mybatis
Wang's Blog5 小时前
Kafka: Admin 客户端操作指南之主题管理与集群监控
分布式·kafka
源代码•宸5 小时前
goframe框架签到系统项目开发(用户认证、基于 JWT 实现认证、携带access token获取用户信息)
服务器·开发语言·网络·分布式·后端·golang·jwt
前端世界6 小时前
别只测功能:一套可落地的鸿蒙分布式压力测试方案
分布式·压力测试·harmonyos
Wang's Blog6 小时前
Kafka: AdminClient 核心操作详解之Topic 信息查询、配置修改与分区管理
分布式·kafka
Mr.朱鹏6 小时前
分布式接口幂等性实战指南【完整版】
java·spring boot·分布式·sql·spring·云原生·幂等