Ceph系列第二期:Ceph集群部署实战(cephadm)

Ceph系列第二期:Ceph集群部署实战(cephadm)

本期目标

  • 掌握使用 cephadm 工具部署 Ceph 集群的完整流程
  • 完成虚拟机环境准备(主机名解析、防火墙、时钟同步、软件仓库)
  • 引导一个单节点集群,并逐步扩展为三节点集群
  • 部署 OSD 并验证集群健康状态
  • 访问 Ceph Dashboard 进行可视化管理

前置要求:已理解第一期中的核心概念(RADOS、MON、MGR、OSD、PG、Pool 等)。


1. 部署方式选择

Ceph 官方推荐两种部署方式:

方式 适用版本 特点
cephadm Octopus (15.2.x) 及以后 基于容器(Podman/Docker),支持 CLI 和 Dashboard 管理
Rook Nautilus (14.2.x) 及以后 基于 Kubernetes,通过 K8s 管理 Ceph 组件

其他已废弃或不推荐的方式:ceph-ansibleceph-deployDeepSea、手动部署。

本笔记采用 cephadm


2. 实验环境说明

2.1 硬件资源(每个节点最小生产规格)

组件 CPU 内存 磁盘
OSD 至少 1 核(每 200-500 MB/s 增加 1 核) 2-4 GB(推荐 4G 以上) 一块完整硬盘(或 SSD 分区)
MON 至少 2 核 2-4 GB 60 GB
MDS 至少 2 核 至少 2 GB 1 MB(元数据很小)

实验环境可适当降低配置(如 2 核 CPU,8GB 内存,每节点 3 块 20G 数据盘)。

2.2 本实验使用的节点规划

共使用 7 台虚拟机(CentOS Stream 8 最小化安装):

主机名 IP 地址 角色
client.whisky.cloud 192.168.108.10 客户端节点
ceph1.whisky.cloud 192.168.108.11 主集群节点1(引导节点)
ceph2.whisky.cloud 192.168.108.12 主集群节点2
ceph3.whisky.cloud 192.168.108.13 主集群节点3
ceph4.whisky.cloud 192.168.108.14 备集群节点1(用于后续多站点/RBD Mirror)
ceph5.whisky.cloud 192.168.108.15 备集群节点2
ceph6.whisky.cloud 192.168.108.16 备集群节点3

网络拓扑:所有节点通过 /24 局域网互通。


3. 准备虚拟机模板

为了快速克隆多台节点,先准备一个基础模板 ceph-template

3.1 基础配置(在模板虚拟机中执行)

bash

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

# 2. 关闭 SELinux
sed -ri 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

# 3. 关闭防火墙
systemctl disable firewalld --now

# 4. 配置 Ceph 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

# 5. 安装基础软件包
dnf install -y bash-completion vim lrzsz unzip rsync sshpass tar

# 6. 配置时间同步(chrony)
dnf install -y chrony
systemctl enable chronyd --now

# 7. 安装 cephadm
dnf install -y cephadm

# 验证安装
cephadm --help

# 8. 提前拉取需要的容器镜像(加速后续部署)
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
podman pull quay.io/prometheus/alertmanager:v0.23.0
podman pull quay.io/prometheus/prometheus:v2.33.4

# 9. 创建辅助脚本:快速配置主机名和 IP
cat > /usr/local/bin/sethost << 'EOF'
#!/bin/bash
hostnamectl set-hostname ceph$1.whisky.cloud
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.1$1/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2
init 0
EOF
chmod +x /usr/local/bin/sethost

3.2 调整硬件配置并打快照

  • 内存:8GB
  • 处理器:4 核
  • 添加 3 块 20G SCSI 硬盘(用于 OSD)
  • 关机,打快照 ceph-template-cleaned

4. 克隆集群节点

使用完全克隆方式,从 ceph-template 克隆出 ceph1~ceph6client

4.1 配置各节点的主机名和 IP

bash

复制代码
# 在 ceph1 上执行
sethost 1

# 在 ceph2 上执行
sethost 2

# ... 依此类推至 ceph6

# client 节点特殊配置(不使用 sethost 脚本)
hostnamectl set-hostname client.whisky.cloud
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.10/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2

注意:执行 sethost 后节点会重启,因为脚本最后执行了 init 0。也可以改为重启网络服务,但关机打快照更干净。


5. 集群引导(Bootstrap)

ceph1 上执行引导命令,创建一个单节点集群(包含 1 个 MON 和 1 个 MGR)。

bash

复制代码
cephadm bootstrap --mon-ip 192.168.108.11 \
  --allow-fqdn-hostname \
  --initial-dashboard-user admin \
  --initial-dashboard-password whisky@123 \
  --dashboard-password-noupdate

选项说明

选项 含义
--mon-ip 指定 monitor 的 IP 地址
--allow-fqdn-hostname 允许使用 FQDN(长名称),当主机名包含域名时必须使用
--initial-dashboard-user Dashboard 登录用户名
--initial-dashboard-password Dashboard 登录密码
--dashboard-password-noupdate 禁止首次登录强制修改密码

引导成功的关键输出

text

复制代码
Ceph Dashboard is now available at:

URL: https://ceph1.whisky.cloud:8443/
User: admin
Password: whisky@123

You can access the Ceph CLI as following:
sudo /usr/sbin/cephadm shell --fsid <fsid> -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

引导后会自动生成:

  • 配置文件 /etc/ceph/ceph.conf
  • 管理员密钥环 /etc/ceph/ceph.client.admin.keyring
  • SSH 公钥 /etc/ceph/ceph.pub

6. 访问 Ceph Dashboard

浏览器访问 https://ceph1.whisky.cloud:8443/(自签名证书,接受风险继续)。

使用用户名 admin 和密码 whisky@123 登录。

Dashboard 默认端口 8443 (SSL),由 MGR 模块提供。


7. 扩展集群:添加 ceph2 和 ceph3 节点

7.1 在 ceph1 上安装 ceph-common(便于直接使用 ceph 命令)

bash

复制代码
dnf install -y ceph-common

7.2 获取集群 SSH 公钥并推送到新节点

bash

复制代码
# 获取公钥并保存
ceph cephadm get-pub-key > ~/ceph.pub

# 推送公钥到其他节点(需要输入 root 密码)
ssh-copy-id -f -i ~/ceph.pub root@ceph2.whisky.cloud
ssh-copy-id -f -i ~/ceph.pub root@ceph3.whisky.cloud

7.3 添加主机到集群

bash

复制代码
ceph orch host add ceph2.whisky.cloud
ceph orch host add ceph3.whisky.cloud

# 查看主机列表
ceph orch host ls

输出示例:

text

复制代码
HOST                  ADDR            LABELS   STATUS
ceph1.whisky.cloud    192.168.108.11  _admin
ceph2.whisky.cloud    192.168.108.12
ceph3.whisky.cloud    192.168.108.13

_admin 标签表示该节点拥有 admin 密钥环和配置文件。

7.4 等待服务自动部署

添加主机后,Ceph 会自动在新节点上部署 MON 和 MGR 等服务(按照默认的 count 策略)。查看服务部署情况:

bash

复制代码
ceph orch ls

输出示例:

text

复制代码
NAME            PORTS                     RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager    ?:9093,9094               1/1      8m ago     9m   count:1
crash                                       3/3      8m ago     9m   *
grafana         ?:3000                    1/1      8m ago     9m   count:1
mgr                                         2/2      8m ago     9m   count:2
mon                                         3/5      8m ago     9m   count:5
node-exporter   ?:9100                    3/3      8m ago     9m   *
prometheus      ?:9095                    1/1      8m ago     9m   count:1

7.5 手动管理 MON 和 MGR 的放置(推荐)

默认的 count 策略会尝试部署 5 个 MON(不合理),我们可以改为使用标签 _admin 来精确控制。

bash

复制代码
# 禁用自动扩展
ceph orch apply mon --unmanaged=true
ceph orch apply mgr --unmanaged=true

# 给 ceph2 和 ceph3 添加 _admin 标签
ceph orch host label add ceph2.whisky.cloud _admin
ceph orch host label add ceph3.whisky.cloud _admin

# 现在将 mon 和 mgr 部署到所有带 _admin 标签的节点上
ceph orch apply mon --placement="label:_admin"
ceph orch apply mgr --placement="label:_admin"

# 验证
ceph orch ls | egrep 'mon|mgr'

输出应显示 mon 3/3mgr 3/3,且 PLACEMENT 为 label:_admin


8. 部署 OSD

将每个节点上闲置的磁盘自动添加为 OSD。

bash

复制代码
ceph orch apply osd --all-available-devices

等待几秒钟后查看 OSD 状态:

bash

复制代码
ceph osd tree

输出示例:

text

复制代码
ID  CLASS  WEIGHT   TYPE NAME         STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default
-3         0.05846      host ceph1
 0    hdd  0.01949          osd.0         up   1.00000   1.00000
 3    hdd  0.01949          osd.3         up   1.00000   1.00000
 6    hdd  0.01949          osd.6         up   1.00000   1.00000
-5         0.05846      host ceph2
 2    hdd  0.01949          osd.2         up   1.00000   1.00000
 4    hdd  0.01949          osd.4         up   1.00000   1.00000
 7    hdd  0.01949          osd.7         up   1.00000   1.00000
-7         0.05846      host ceph3
 1    hdd  0.01949          osd.1         up   1.00000   1.00000
 5    hdd  0.01949          osd.5         up   1.00000   1.00000
 8    hdd  0.01949          osd.8         up   1.00000   1.00000

9. 验证集群健康

bash

复制代码
ceph -s

输出示例:

text

复制代码
cluster:
  id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
  health: HEALTH_OK

services:
  mon: 3 daemons, quorum ceph1.whisky.cloud,ceph2,ceph3 (age 6m)
  mgr: ceph1.whisky.cloud.zqmb(active, since 15m), standbys: ceph2.oetbal, ceph3.npaxvt
  osd: 9 osds: 9 up, 9 in

data:
  pools:   1 pools, 1 pgs
  objects: 0 objects, 0 B
  usage:   2.6 GiB used, 177 GiB / 180 GiB avail
  pgs:     1 active+clean

健康状态:

  • HEALTH_OK:一切正常
  • HEALTH_WARN:有告警,需处理
  • HEALTH_ERR:严重错误,立即处理

10. 基础组件管理命令

10.1 查看服务(service)和守护进程(daemon)

bash

复制代码
# 列出所有服务
ceph orch ls

# 列出所有运行中的守护进程
ceph orch ps

# 仅查看特定类型
ceph orch ps --daemon-type osd

10.2 启停、重启、重新部署守护进程

bash

复制代码
# 重启某个守护进程
ceph orch daemon restart <daemon_name>   # 如 mon.ceph1

# 停止(不推荐直接 stop,可能导致服务不可用)
ceph orch daemon stop <daemon_name>

# 重新部署(重新拉取镜像并启动)
ceph orch daemon redeploy <daemon_name>

10.3 删除服务或守护进程

bash

复制代码
# 删除某个守护进程(需先禁用自动扩展)
ceph orch daemon rm <daemon_name> --force

# 删除整个服务(会删除所有相关守护进程)
ceph orch rm <service_name>

11. 重要特殊标签

标签 作用
_admin 自动将 ceph.confceph.client.admin.keyring 分发到该节点
no_schedule 禁止在该节点上部署任何新服务
no_autotune_memory 不对该节点进行内存自动调优

12. 保存快照(重要)

在集群完全正常(HEALTH_OK)且所有节点配置完成后,关闭所有 Ceph 节点(ceph1~ceph6),并打快照。这样后续实验若出现问题,可随时恢复干净环境。

bash

复制代码
# 在各节点执行
poweroff

然后在虚拟化平台(如 VMware、VirtualBox)中对每台虚拟机打快照,命名为 ceph-cluster-clean


13. 本期小结与常用命令速查

13.1 部署相关命令

命令 说明
cephadm bootstrap ... 引导新集群
ceph orch host add <hostname> 添加主机
ceph orch host ls 列出主机
ceph orch apply osd --all-available-devices 自动部署 OSD
ceph orch apply mon --placement="label:_admin" 按标签部署 MON
ceph orch ls 列出服务
ceph orch ps 列出守护进程

13.2 集群状态命令

命令 说明
ceph -sceph status 集群概要状态
ceph osd tree OSD 树形结构
ceph df 存储容量使用情况
ceph health detail 详细健康信息

13.3 关键端口(防火墙需开放)

服务 端口 协议
MON (msgr2) 3300 TCP
MON (msgr1) 6789 TCP
OSD 6800-7300 TCP
MDS 6800-7300 TCP
Dashboard (MGR) 8443 TCP
RGW (默认) 80 TCP
Prometheus 9095 TCP
Grafana 3000 TCP

实验环境中为了简化,通常直接关闭防火墙。


下一期预告 :我们将深入 Ceph 的配置管理,包括集中配置数据库、ceph config 命令的使用、网络配置(Public/Cluster Network)、Monitor 管理、以及 cephx 认证授权。

相关推荐
数智工坊13 小时前
《计算机双目立体视觉》高宏伟:第5章-三维重建
笔记·数码相机
Agent手记13 小时前
跨境电商从选品到售后全流程自动化可能吗?基于实在Agent与LLM+RPA的端到端落地实战指南
运维·人工智能·ai·自动化·rpa
wanhengidc13 小时前
云手机 算力终端应用
运维·服务器·网络·游戏·智能手机
还是瓜瓜好13 小时前
CRC(循环冗余校验)笔记
笔记
问心无愧051313 小时前
ctf show web入门259
android·前端·笔记
郝亚军13 小时前
RK3562 nfs mount
linux·运维·服务器
IT策士13 小时前
docker 实战:将一个多组件应用完整容器化
运维·docker·容器
咸甜适中13 小时前
rust语言学习笔记Trait(十三)Borrow、BorrowMut(借用)
笔记·学习·rust
星轨初途13 小时前
【C++ 进阶】list 核心机制解析及 vector 巅峰对决
开发语言·数据结构·c++·经验分享·笔记·list