效果图展示:

高可用架构:
bash
┌─────────────────────────────────────┐
│ 客户端访问层 (Public) │
│ 192.168.113.0/24 (业务网络) │
└─────────────────────────────────────┘
│
┌─────────────┬───────────────┼───────────────┬─────────────┐
│ │ │ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ Node1 │ │ Node2 │ │ Node3 │ │ Node4 │ │ Node5 │
│ .66 │ │ .77 │ │ .88 │ │ .99 │ │ .100 │
│ │ │ │ │ │ │ │ │ │
│ MON │ │ MON │ │ MON │ │ MON │ │ MON │
│ MGR │ │ MGR │ │ OSD×N │ │ OSD×N │ │ OSD×N │
│ OSD×N │ │ OSD×N │ │ MDS │ │ MDS │ │ RGW │
│ _admin │ │ _admin │ │ │ │ │ │ │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │ │
└─────────────┴───────────────┴───────────────┴─────────────┘
│
┌─────────────────────────────────────┐
│ 集群复制网络 (Cluster) │
│ 192.168.113.0/24 (复用或独立网络) │
└─────────────────────────────────────┘
角色分配:
**角色分配建议:**
| 节点 | IP地址 | 主机名 | 核心角色 | 附加角色 | 用途说明 |
|------|--------|--------|---------|---------|---------|
| Node1 | 192.168.113.66 | ceph-node1 | MON + MGR + OSD | _admin标签 | 管理节点+Bootstrap |
| Node2 | 192.168.113.77 | ceph-node2 | MON + MGR + OSD | _admin标签 | 管理节点 |
| Node3 | 192.168.113.88 | ceph-node3 | MON + OSD + MDS | - | 元数据服务 |
| Node4 | 192.168.113.99 | ceph-node4 | MON + OSD + MDS | - | 元数据服务 |
| Node5 | 192.168.113.100 | ceph-node5 | MON + OSD + RGW | - | 对象网关 |
**高可用设计原则:**
-
**MON (Monitor)**:部署5个,形成法定人数(Quorum),可容忍2个故障
-
**MGR (Manager)**:部署2个,一主一备,提供Dashboard和监控
-
**OSD (对象存储守护进程)**:每台至少1块数据盘,3副本策略
-
**MDS (元数据服务器)**:部署2个,Active/Standby模式,服务CephFS
-
**RGW (RADOS网关)**:部署1个,提供S3对象存储接口
硬件与系统要求
**最低配置(每台服务器):**
-
CPU:4核以上
-
内存:16GB以上(建议32GB,每OSD约需4GB)
-
系统盘:100GB SSD
-
数据盘:至少1块空闲磁盘(建议企业级HDD或SSD)
-
网络:千兆网卡(建议万兆)
**操作系统:** openEuler 24.03 LTS-SP2
开始部署
系统初始化
修改主机名
bash
##### 步骤1:修改主机名
# Node1执行
hostnamectl set-hostname ceph-node1
# Node2执行
hostnamectl set-hostname ceph-node2
# Node3执行
hostnamectl set-hostname ceph-node3
# Node4执行
hostnamectl set-hostname ceph-node4
# Node5执行
hostnamectl set-hostname ceph-node5
配置hosts解析
bash
##### 步骤2:配置hosts解析(所有节点执行)
# 备份原文件
cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d)
# 追加解析记录(所有节点都要执行相同的配置)
cat >> /etc/hosts << 'EOF'
192.168.113.66 ceph-node1
192.168.113.77 ceph-node2
192.168.113.88 ceph-node3
192.168.113.99 ceph-node4
192.168.113.100 ceph-node5
EOF
# 验证
ping -c 2 ceph-node2
ping -c 2 ceph-node5
关闭防火墙
bash
##### 步骤3:关闭防火墙和SELinux(所有节点执行)
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 停止并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 清空iptables规则(可选,如果firewalld已关闭可跳过)
iptables -F
iptables -t nat -F
# 验证
getenforce # 应显示 Disabled 或 Permissive
systemctl status firewalld # 应显示 inactive
时间同步
bash
##### 步骤4:配置时间同步(所有节点执行)
# openEuler 24.03默认使用chronyd
systemctl enable --now chronyd
# 验证时间同步状态
chronyc sources -v
chronyc tracking
# 如果时间不同步,手动同步
chronyc makestep
配置ssh免密
bash
##### 步骤5:配置SSH免密登录(Node1执行,管理节点)
# 生成SSH密钥对(一路回车,不设置密码)
ssh-keygen -t rsa -b 4096 -N "" -q
# 将公钥分发到所有节点(包括自己)
for ip in 192.168.113.66 192.168.113.77 192.168.113.88 192.168.113.99 192.168.113.100; do
ssh-copy-id -i ~/.ssh/id_rsa.pub root@${ip}
done
# 测试免密登录
ssh root@ceph-node2 "hostname"
ssh root@ceph-node5 "hostname"
安装docker
bash
##### 步骤6:安装基础依赖(所有节点执行)
# 更新系统
yum update -y
#上传docker.repo仓库源
sed -i 's/$releasever/9/g' /etc/yum.repos.d/docker-ce.repo
# 安装Docker CE(Cephadm使用容器运行Ceph服务)
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
以下是这四个包的具体作用:
docker-ce (核心守护进程 / 服务端)
这是 Docker Community Edition 的核心引擎程序(即后台运行的 dockerd 进程)。它驻留在你的 openEuler 服务器后台,负责处理所有容器相关的繁重工作:管理镜像生命周期、构建容器、分配网络以及管理存储卷。
docker-ce-cli (命令行客户端)
这是你日常敲击的 docker 命令本身。它是一个纯客户端工具,负责接收你的指令,并将其翻译成 REST API 请求发送给后台的 dockerd。
运维优势:把它独立出来后,你可以在一台没有运行容器服务的"跳板机"上,只安装 docker-ce-cli,通过配置环境变量去远程管理其他服务器上的 Docker 引擎。
containerd.io (底层容器运行时)
这是真正负责在操作系统层面"跑"容器的核心组件。早期它是 Docker 的一部分,后来被捐赠给了 CNCF(云原生计算基金会),成为了行业标准的独立容器运行时。
当你通过 Docker 启动一个容器时,dockerd 实际上并不直接创建容器,而是将任务下发给 containerd,由它去拉取镜像文件、设置底层的 namespace 和 cgroup,最后调用底层的 runc 把容器进程拉起来。
docker-compose-plugin (Compose 编排插件)
这是用来解析 docker-compose.yml 文件、批量管理和编排多容器应用的工具。
在旧版本中,Docker Compose 是一个基于 Python 的独立工具(使用 docker-compose 命令)。新版将其用 Go 语言重写,并深度集成为了 Docker CLI 的一个原生插件。安装它之后,你的命令习惯将从 docker-compose up 变为 docker compose up(中间去掉了连字符)。
#重新加载dnf仓库
dnf makecache
# 启动Docker
systemctl enable --now docker
# 验证Docker
docker --version
#配置docker镜像加速
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.timeweb.cloud"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
#重新启动Docker
systemctl restart docker
安装ceph镜像
bash
## 🔧 方案一:用 `cephadm`(官方推荐,现代化部署)
**Ceph 从 Octopus(v15)开始,官方推荐就是用 cephadm 走容器化部署**,底层也是 Docker/Podman。
### 1️⃣ 安装 Docker
```bash
# openEuler 24.03 安装 Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io
# 或者用自带的 podman(openEuler 默认有,cephadm 同样支持)
sudo dnf install -y podman
# 启动 Docker
sudo systemctl enable --now docker
```
### 2️⃣ 安装 cephadm
```bash
# 方式一:直接 curl 安装最新版
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/main/src/cephadm/cephadm
chmod +x cephadm
sudo ./cephadm add-repo --release reef # 或 squid(最新版)
sudo ./cephadm install
# 方式二:直接用容器跑 cephadm
alias cephadm='docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
quay.io/ceph/ceph:v18 cephadm'
```
### 3️⃣ 部署单节点测试集群
```bash
# 一键部署(单节点)
sudo cephadm bootstrap --single-host
# 或者指定镜像版本
sudo cephadm bootstrap --image quay.io/ceph/ceph:v18 --single-host
```
> `bootstrap` 会自动拉镜像、起 Monitor + Manager,并生成 `/etc/ceph/ceph.conf` 和 keyring。
### 4️⃣ 添加 OSD(存储盘)
```bash
# 查看可用磁盘
sudo cephadm shell -- ceph orch device ls
# 添加所有可用磁盘作为 OSD
sudo cephadm shell -- ceph orch apply osd --all-available-devices
```
### 5️⃣ 验证
```bash
# 集群状态
sudo cephadm shell -- ceph -s
# 或者进入容器交互
sudo cephadm shell
ceph -s
ceph osd stat
```
---
## 🐳 方案二:纯 Docker 手动拉镜像
如果你只是想**手动拉 Ceph 镜像自己编排**:
```bash
# 拉取官方 Ceph 镜像
docker pull quay.io/ceph/ceph:v18 # Reef (v18) 稳定版
docker pull quay.io/ceph/ceph:latest # 最新版
# 查看已拉取的镜像
docker images | grep ceph
# 运行一个 Ceph 容器看看
docker run --rm -it quay.io/ceph/ceph:v18 ceph --version
```
### 常用 Ceph 版本对应
| 版本代号 | Ceph 版本 | 镜像 Tag |
|---------|----------|---------|
| Squid | v19 (最新) | `quay.io/ceph/ceph:v19` |
| Reef | v18 (稳定) | `quay.io/ceph/ceph:v18` |
| Quincy | v17 | `quay.io/ceph/ceph:v17` |
| Pacific | v16 | `quay.io/ceph/ceph:v16` |
---
## ⚠️ 踩坑注意(openEuler 24.03 特供)
1. **SELinux** --- openEuler 默认开了 SELinux,关掉或设为 permissive:
```bash
sudo setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
```
2. **防火墙** --- 要开放 Ceph 端口:
```bash
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent # Monitor
sudo firewall-cmd --zone=public --add-port=3300/tcp --permanent # MGR
sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent # OSD
sudo firewall-cmd --reload
```
3. **内核参数** --- 生产环境调优推荐:
```bash
cat >> /etc/sysctl.d/95-ceph.conf <<EOF
kernel.pid_max = 4194303
fs.file-max = 26234859
EOF
sysctl -p /etc/sysctl.d/95-ceph.conf
```
4. **时间同步** --- Ceph 对时钟敏感:
```bash
sudo dnf install -y chrony
sudo systemctl enable --now chronyd
```
部署完成

客户端挂载ceph
bash
第一步:获取挂载秘钥
在主节点(ceph-node1)上执行以下命令,获取管理员的 Secret Key:(你会得到一串类似 AQBxxxxx... 的长字符,把它复制下来。)
第二步:在客户端机器上创建挂载点
登录到你准备使用这个文件系统的机器,创建一个空目录:
mkdir -p /mnt/mycephfs
第三步:执行挂载命令
使用 mount -t ceph 命令将远程的 CephFS 挂载到本地。请将下面的 IP 替换为你集群 MON 节点的 IP,秘钥替换为你刚才复制的字符串:
mount -t ceph 192.168.113.66:6789,192.168.113.77:6789:/ /mnt/mycephfs -o name=admin,secret=这里粘贴你第一步获取的秘钥
(注:逗号分隔写多个 MON IP 是为了高可用,如果其中一个 MON 宕机,客户端也能连上。你也可以只写 192.168.113.66:6789:/)
客户端验证
