使用三个磁盘安装带有 ZFS 和 raid1 的 Proxmox VE 3.4 后,我得到以下池:
root@pve:~# zpool status
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda3 ONLINE 0 0 0
sdb3 ONLINE 0 0 0
sdc3 ONLINE 0 0 0
如果我理解正确,所有数据都将镜像到三个磁盘上。尽管这可以支持 2 个驱动器同时发生故障,但我认为将所有内容写入两个磁盘会对性能造成影响。我认为两个就足够了。
如何将 sdc3 转换为热备用。我希望它在驱动器发生故障时自动进入活动状态并替换损坏的磁盘。
答案1
笔记:在这种情况下使用热备用可能不是最好的主意。请参阅下文以了解背后的原因,以及所提问题的答案。
问题的答案如下:
在减少池冗余之前,我强烈建议进行一次完整的清理运行,以确保所有设备正常运行,并且没有潜在的数据错误:
# zpool scrub rpool
... wait for it to finish, check zpool status for the status of the scrub ...
ZFS 镜像允许添加和删除镜像面(称为附加和分离),因此释放 sdc3 很容易:
# zpool detach rpool sdc3
然后,您可以将其添加为备用。您可能需要先将其标记为清除(否则 ZFS 可能会抱怨它是现有池的一部分):
# zpool labelclear /dev/sdc3
请注意,在 labelclear 之后,ZFS 将不知道如何读取设备,因此这实际上会删除其中的所有数据。因此,当心使用上述命令。
然后看看将其添加为热备盘后会有什么效果,无需进行任何更改:
# zpool add -n rpool spare /dev/sdc3
上述结果应是类似于以下内容的配置:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda3 ONLINE 0 0 0
sdb3 ONLINE 0 0 0
spares
sdc3 AVAIL
请注意,“备件”部分可能不会显示;这里重要的是不要添加另一个 vdev与镜像 0 处于同一级别。 换句话说,下面的例子是错误的:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda3 ONLINE 0 0 0
sdb3 ONLINE 0 0 0
sdc3 ONLINE 0 0 0
一旦您确信该命令能够完成您想要的操作,请删除以-n
使更改生效。特别是,不要传给-f
,zpool add
除非你是绝对肯定它将会做你想做的事。
请注意,以上内容仅涉及将设备实际配置为备用。我不知道如何将其配置为热的Proxmox VE 上的备用和自动替换。
为什么这可能不是最好的主意:
请记住,热备用磁盘一旦需要就需要重新镀银,并且在正常运行期间无法为任何读取请求提供服务,因此通过做这个你实际上减少池的故障恢复能力,以及可能降低读取性能。目前,如果 sd[abc]3 中的任何一个发生故障,您仍然有两个驱动器在运行,从而提供冗余;使用热备用配置,如果 sd[ab]3 中的任何一个发生故障,则需要唯一剩余的驱动器来支持在无错误的情况下将完整重新同步到热备用 sdc3。如果任何在重新同步到热备用以使其保持最新状态的过程中,单个功能驱动器上遇到读取错误,然后丢失数据。
假设 HBA 能够承受负载,N 路镜像将具有写入性能单个驱动器,无论镜像中的设备数量是多少,因为在写入可以视为完成之前必须更新所有设备,并且写入在物理设备上并行执行。在读,根据具体情况,您可以获得从一个驱动器的性能到所有 N 个驱动器的性能。
如果你的工作负载是同步写入繁重的,我认为这最有可能导致写入性能争用,考虑添加一个好的 SSD 用作 SLOG。这应该会提高同步写入的写入性能。如果大多数写入都是异步的(这通常是默认设置,NFS 除外),那么您不会看到太大的差异,但您也不会看到三向镜像的写入性能对性能的影响,因为三向镜像的写入性能只有一个驱动器,直到您用完 ARC RAM,双向镜像不会更快;如果是这种情况,考虑添加更多 RAM供 ZFS 用作 ARC。
答案2
在此设置中,将磁盘用作备用磁盘不是一个好主意:您将损失第三个磁盘的读取速度,而写入速度几乎没有任何提高。要理解的关键点是写入是并发写入的,因此与 2 个磁盘镜像相比,3 个磁盘镜像几乎不会减慢速度。