存储实战:ZFS 与 Ceph
存储实战:ZFS 与 Ceph
Section titled “存储实战:ZFS 与 Ceph”PVE 把所有存储抽象成统一的「存储池」:虚拟机磁盘、ISO、模板、备份都挂在这一模型下。本文先建立整体认识,再分别落地两种最重要的方案:ZFS(单机 / 双机)与 Ceph(三节点及以上集群)。
PVE 存储模型速览
Section titled “PVE 存储模型速览”安装完成后默认有两个存储:
local—— 本地目录(/var/lib/vz),放 ISO、模板、备份;local-lvm—— 本地 LVM 卷组,放虚拟机磁盘。
在 数据中心 → 存储 中可以看到并管理全部存储。常见类型:
| 类型 | 典型用途 | 特点 |
|---|---|---|
| Directory / LVM | 单机起步 | 简单,无冗余 |
| ZFS(单盘/镜像) | 单机、双机 | 软 RAID + 校验 + 快照 + 压缩 |
| Ceph RBD | 集群 | 分布式、虚拟机磁盘可跨节点迁移/HA |
| CephFS / NFS / SMB | 共享 ISO、模板 | 多节点共享目录 |
| PBS | 备份 | 见 PBS 安装实战 |
查看物理磁盘:节点 → 磁盘,或命令行 lsblk。
方案一:ZFS
Section titled “方案一:ZFS”为什么选 ZFS
Section titled “为什么选 ZFS”- 无需 RAID 卡即可做镜像(mirror)冗余,还有端到端校验,能发现静默数据损坏;
- 写时复制快照、透明压缩(lz4),对虚拟机磁盘非常合适;
- 天然集成 PVE:存储类型直接选 ZFS。
创建 ZFS 存储池
Section titled “创建 ZFS 存储池”最省事的两种方式:
方式 A:安装时选择。安装 PVE 的「目标磁盘」步骤选择 ZFS,并设置 RAID 级别(两块盘选 RAID1)。
方式 B:装好后通过界面创建。节点 → ZFS → 创建:
- 名称:
tank; - RAID 级别:
Mirror(两块盘)或RAID10(四块盘); - 勾选 压缩(默认 lz4)与 检查空块。
命令行等价操作:
zpool create -o ashift=12 -o compression=lz4 tank mirror /dev/disk/by-id/scsi-SATA_xxxx /dev/disk/by-id/scsi-SATA_yyyy创建后在 数据中心 → 存储 → 添加 → ZFS 中选择 tank,勾选用途(磁盘镜像、容器),即可给虚拟机使用。
ZFS 日常维护
Section titled “ZFS 日常维护”# 查看池状态与健康zpool status tank
# 手动触发数据校验(建议每月一次,可加入 cron)zpool scrub tank
# 查看实际可用与占用zpool list tankARC 缓存:ZFS 会用空闲内存做读缓存,PVE 默认限制了其上限(约为内存的 10%)。虚拟机负载重、内存充裕时可以调高:
# 例如限制为 16GB(立即生效并写入模块参数)echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxecho "options zfs zfs_arc_max=17179869184" > /etc/modprobe.d/zfs.confupdate-initramfs -u -k all方案二:Ceph
Section titled “方案二:Ceph”什么时候用 Ceph
Section titled “什么时候用 Ceph”Ceph 把三台及以上节点的本地盘组成一个分布式存储集群,虚拟机磁盘不再属于某一台节点——这是 PVE 集群在线迁移和高可用(HA)的基础。
| 场景 | 建议 |
|---|---|
| 单节点 | ZFS 或 LVM,不要 Ceph |
| 两节点 | ZFS + 复制/备份,或 ZFS + QDevice 小集群,不建 Ceph |
| 三节点及以上 | Ceph 最好的用武之地 |
资源要求:每个节点至少一块专用数据盘(系统盘之外)、内存较充裕(每 OSD 进程约占数 GB),并强烈建议为 Ceph 使用独立/更快的网络(至少千兆,推荐万兆)。
部署步骤(PVE 界面向导)
Section titled “部署步骤(PVE 界面向导)”- 安装 Ceph 组件:在每个节点上:节点 → Ceph → 安装 Ceph,源选 no-subscription;
- 创建 OSD:节点 → Ceph → OSD → 创建,选一块空白数据盘(勾选 DB/WAL 可选,给 SSD 小分区加速);
- 三个节点都完成 1~2 步后,Ceph → 状态 应显示
HEALTH_OK; - 创建 Pool:Ceph → Pool → 创建:
- 名称如
rbd-pool; - Size(副本数)= 3,Min Size = 2(默认值适合三节点);
- 名称如
- 接入 PVE 存储:数据中心 → 存储 → 添加 → RBD,填入 pool 名,用途勾选「磁盘镜像」;
- (可选)同样方式创建 CephFS 存放 ISO / 模板,供所有节点共享。
- 可用容量 ≈ 所有 OSD 盘容量之和 ÷ 副本数(3);
- 使用率不要超过 85%,接近满时 Ceph 会拒绝写入;
- 日常看 Ceph → 状态:
HEALTH_OK才是健康;出现HEALTH_WARN时先看具体的告警项(常见是某个 OSD down)。
| 规模 | 存储方案 | 迁移 / HA 能力 |
|---|---|---|
| 1 节点 | ZFS / LVM | 无(靠备份) |
| 2 节点 | ZFS + 定期复制 / 备份 | 手动切换 |
| 3+ 节点 | Ceph | 在线迁移、HA 故障切换 |