外观
Ceph 超融合入门与部署
Ceph 是 PVE 内置的分布式存储方案:把每个节点上的本地盘组织成一个跨节点的存储池,虚拟机磁盘天然获得多副本冗余,还能随虚拟机一起在节点间在线迁移而不用搬数据。它的代价是复杂度和硬件要求都比本地存储高一截,只有三节点以上的集群才值得考虑。
创建 OSD 会清空目标磁盘,且移除 OSD 处理不当会导致数据丢失
本文的 OSD 创建步骤会清空整块目标磁盘;OSD 数量不足、故障域规划不合理时,短时间内坏两块盘也可能导致数据丢失或不可用。开始前:
开始之前:这几个前提不满足就先别上 Ceph
- 至少三个节点,官方建议使用相同或相近配置的服务器。单机或两节点没有意义。
- 网络:官方建议至少 10 Gbps 且专供 Ceph 流量使用的网络;追求高性能的部署会拆成三张物理网络(集群内部流量 25 Gbps 以上、面向客户端的公共流量 10 Gbps 以上、corosync 单独 1 Gbps)。没有万兆交换机时,三到五节点可以考虑全网状 (full-mesh) 连接。
- 内存:ZFS 和 Ceph 都吃内存,经验值是每 TB 已用存储预留约 1 GB 内存,这是在虚拟机/容器内存需求之外的额外开销。
- 磁盘和控制器:Ceph(和 ZFS 一样)不兼容硬件 RAID 控制器,OSD 磁盘要以直通(HBA/IT 模式)方式呈现给系统。建议每节点至少若干块独立盘,官方给出的参考规模是「至少三节点、至少 12 个 OSD,且均匀分布在各节点上」。
- 已经组好 PVE 集群。
Ceph 不是「更强的 ZFS」
ZFS 解决的是单机多盘冗余,Ceph 解决的是跨节点共享存储和横向扩展。单机装 Ceph 只有复杂度、没有收益;继续用 ZFS 即可,见该选哪种存储。
部署步骤
第一步:安装 Ceph 软件包
Web UI:在任意一个集群节点打开 Ceph 菜单。如果这个节点还没装 Ceph,界面会引导你走安装向导——选择要安装的 Ceph 版本(PVE 9.2 默认是 Tentacle,也可以选 Squid 作为备选),向导会从 PVE 的 Ceph 仓库拉取软件包。
其他节点重复同样的向导,或者用命令行在每个节点上执行:
sh
# 宿主机 shell 执行,每个参与 Ceph 的节点都要装
pveceph install集群内所有节点必须用同一个 Ceph 大版本
混用不同大版本的 Ceph 节点在升级过渡期之外不受支持,会导致集群行为不可预期。规划部署顺序时统一版本。
第二步:初始化集群网络
只在第一个节点上执行一次:
sh
pveceph init --network <ceph-public-network-cidr>这会写入 /etc/pve/ceph.conf(并在本地建一个指向它的软链接 /etc/ceph/ceph.conf)。Web UI 的初始化向导里对应的字段:
| 字段 | 说明 |
|---|---|
| Public Network | 必填,Ceph 客户端流量和服务之间通信走这个网段 |
| Cluster Network | 可选,OSD 之间的数据复制和心跳流量,建议用独立物理网络;不填就和 Public Network 共用 |
| Number of replicas / Minimum replicas | 高级选项,决定后续新建池的默认副本数 |
第三步:创建监视器 (Monitor)
Web UI:Ceph → Monitor → 选节点 → Create。命令行:
sh
pveceph mon create至少需要 3 个监视器才能保证仲裁 (quorum) 和高可用;小规模集群通常每个节点一个即可,节点数很多时不需要每台都装。
第四步:创建管理器 (Manager)
sh
pveceph mgr create建议和监视器放在同样的节点上,并且部署多个做高可用——同一时间只有一个处于 active 状态,其余作为备用。
第五步:创建 OSD(把磁盘交给 Ceph)
这一步会清空目标磁盘上的全部数据
执行前用 lsblk -o NAME,SIZE,MODEL,SERIAL 核对目标盘的序列号,确认它不是系统盘、不是还有用的数据盘。
Web UI:节点 → Ceph → OSD → Create: OSD,选目标磁盘。命令行:
sh
# 宿主机 shell 执行,<osd-disk> 换成已确认好的目标盘
pveceph osd create /dev/disk/by-id/<osd-disk>想让某类盘专门做加速用途(比如用一块 NVMe 给多个机械盘做 DB/WAL 设备):
sh
pveceph osd create /dev/disk/by-id/<osd-disk> -db_dev /dev/disk/by-id/<db-disk> -wal_dev /dev/disk/by-id/<wal-disk>不单独指定大小时,DB 默认占 OSD 大小的 10%,WAL 占 1%。
复用之前用过的盘
如果目标盘上还残留旧的 Ceph 或 LVM 签名,先彻底清除(同样是破坏性操作,确认序列号之后再执行):
sh
ceph-volume lvm zap /dev/disk/by-id/<osd-disk> --destroy在所有参与节点上重复这一步,凑够规划的 OSD 数量。
第六步:创建第一个存储池并接入 PVE 存储
Web UI:Ceph → Pools → Create。命令行:
sh
pveceph pool create <pool-name> --add_storages不指定参数时默认: 128 个 PG、3 副本(size)、最少 2 副本可写(min_size)。--add_storages 会把这个池自动注册为一个 PVE 存储(RBD 类型),之后就能在创建虚拟机时选它作为磁盘存储了。
不要把 min_size 设成 1
min_size=1 意味着只要还有一份副本活着就允许写入,一旦这唯一的副本再出问题,数据无法恢复。官方文档明确建议不要这样设置。
PG(归置组)数量建议开启 PG 自动缩放器 (autoscaler) 交给 Ceph 自己调整,而不是手工精算:
sh
ceph mgr module enable pg_autoscaler网络与防火墙
如果启用了 PVE 防火墙,需要放行 Ceph 相关端口,最简单的方式是用防火墙的 Ceph 安全组/宏(macro),而不是逐条端口手写规则,参考PVE 防火墙。
检查结果
sh
# 整体健康状态,应显示 HEALTH_OK
ceph -s
# 各 OSD 分布和容量占用
ceph osd df tree
# 存储是否已在 PVE 侧注册
pvesm status做一次真实验证:建一台测试虚拟机,磁盘选新建的 Ceph 存储,正常开机、写入数据;然后把它在线迁移到另一个节点,能无缝完成说明共享存储链路是通的。
常见问题
ceph -s 显示 HEALTH_WARN,是不是出问题了。 不一定紧急,常见原因包括时钟不同步、PG 数量不是自动缩放器建议的最优值、某个可选组件(比如 MDS)还没配置。用 ceph health detail 看具体原因,对照官方文档逐条排查。
只有两个节点,能不能先凑合用 Ceph。 不建议。监视器需要奇数个且至少 3 个才能形成稳定仲裁,两节点场景下 Ceph 本身的高可用假设不成立,继续用 ZFS 存储复制或者先加节点再考虑 Ceph。
OSD 创建完但一直显示 down 或 out。 检查该节点到其他节点的 Ceph 网络是否连通(ceph-mon/ceph-osd 需要用到 Public/Cluster Network),以及磁盘本身是否有硬件问题,参考磁盘健康。