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-ansible、ceph-deploy、DeepSea、手动部署。
本笔记采用 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~ceph6 和 client。
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/3 和 mgr 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.conf 和 ceph.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 -s 或 ceph 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 认证授权。