AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 883065
Accepted
AlanObject
AlanObject
Asked: 2017-11-13 07:54:17 +0800 CST2017-11-13 07:54:17 +0800 CST 2017-11-13 07:54:17 +0800 CST

ZFS 热备件与更多奇偶校验

  • 772

我对 ZFS 有点陌生,但我正在创建一个包含 12 个物理驱动器的新存储池。

我目前的计划是跨 10 个驱动器和两个热备件使用 RAIDZ2。

但是我想知道在所有 12 个驱动器上使用 RAIDZ3 并且没有热备件是否会更好。

原因是热备件基本上是通电的空闲驱动器。他们可能需要几个月或几年的时间才能投入使用,那时我可能会发现它们不可行。如果它们是 RAID 条带的一部分,我至少可以得到关于它们是否好用的反馈。

我在网上没有看到太多关于这个的讨论。有人有建议吗?

raid
  • 3 3 个回答
  • 9844 Views

3 个回答

  • Voted
  1. Best Answer
    user121391
    2017-11-14T04:41:09+08:002017-11-14T04:41:09+08:00

    关于热备件

    热备件被设置到一个特定的池,但可以在发生故障时自动附加到池的任何 vdev 。如果您只有一个包含所有磁盘的 vdev,则最好直接合并磁盘(除非您已经有 RAIDZ3 并且仍有磁盘可用)。

    此外,重新同步需要时间并且发生在易受攻击的状态(RAIDZ1、2 路镜像)或性能降低状态(RAIDZ2、RAIDZ3、3 路镜像),如果您已经将设备连接到 vdev,则不会发生这种情况。

    基本上,热备件适用于大型阵列。如果您在 RAIDZ3 中将 27 个磁盘拆分为 9 个磁盘的 3 个 vdev,则可以添加 3 个热备件以减少“现在是凌晨 2 点,3 个磁盘已崩溃,现在我必须起床修复这个烂摊子”的时刻(假设 32驱动器托架系统)。较小的系统通常没有足够的磁盘来达到“2+ vdevs and Z2/Z3”的情况。一个例外是镜像(例如 6 x 2),其中崩溃对池来说更接近于致命(并且您没有足够的磁盘来使它们成为 6 x 3)。


    最佳泳池布局

    Nex7 博客中关于泳池布局的一些建议:

    • 不要将 raidz1 用于 1TB 或更大的磁盘。
    • 对于 raidz1,每个 vdev 中使用的磁盘不要少于 3 个,也不要超过 7 个(同样,它们的大小应该小于 1 TB,最好小于 750 GB)(5 是典型的平均值)。
    • 对于 raidz2,在每个 vdev 中使用的磁盘不要少于 6 个,也不要超过 10 个(典型平均值为 8 个)。
    • 对于 raidz3,每个 vdev 中使用的磁盘不要少于 7 个,也不要超过 15 个(13 和 15 是典型平均值)。
    • 镜子几乎每次都胜过raidz。在驱动器数量相同的情况下,镜像池的 IOPS 潜力远高于任何 raidz 池。唯一的缺点是冗余——raidz2/3 更安全,但速度要慢得多。唯一不以性能换取安全性的方法是三向镜,但它会牺牲大量空间(但我见过客户这样做 - 如果您的环境需要,成本可能是值得的)。
    • 对于 >= 3TB 大小的磁盘,3 路镜像开始变得越来越引人注目。

    这意味着在您的情况下,您将有以下选择:

    1. 9个可用磁盘:(Z3 with 9+3)
    2. 8 个可用磁盘:(Z2 与 4+2)++(Z2 与 4+2)
    3. 5 个可用磁盘:(2 镜像)* 5 ++(热备用)* 2
    4. 4 个可用磁盘:(3 个镜像)* 4

    我会将它们(降序)排列为:

    • 在可用空间方面:1、2、3、4
    • 安全方面:1、2/4、3
    • 速度方面:4、3、2、1
    • 在扩展/添加驱动器的能力方面:3、4、2、1

    无论大小,我都不会使用 RAIDZ1,因为您可能希望稍后用更大的磁盘替换它们,然后问题就会出现(这意味着您不会以这种方式升级,并且可能无法在不添加额外磁盘的情况下增加存储空间)。

    • 16
  2. Cédric Dufour
    2018-05-02T11:05:54+08:002018-05-02T11:05:54+08:00

    我刚刚对测试 ZFS 设置进行了基准测试,以回答与性能有关的问题(在一对尘土飞扬的旧服务器上从灰烬中恢复过来)。

    我的设置是:

    • 2x Intel Xeon L5640 CPU @ 2.27GHz(共:12 核;禁用 HT)

    • 96GiB DDR3 RAM @ 1333MHz

    • Adaptec 5805Z 控制器,将所有磁盘导出为 JBOD(启用写入缓存,这要归功于控制器的电池支持 NVRAM)

    • 12 个 15kRPM 146GB SAS 磁盘(希捷 ST3146356SS)

    • 每磁盘 DRBD 复制(协议 C)通过 IP-over-Infiniband (20Gb/s Mellanox MT25204)

    • Debian/Stretch 上的 ZFS 0.7.6

    • zpool create -o ashift=12 ... /dev/drbd{...} (注意:DRBD 使用 4KiB 的复制“单元”大小)

    • zfs create -o recordsize=128k -o atime=off -o compression=off -o primarycache=metadata ...(最后两个仅用于基准测试)

    在 RAIDz2 和 RAIDz3 的所有可能有趣组合的 bonnie++ 结果下方(12 个同步 bonnie++ 进程的5 次运行的平均值):

    TEST: # data bandwidth
          bonnie++ -p <threads>
          for n in $(seq 1 <threads>); do
            bonnie++ -r 256 -f -s 1024:1024k -n 0 -q -x 1 -y s &
          done
          # create/stat/delete operations
          bonnie++ -p <threads>
          for n in $(seq 1 <threads>); do
            bonnie++ -r 256 -f -s 0 -n 128:0:0:16 -q -x 1 -y s &
          done
    
    CASE: 1*RAIDz2(10d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=278273, RW=150845, RD=487315
     ops/s: SCr=132681, SDl=71022, RCr=133677, RDl=71723
    
    CASE: 1*RAIDz3(9d+3p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=276121, RW=158854, RD=480744
     ops/s: SCr=132864, SDl=71848, RCr=127962, RDl=71616
    
    CASE: 1*RAIDz2(9d+2p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=260164, RW=151531, RD=541470
     ops/s: SCr=137148, SDl=71804, RCr=137616, RDl=71360
    
    CASE: 1*RAIDz3(8d+3p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=269130, RW=184821, RD=672185
     ops/s: SCr=134619, SDl=75716, RCr=127364, RDl=74545
    
    CASE: 1*RAIDz2(8d+2p+2s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=255257, RW=135808, RD=509976
     ops/s: SCr=136218, SDl=74684, RCr=130325, RDl=73915
    
    CASE: 2*RAIDz2(4d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
     MiB/s: WR=379814, RW=225399, RD=586771
     ops/s: SCr=120843, SDl=69416, RCr=122889, RDl=65736
    
    DATA: WR  = Sequential Write
          RW  = Sequential Rewrite
          RD  = Sequential Read
          SCr = Sequential Create
          SDl = Sequential Delete
          RCr = Random Create
          RDl = Random Delete
    

    就表演而言:

    • 2*RAIDz2(4d+2p+0s) 是平衡读写性能的赢家

    • 1*RAIDz3(8d+3p+1s) 以获得最大读取性能(很奇怪)

    至于如何解释/解释这些结果;我的 1 便士:

    • 8 个数据磁盘精确地划分了 128k 记录大小,它可以解释(?)为什么它们总是优于 9 或 10 个数据磁盘(假设测试以 1024k 块大小运行,它在所有磁盘上完全对齐)

    • 我预计 RAIDz3 的性能会比 RAIDz2 差,但是 1*RAIDz3(8d+3p+1s) 的情况非常奇怪地与此相矛盾

    • 2*RAIDz2(4d+2p+0s) 案例的 VDEV 大小明显更小可以解释(?)为什么它的写入性能明显更好

    编辑 1

    作为对@AndrewHenle 评论的回应,以下是具有不同“块”大小的附加基准。不幸的是,bonnie++不允许块大小不是 2 的幂;所以我恢复到dd的( 5 次平均运行): PS:记住,ZFS 读取缓存(ARC)被禁用

    TEST: # WR: Sequential Write
          rm /zfs/.../dd.*
          for n in $(seq 1 <threads>); do
            dd if=/dev/zero of=/zfs/.../dd.${n} bs=<chunk> count=<count> &
          done
          # RD: Sequential Read
          for n in $(seq 1 <threads>); do
            dd of=/dev/null if=/zfs/.../dd.${n} bs=<chunk> count=<count> &
          done
    
    CASE: 1*RAIDz2(10d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024   (n/a)    1024   10240  327680(32768 for RD)
     MiB/s: WR  418.64   (n/a)  434.56  404.44  361.76
            RD  413.24   (n/a)  469.70  266.58   15.44
    
    CASE: 1*RAIDz3(9d+3p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024    1024    1024   10240  327680(32768 for RD)
     MiB/s: WR  428.44  421.78  440.76  421.60  362.48
            RD  425.76  394.48  486.64  264.74   16.50
    
    CASE: 1*RAIDz3(9d+2p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024    1024    1024   10240  327680(32768 for RD)
     MiB/s: WR  422.56  431.82  462.14  437.90  399.94
            RD  420.66  406.38  476.34  259.04   16.48
    
    CASE: 1*RAIDz3(8d+3p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024   (n/a)    1024   10240  327680(32768 for RD)
     MiB/s: WR  470.42   (n/a)  508.96  476.34  426.08
            RD  523.88   (n/a)  586.10  370.58   17.02
    
    CASE: 1*RAIDz2(8d+2p+2s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024   (n/a)    1024   10240  327680(32768 for RD)
     MiB/s: WR  411.42   (n/a)  450.54  425.38  378.38
            RD  399.42   (n/a)  444.24  267.26   16.92
    
    CASE: 2*RAIDz2(4d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
     chunk:      1280k   1152k   1024k    128k      4k
     count:       1024   (n/a)    1024   10240  327680(32768 for RD)
     MiB/s: WR  603.64   (n/a)  643.96  604.02  564.64
            RD  481.40   (n/a)  534.80  349.50   18.52
    

    至于我的 1 便士:

    • ZFS 显然足够智能地优化写入(即使对于低于记录大小的块大小)和/或(?) Adaptec 控制器(非易失性,512MiB)缓存在这方面有很大帮助

    • 显然,禁用 ZFS 读取缓存 (ARC) 对于接近或低于记录大小的块大小非常不利;并且似乎 Adaptec 控制器缓存(令人惊讶?)不用于读取目的。底线:出于基准目的禁用 ARC 可以深入了解“原始、低级”的性能,但不建议用于生产用途(除了特定情况,例如很少使用的大文件库)

    • 调整块大小以匹配 VDEV 大小似乎没有发挥积极作用 [错误假设;见编辑 2]

    编辑 2

    关于 RAIDz 和块大小(ashift)和记录大小(ZFS 文件系统):

    • RAIDz 通过数据/奇偶校验块填充底层设备,其大小由移位大小决定

    • 记录(不是块)是校验和和写时复制操作的“基本单元”

    • 理想情况下,ZFS 文件系统记录大小应该可以被 VDEV 中数据磁盘的数量 (D) 整除(但由于它必须是 2 的幂,这可能很难实现)

    • https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSRAidzHowWritesWork

    • https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSRAidzHowWritesWorkII

    • https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSLogicalVsPhysicalBlockSizes

    和一个警告:

    • 除非经过非常仔细的配置和功能测试,否则热备件可能无法工作

    • https://www.reddit.com/r/zfs/comments/4z19zt/automatic_use_of_hot_spares_does_not_seem_to_work/

    底线 (确认其他回复中已经说过的话)

    • (条带化)较小的 VDEV(数据磁盘较少)比大型 VDEV 性能更好;计算/验证奇偶校验显然是一项代价高昂的操作,它比数据磁盘数量的线性增长更糟糕(参见 8d <-> 2*4d 情况)

    • 具有更多奇偶校验磁盘的相同大小的 VDEV 比更少的奇偶校验磁盘和热备盘性能更好,并提供更好的数据保护

    • 如果您在优先使用奇偶校验磁盘后仍有磁盘可用,则使用热备用解决“不要在半夜叫醒我”的问题[警告!见编辑 2]

    后脚本

    我的最终用例是托管一个(长期)时间序列数据库(稳定的中型写入和可能非常大的零星读取),对此我几乎没有关于 I/O 模式的详细文档(除了“针对SSD”推荐),我个人会选择 1*RAIDz2(8d+3p+1s):最大的安全性,更少的容量,(第二)最好的性能

    • 4
  3. ewwhite
    2017-11-13T08:06:35+08:002017-11-13T08:06:35+08:00

    我的建议是:

    2 x 5 磁盘 RAIDZ1 + 两个备用

    或者

    3 x 3 磁盘 RAIDZ1 + 备件

    或者

    10 磁盘 RAID 镜像

    或 5 个或 6 个磁盘的 2 个 RAIDZ2,带或不带备件

    这取决于使用的磁盘类型。如果 7200 RPM 驱动器超过 2TB,请转到 RAIDZ2。如果 2TB 和用户,RAIDZ1 很好。

    • 3

相关问题

  • Windows 文件服务器性能调优

  • SSD TRIM 的硬件 RAID 控制器支持

  • 了解磁盘队列长度

  • 使用混合磁盘突袭 0?

  • Windows Server 2008 Hyper-V 虚拟化服务器的最佳 RAID 配置?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve