实验题目:构建企业级“高性价比”云盘存储——纠删码卷(Dispersed Volume)实战

1. 背景

你是一家初创云存储公司的首席架构师。


2. 实验详细步骤(基于 3 台 Ubuntu 22.04)

第一阶段:物理盘准备(Node1, Node2, Node3 同步执行)

  1. 新增磁盘:VMware 各添加一块 10GB 硬盘。
  2. 格式化与挂载
    sudo mkfs.xfs /dev/sdb
    sudo mkdir -p /data/ec_bricks
    sudo mount /dev/sdb /data/ec_bricks
    echo "/dev/sdb /data/ec_bricks xfs defaults 0 0" | sudo tee -a /etc/fstab
  3. 安装服务
    sudo apt update && sudo apt install glusterfs-server -y
    sudo systemctl enable --now glusterd

第二阶段:建立集群(仅在 Node1 执行)

sudo gluster peer probe 192.168.10.12  # Node2
sudo gluster peer probe 192.168.10.13  # Node3

# 检查朋友圈,确保 3 台都连通
sudo gluster peer status

第三阶段:创建纠删码卷(核心逻辑)

这里我们需要定义两个参数:disperse(总块数)和 redundancy(冗余块数)。

  1. 创建卷
    # disperse 3 表示总共 3 个节点参与
    # redundancy 1 表示允许坏掉 1 台(系统会自动拿 1 台的量做校验)
    sudo gluster volume create cloud-disk disperse 3 redundancy 1 \
    192.168.10.11:/data/ec_bricks/br1 \
    192.168.10.12:/data/ec_bricks/br1 \
    192.168.10.13:/data/ec_bricks/br1 force
  2. 启动卷
    sudo gluster volume start cloud-disk

第四阶段:业务挂载与验证(Client 节点执行)

  1. 挂载
    sudo mount -t glusterfs 192.168.10.11:/cloud-disk /mnt/cloud
  2. 容量奇迹
    df -h /mnt/cloud
    # 结果应为 20GB!
    • 解释:如果是复制卷(Replica 3),这里只有 10GB。纠删码通过数学算法,只浪费了 1/3 的空间就实现了备份。

3. 深度解释:它是怎么“算”出来的?

当你往 /mnt/cloud 存入一个文件 hello.txt 时,GlusterFS 不再是简单地把文件扔进某台机器,而是:

  1. 切片:把文件切成 2 个数据块(Data Blocks)。
  2. 计算:根据这 2 个块,通过数学公式算出 1 个校验块(Parity Block)。
  3. 分发:把这 3 个块分别存到 Node1、Node2、Node3。

为什么坏 1 台没事?
假设 Node3 坏了(校验块丢了),剩下 Node1 和 Node2 的原始数据块可以直接拼出文件。
假设 Node1 坏了(数据块丢了),系统会用 Node2 的数据块和 Node3 的校验块,通过反向数学公式计算出 Node1 丢失的内容。


4. 实验验证方案