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 认证授权。

相关推荐
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理