1461 字
7 分钟
部署Ceph集群
1. 前置配置
使用PVE创建Debian13虚拟机(创建了一个模板克隆出来了三台虚拟机分别为Ceph-1、Ceph-2、Ceph-3)
| VMID | Hostname | IP | Hardware | Disk |
|---|---|---|---|---|
| 101 | ceph-1 | 192.168.31.225 | 4C8G | 32G ( System) + 310G( OSD ) |
| 102 | ceph-2 | 192.168.31.226 | 4C8G | 32G ( System) + 310G( OSD ) |
| 103 | ceph-3 | 192.168.31.227 | 4C8G | 32G ( System) + 310G( OSD ) |
我这里将一块1T的HDD (TOSHIBA MG03ACA100) 分成三个310G直通给虚拟机作为Ceph的OSD
#列举磁盘lsblk -o NAME,SIZE,TYPE,MODELsda 931.5G disk 硬盘型号 #sdx 中的x代表每个大体都不一样,比如我这里是a,但是一般的sda都是系统盘但是我这是系统盘是sdb,硬盘型号为对应具体的硬盘的硬盘型号
# 安装partedapt install parted
# 清空磁盘并建立GPT分区wipefs -a /dev/sdaparted /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/sdaNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 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-idls -l /dev/disk/by-id/ | grep sdalrwxrwxrwx 1 root root 9 Feb 10 13:04 (by-id) -> ../../sdalrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part1 -> ../../sda1lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part2 -> ../../sda2lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part3 -> ../../sda3lrwxrwxrwx 1 root root 10 Feb 10 18:27 (by-id)-part4 -> ../../sda4
#将分区直通给虚拟机qm set 101 -scsi1 /dev/disk/by-id/(by-id)-part1qm set 102 -scsi1 /dev/disk/by-id/(by-id)-part2qm set 103 -scsi1 /dev/disk/by-id/(by-id)-part32. 配置Host并安装cephadm和其他依赖
#设置 hostname#Ceph-1hostnamectl set-hostname ceph-1#Ceph-2hostnamectl set-hostname ceph-2#Ceph-3hostnamectl set-hostname ceph-3
#修改Hosts文件nano /etc/hosts192.168.31.225 ceph-1192.168.31.226 ceph-2192.168.31.227 ceph-3#请同时修改127.0.1.1的host
#时间同步apt update && apt install chronysystemctl enable --now chrony
#安装cephadm和llvmapt update && apt install cephadm #在管理节点执行,我这里管理节点是ceph-1,也可以同时安装ceph-common#在其他节点执行apt install -y podman lvm2 #podman可以换成docker3. 引导集群 (Bootstrap)
#在管理节点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公钥
#可以将管理节点上的 /etc/ceph/ceph.pub 追加到其他节点的 /root/.ssh/authorized_keys 中#也可以使用 ssh-copy-idssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-2ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-35. 将节点添加到集群
#进入 Ceph Shellcephadm shell
#添加主机ceph orch host add ceph-2 192.168.31.226ceph orch host add ceph-3 192.168.31.227
#验证主机列表ceph orch host lsHOST ADDR LABELS STATUSceph-1 192.168.31.225 _adminceph-2 192.168.31.226ceph-3 192.168.31.227
#退出Ceph Shellexit6. 添加存储 (OSD)
#进入 Ceph Shellcephadm shell
#方式A:一键添加所有可用磁盘,这会将所有节点上空的、未分区的磁盘都做成 OSDceph orch apply osd --all-available-devices#方式B:指定特定磁盘,精确控制,例如只使用 ceph-1 的 /dev/sdb 请按照实际情况调整ceph orch daemon add osd ceph-1:/dev/sdbceph orch daemon add osd ceph-2:/dev/sdbceph orch daemon add osd ceph-3:/dev/sdb
#查看 OSD 状态ceph osd treeID 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.000007. 部署服务 (MDS, RGW 等)
#部署 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)通常分为两个步骤:创建池 和 指定应用类型。
-
创建一个通用存储池 (最常用) 这是最基础的创建方式,适用于大多数情况(如 RBD 块存储)。
-
创建池 默认情况下,Ceph 使用3副本模式。
Terminal window # 语法: ceph osd pool create <池名字>ceph osd pool create mypool -
初始化应用类型 如果不执行这一步,集群会显示
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
-
-
为 CephFS 创建存储池
部署 CephFS(文件系统),必须至少创建两个池:一个用于存储数据,一个用于存储元数据。
Terminal window # 1. 创建数据池ceph osd pool create cephfs_dataceph osd pool application enable cephfs_data cephfs# 2. 创建元数据池ceph osd pool create cephfs_metadataceph 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 -
修改副本数 (适用于小规模集群)
默认的 Ceph 池配置是 Size=3 (存3份数据) 且 Min_size=2 (最少2份数据才允许写)。
如果你只有 1 台或 2 台 OSD 节点,默认配置会导致集群无法达到
HEALTH_OK甚至无法写入。需要修改副本数:Terminal window # 只有 1 个节点/OSD 的测试环境:ceph osd pool set mypool size 1ceph osd pool set mypool min_size 1# 只有 2 个节点/OSD 的环境:ceph osd pool set mypool size 2ceph osd pool set mypool min_size 1
9. 常用管理命令
#查看所有池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-itceph 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.bakcp /etc/ceph/ceph.pub /etc/ceph/ceph.pub.bak#例如从18升级到19SSceph orch upgrade start --image quay.io/ceph/ceph:v19ceph osd require-osd-release squid #启用新特新,启用后无法回滚降级