Linux 和 Amazon EC2 上的 ZFS

Naf*_*Kay 6 zfs amazon-ec2

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

我对我正在从事的项目有一些要求:

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

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

Joh*_*han 7

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. 将磁盘分配给 VM。(在 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),您应该会看到挂载的文件系统现在有更多空间。

QED。

  • 首先,您可以像在生产环境中一样轻松地在救援环境中安装 ZFS。其次,Debian、Ubuntu、Fedora、Arch、Gentoo、Funtoo、Sabayon、CentOS 和 RHEL 都支持在 Linux 上安装 ZFS,也支持在救援环境中安装包。此外,我会谨慎地提倡 LVM。它不仅提供了堆叠块设备设置,而且管理起来也很重要。然而,调整文件系统的大小肯定比平面分区容易。http://serverfault.com/questions/279571/lvm-dangers-and-caveats 是一本很好的读物。 (3认同)

Aar*_*nce 5

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

# zpool set autoexpand=on pool
# zpool set expandsize=on pool
Run Code Online (Sandbox Code Playgroud)

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

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

有几个警告:

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