1461 字
7 分钟
部署Ceph集群

1. 前置配置#

使用PVE创建Debian13虚拟机(创建了一个模板克隆出来了三台虚拟机分别为Ceph-1Ceph-2Ceph-3

VMIDHostnameIPHardwareDisk
101ceph-1192.168.31.2254C8G32G ( System) + 310G( OSD )
102ceph-2192.168.31.2264C8G32G ( System) + 310G( OSD )
103ceph-3192.168.31.2274C8G32G ( System) + 310G( OSD )

我这里将一块1T的HDD (TOSHIBA MG03ACA100) 分成三个310G直通给虚拟机作为Ceph的OSD

Terminal window
#列举磁盘
lsblk -o NAME,SIZE,TYPE,MODEL
sda 931.5G disk 硬盘型号 #sdx 中的x代表每个大体都不一样,比如我这里是a,但是一般的sda都是系统盘但是我这是系统盘是sdb,硬盘型号为对应具体的硬盘的硬盘型号
# 安装parted
apt install parted
# 清空磁盘并建立GPT分区
wipefs -a /dev/sda
parted /dev/sda --script mklabel gpt
#划分 3 个 310G 分区
parted /dev/sda --script \
mkpart "ceph-data-1" xfs 1MiB 310GiB \
mkpart "ceph-data-2" xfs 310GiB 620GiB \
mkpart "ceph-data-3" xfs 620GiB 930GiB \
mkpart "reserved" xfs 930GiB 100%
#检查分区情况
lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 310G 0 part
├─sda2 8:2 0 310G 0 part
├─sda3 8:3 0 310G 0 part
└─sda4 8:4 0 1.5G 0 part
#获取by-id
ls -l /dev/disk/by-id/ | grep sda
lrwxrwxrwx 1 root root 9 Feb 10 13:04 (by-id) -> ../../sda
lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part4 -> ../../sda4
#将分区直通给虚拟机
qm set 101 -scsi1 /dev/disk/by-id/(by-id)-part1
qm set 102 -scsi1 /dev/disk/by-id/(by-id)-part2
qm set 103 -scsi1 /dev/disk/by-id/(by-id)-part3

2. 配置Host并安装cephadm和其他依赖#

Terminal window
#设置 hostname
#Ceph-1
hostnamectl set-hostname ceph-1
#Ceph-2
hostnamectl set-hostname ceph-2
#Ceph-3
hostnamectl set-hostname ceph-3
#修改Hosts文件
nano /etc/hosts
192.168.31.225 ceph-1
192.168.31.226 ceph-2
192.168.31.227 ceph-3
#请同时修改127.0.1.1的host
#时间同步
apt update && apt install chrony
systemctl enable --now chrony
#安装cephadm和llvm
apt update && apt install cephadm #在管理节点执行,我这里管理节点是ceph-1,也可以同时安装ceph-common
#在其他节点执行
apt install -y podman lvm2 #podman可以换成docker

3. 引导集群 (Bootstrap)#

Terminal window
#在管理节点
cephadm bootstrap \
--mon-ip 192.168.31.225 \
--initial-dashboard-user admin \
--initial-dashboard-password 'StrongPass123!'
#可以使用--image quay.io/ceph/ceph:v19 指定镜像版本 默认为quay.io/ceph/ceph:v18
#也可不指定 initial-dashboard-user 和 initial-dashboard-password
#如果 hostname -f 和 hostname -s 输出的结果不同可加上 --allow-fqdn-hostname 参数

4. 分发SSH公钥#

Terminal window
#可以将管理节点上的 /etc/ceph/ceph.pub 追加到其他节点的 /root/.ssh/authorized_keys 中
#也可以使用 ssh-copy-id
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-2
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-3

5. 将节点添加到集群#

Terminal window
#进入 Ceph Shell
cephadm shell
#添加主机
ceph orch host add ceph-2 192.168.31.226
ceph orch host add ceph-3 192.168.31.227
#验证主机列表
ceph orch host ls
HOST ADDR LABELS STATUS
ceph-1 192.168.31.225 _admin
ceph-2 192.168.31.226
ceph-3 192.168.31.227
#退出Ceph Shell
exit

6. 添加存储 (OSD)#

Terminal window
#进入 Ceph Shell
cephadm shell
#方式A:一键添加所有可用磁盘,这会将所有节点上空的、未分区的磁盘都做成 OSD
ceph orch apply osd --all-available-devices
#方式B:指定特定磁盘,精确控制,例如只使用 ceph-1 的 /dev/sdb 请按照实际情况调整
ceph orch daemon add osd ceph-1:/dev/sdb
ceph orch daemon add osd ceph-2:/dev/sdb
ceph orch daemon add osd ceph-3:/dev/sdb
#查看 OSD 状态
ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.90807 root default
-3 0.30269 host ceph-1
0 hdd 0.30269 osd.0 up 1.00000 1.00000
-5 0.30269 host ceph-2
1 hdd 0.30269 osd.1 up 1.00000 1.00000
-7 0.30269 host ceph-3
2 hdd 0.30269 osd.2 up 1.00000 1.00000

7. 部署服务 (MDS, RGW 等)#

Terminal window
#部署 CephFS (文件存储)
ceph orch apply mds fs_name --placement="3 ceph-1 ceph-2 ceph-3"
#部署 RGW (对象存储)
ceph orch apply rgw realm_name --placement="3 ceph-1 ceph-2 ceph-3"

8. 创建存储池#

在 Ceph 中创建存储池(Pool)通常分为两个步骤:创建池指定应用类型

  1. 创建一个通用存储池 (最常用) 这是最基础的创建方式,适用于大多数情况(如 RBD 块存储)。

    1. 创建池 默认情况下,Ceph 使用3副本模式。

      Terminal window
      # 语法: ceph osd pool create <池名字>
      ceph osd pool create mypool
    2. 初始化应用类型 如果不执行这一步,集群会显示 HEALTH_WARN,提示 application not enabled on 1 pool(s)

      你需要告诉 Ceph 这个池是用来干什么的:

      • rbd: 虚拟机、块设备
      • cephfs: 文件系统
      • rgw: 对象存储
      Terminal window
      # 语法: ceph osd pool application enable <池名字> <应用类型>
      ceph osd pool application enable mypool rbd
  2. 为 CephFS 创建存储池

    部署 CephFS(文件系统),必须至少创建两个池:一个用于存储数据,一个用于存储元数据。

    Terminal window
    # 1. 创建数据池
    ceph osd pool create cephfs_data
    ceph osd pool application enable cephfs_data cephfs
    # 2. 创建元数据池
    ceph osd pool create cephfs_metadata
    ceph osd pool application enable cephfs_metadata cephfs
    # 3. 创建文件系统 (关联这两个池)
    # 语法: ceph fs new <fs_name> <metadata_pool> <data_pool>
    ceph fs new myfs cephfs_metadata cephfs_data
  3. 修改副本数 (适用于小规模集群)

    默认的 Ceph 池配置是 Size=3 (存3份数据) 且 Min_size=2 (最少2份数据才允许写)。

    如果你只有 1 台或 2 台 OSD 节点,默认配置会导致集群无法达到 HEALTH_OK 甚至无法写入。需要修改副本数:

    Terminal window
    # 只有 1 个节点/OSD 的测试环境:
    ceph osd pool set mypool size 1
    ceph osd pool set mypool min_size 1
    # 只有 2 个节点/OSD 的环境:
    ceph osd pool set mypool size 2
    ceph osd pool set mypool min_size 1

9. 常用管理命令#

Terminal window
#查看所有池
ceph osd pool ls detail
# 或者查看更详细的使用情况:
ceph df
#删除存储池,为了防止误删,Ceph 默认禁止删除池。必须先允许删除,再执行删除操作。
#允许删除 (临时的)
ceph tell mon.* injectargs --mon_allow_pool_delete=true
#删除池 (需要重复确认池名字)
# 语法: ceph osd pool delete <池名> <池名> --yes-i-really-really-mean-it
ceph osd pool delete mypool mypool --yes-i-really-really-mean-it
#验证操作,创建完成后,检查集群状态:
ceph -s
#只要没有 PGs are degraded/undersized 之类的错误,且状态为 HEALTH_OK,说明池创建成功且数据分布正常。
#升级ceph
#可选备份
cp /etc/ceph/ceph.conf /etc/ceph/ceph.conf.bak
cp /etc/ceph/ceph.pub /etc/ceph/ceph.pub.bak
#例如从18升级到19SS
ceph orch upgrade start --image quay.io/ceph/ceph:v19
ceph osd require-osd-release squid #启用新特新,启用后无法回滚降级
部署Ceph集群
https://blog.fiveqm.com/archives/三节点ceph集群
作者
inuyume
发布于
2026-02-10
许可协议
CC BY-NC-SA 4.0