Linux 和 Amazon EC2 上的 ZFS

Linux 和 Amazon EC2 上的 ZFS

我遇到过这样的情况:我需要在 Amazon EC2 中运行的 Linux 计算机上动态扩展存储空间,于是我想到了 ZFS。如果我没记错的话,ZFS 支持一种动态扩展非冗余类 JBOD 阵列的方法。

我对正在进行的项目有一些要求:

  1. 如果需要的话,我应该能够将阵列移动到另一个 EC2 实例。
  2. 我应该能够动态扩展 ZFS 阵列,向 ZFS 卷添加新的“驱动器”,而无需任何停机。

这可能吗?如果 ZFS 提供动态扩展阵列的功能,我应该能够运行一个脚本来动态创建新的 EBS 卷,将它们附加到 EC2 实例,并让 ZFS 将它们添加到其池中,所有这些都是动态的,无需停机。

答案1

Linux 上的 ZFS 并没有拥有足够的追随者,无论追随者有多少。 ZFS 将有效地将您锁定。底层格式与救援磁盘不兼容,并且您会发现 ZFS 的发行版很少见。

由于我对 ZFS 的偏见,我倾向于忽略这些限制。您可能需要搜索提供基于 SmartOS/ZFS 的云托管的服务提供商。

Linux 文件系统 ext3/ext4 以及可能的其他各种文件系统确实允许动态增长。 Linux 中内置的卷管理器 LVM 还允许您将卷动态扩展到新磁盘上。对于除了实验之外的任何事情,这都必须是当前最好的 Linux 推荐,尽管一旦 ZFS 在 Linux 上获得了足够多的追随者,这种情况就会改变。

Linux + LVM + ext3 的流程是:

示例:LVM 卷组 myvg,挂载的卷名称为 uservol1,Linux 中的磁盘设备为 /dev/sdf

  1. 将磁盘分配给虚拟机。 (在 Amazon 管理控制台中,创建 EBS 卷,记下其 ID,并将其分配给实例)
  2. EC2 实例应该有一些用于创建设备节点的 udev 规则。因此,您应该在 /dev/sd* 中看到一个新磁盘...登录实例并检查 EBS 卷是否可见,例如 fdisk -l /dev/sdf、cat /proc/partitions、运行 blkid。
  3. 如果需要创建分区表:fdisk / sfdisk
  4. 初始化以供 LVM 使用:pvcreate /dev/sdf
  5. 将磁盘(物理卷)添加到LVM卷组中vgextend myvg /dev/sdf
  6. 增加卷大小:lvextend -L +1024G /dev/myvg/uservol1
  7. 扩展 ext3/ext4 文件系统:resize2fs /dev/myvg/uservol1
  8. 检查 ( df -h),您应该看到已安装的文件系统现在有更多空间。

量子电子器件。

答案2

是的,您绝对可以使用 ZFS 自动扩展阵列。您只需要设置以下属性:

# zpool set autoexpand=on pool
# zpool set expandsize=on pool

这些属性将为您带来两个好处。

  1. 当您将任何 VDEV 添加到池中时,它将自动扩展
  2. 当您将 1TB 驱动器替换为 2TB 驱动器时,更换所有驱动器后,池将自动调整大小以适应新的驱动器大小。

有一些注意事项:

  1. 您无法删除驱动器,也无法从池中删除 VDEV。因此,虽然您可以扩大池子,但不能缩小池子。但是,您只能将驱动器与镜像分离。
  2. 所有驱动器应具有相同的规格:相同的尺寸、相同的速度等。相同的品牌和型号不是必需的。
  3. 所有 VDEV 应该是相同的 VDEV。如果您的池中有一个 RAIDZ,则所有 VDEV 都应该是 RAIDZ。
  4. 所有 VDEV 的大小应相同。如果一个VDEV是2TB。所有 VDEV 应为 2TB。

相关内容