openEuler24.03搭建Ceph高可用

效果图展示:

高可用架构:

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:/)

客户端验证

相关推荐
潮起鲸落入海6 小时前
ceph简介及部署安装
ceph
刘某的Cloud3 天前
ceph-s & ceph_osd_tree_ceph缩容恢复_集群状态.md
linux·运维·服务器·ceph
自由且自律4 天前
cenph三大存储方式
运维·经验分享·ceph
米高梅狮子6 天前
Ceph 分布式存储 部署
linux·运维·数据库·分布式·ceph·docker·华为云
一个行走的民7 天前
CephFS 文件写流程深度解析:从 write() 系统调用到 BlueStore 落盘
ceph
yyyyy_abc8 天前
ceph学习笔记
笔记·ceph·学习
自由且自律9 天前
ceph实战,基于docker部署
运维·ceph·docker·容器·云计算
老wang你好11 天前
Ceph存储全攻略:RBD、CephFS与RGW详解
ceph
珂玥c14 天前
Ceph集群新增osd
ceph