问题背景,公司一台新的服务器上线。配了整列卡,5 块 4T 盘。我用 4 块做了一个 RAID5,1 块热备。
使用 parted 将整个 RAID5 格式化,考虑到后面 RAID 的扩容需求,是不是应该再做个 LVM?没实际尝试过,如果后期 RAID 扩容了,parted 能否将硬盘直接扩容呢?还是说必需做个 LVM?有经验的大佬指教下,我这边虚拟机自己也做个测试
1
liukangxu 2020-12-05 16:28:58 +08:00
看成大于 2PB 了……大于 2T 的 RAID 有什么特殊的地方吗?
|
2
marktask OP |
4
Osk 2020-12-05 16:44:53 +08:00 via Android
|
5
Jirajine 2020-12-05 16:46:02 +08:00 via Android
首先,无论容量大小,只要需要分区表,那么就始终应该使用 gpt 。
然后,你是硬件 raid 卡还是软 raid ? 前者你应该将整个阵列视为一块硬盘,可以套 lvm 扩容。 后者则是多块硬盘通过 lvm/zfs/btrfs 等方式组 raid,扩容方式取决于对应的支持。 |
7
marktask OP @Jirajine #5 硬件扩容。
在虚拟机中测试,RAID 扩容以后,可以使用 parted 对硬盘进行扩容,不影响数据,也不需要再做个 LVM,总体管理还是很方便的。 参见 https://www.taterli.com/5468/ |
8
laminux29 2020-12-05 21:12:21 +08:00 2
企业级存储,一般情况下,至少要做 3 类策略。
第一是防止硬盘单个损坏,一般是通过在物理阵列卡上,做 raid 1 、raid 5 这类。最常见的是你这种 raid 5 + 一块热备盘。做好后,底层的物理磁盘,通过阵列卡后,向 OS 输出的是虚拟磁盘。 第二是防止逻辑数据损坏,比如数据库。最常见的方案是准备一台备份一体机,然后通过在数据库服务器上做 proxy,来进行自动备份。 第三是你提到的扩容问题。 windows 操作非常简单,左手拿着星巴克咖啡,右手在硬盘管理界面,把整个硬盘,直接附加到已有跨区卷里就行了,点点鼠标就能完成。 linux 比 windows 更灵活,不仅支持 windows 这种整个硬盘式的扩容,还支持把硬盘中的一部分拿来扩容。但因为更灵活,也会稍微麻烦些,有 4 个步骤:pv -> vg -> lv -> fs 其中: pv 是指一整块硬盘,或者某块硬盘上的分区。 vg 是指把很多 pv 整合为一个大的存储池。 lv 是指从 vg 这块大存储池上重新进行划分。 fs 是指把一块 lv 进行格式化,比如格式化为 ext4 或 ntfs,格式化完成后就可以直接用了。 创建步骤如下: ->用 parted + /dev/sdX 选择物理阵列卡提供的虚拟硬盘。 ->在 parted 工具里,用 mklabel 命令做成 gpt 格式。 ->在 parted 工具里,用 mkpart 命令进行分区。有些人不分区,直接把整块虚拟硬盘当做一个分区,优点是省事,但是在灾难情况下要进行数据恢复时,会成为大问题,原因是很多数据恢复工具不支持这种方式。 ->在 parted 工具里,用 set 把分区设置为 lvm 分区,并退出 parted 。 ->pvcreate /dev/sdXY 创建 LVM-pv,pvs 校验创建结果。 ->vgcreate vg 名称 /dev/sdXY 来把 LVM-pv 整合为 LVM-vg,vgs 校验整合结果。 ->如果以后硬盘不够用了,加入新的虚拟硬盘,在这个阶段,可以通过 vgextend 已有 vg 名称 /dev/sd 新虚拟硬盘 XY 来把新虚拟硬盘做成的 pv 对已有 vg 进行扩容,vgs 校验整合结果。 ->lvcreate -n lvmName -L 8G vgName,用于从 vgName 存储池中,划分出 8G 空间,来创建一个名叫 lvmName 的 lvm 分区。如果要把全部 vgName 空间都用于 lvmName:lvcreate -n lvmName -l 100%FREE vgName 。然后用 lvs 校验创建结果。 ->lvm 创建好后,就可以对新建的 lvm 进行分区了。比如:mkfs -V -t ext4 -c lvmName ->扩容:vg 扩容后,把 vg 扩容后的所有容量,送给一块 lvm:lvextend -l +100%FREE vgName/lvmName ps:由于 linux 的 lvm 非常灵活,甚至可以不需要 vg,直接在新硬盘上创建 lvm,或者直接把新硬盘直接划给 lvm 都行。 ->扩容后,resize2fs /dev/VG 名字 /LV 名字。如果是在线操作,此操作需要很长时间,建议在 Rescue 模式下进行。 ->ps.整个扩容过程,是非常危险的。建议先备份,而且不建议在线扩容。 |
9
autogen 2020-12-05 21:57:56 +08:00
大于 300G 不要做 RAID5 了,容易重建失败,应该直接 RAID10
|
11
msg7086 2020-12-06 07:24:37 +08:00
有一说一,既然有 5 块盘,为什么把 1 块盘拿来做热备而不是直接做成 5 盘 RAID 6 ?白白浪费一块盘,而且还有潜在的 write hole 问题,RAID 6 多香啊?
|
13
mingl0280 2020-12-07 05:19:14 +08:00
4 块 HDD RAID5,你公司 5 年内丢数据的概率接近 100%...
我都只敢用 4 块 ssd 组 R5,再高必然上 R6.记得配置好高强度备份策略吧! |
14
marktask OP @laminux29 #8 老哥,我是 parted 将硬盘格式化以后直接拿来用了,没再做卷组,应该不用再做卷组了吧?做卷组是为了将新硬盘合并到已有的卷组当中,但是有整列卡情况下,当新的硬盘加入 RAID 中,直接用 parted 将虚拟的硬盘扩容就可以了,应该不需要再做一个卷组了吧?除非新加入的硬盘容量不一致。
|
15
marktask OP @msg7086 #11 write hole 问题我看了下,如果整列卡带缓存功能的话,可以避免 write hole 的产生。另外 RAID6 多了一块校验盘,理论上,会比 RAID 多一步计算步骤,导致性能可能比 RAID5 更低。虽然说 6 可以同时坏 2 块盘,但是在 RAID 出现故障时候,如果说 RAID5 重建需要 24 小时,RAID6 就可能需要 36 小时,重建期间,因为硬盘全盘同步读写,损坏概率相对平常高,所以尽可能减少重建时间。这也是虽然 6 比 5 安全,但是 6 应用得少的原因。主流是 5/10 。
|
16
marktask OP @mingl0280 #13 嗯嗯,谢谢提醒,按照我目前的想法,3 年后得更换新的服务器了,所以没打算用 5 年的。
|
17
msg7086 2020-12-07 11:37:04 +08:00 1
@mingl0280 我司以前有很多客户的机子就是 1U4 盘做 RAID 5,5 年下来丢数据只有一家,而且是放任坏盘在阵列里没管,一直用到第二盘挂了才丢的。
@marktask 6……应用得少? 你这段话里有几个问题。 第一,RAID 6 多一块校验盘,的确多一个计算步骤,但是这个步骤是阵列卡做的,高性能的阵列卡就可以解决这个问题。在一篇 2006 年的 RAID 跑分评测中,LSI 9265-8i 在数据库读写测试中,RAID 5 跑出了 1273 iops,而 RAID 6 跑出了 1051 iops 。可以看到,就算拿 15 年前的阵列卡来跑,也就只有 20%的差距。这 20%的差距最后就弥补在了阵列的高可用性上。 第二,RAID 5 重建需要 24 小时,为什么 RAID 6 需要 36 小时呢。我们知道硬盘的读取速度是固定的,那么不论是 RAID 5 还是 RAID 6,最后读取完整个阵列的时长应该是一样的。那么唯一的区别就是阵列卡的计算速度。如果我们按照上面说的数据,拿一块 15 年前的阵列卡来跑,那么会多用 20%的时间,撑死也就是 29 小时。 第三,重建损坏概率的前提是你还有机会去重建。同样是坏 2 块盘,RAID 6 你还有闲心去算重建要多久,如果是 RAID 5 你可能已经把硬盘放进纸箱里,握着银行卡出去找数据恢复公司了。 第四,也是最重要的一点,RAID 不仅仅保护硬盘损坏,也保护数据错误。RAID 5 是奇偶校验(也就是你说的速度比较快的计算),是无法确定损坏的数据来自哪里的。如果你有 5 块盘,上面有 4 份数据,A B C D,还有 1 份校验 P 。如果 ABCDP 异或校验正确,那就认为数据是正确的。如果校验失败,就说明数据出错了。 那么我们来仔细看看。 如果 A 和 B 的某个字节数据同时翻转了,那么 RAID 5 校验结果是什么呢?没错,RAID 5 会认为数据完全正确。 如果这 5 块盘里只有一块盘数据翻转了,导致校验出错,那么 RAID 5 会怎么办呢?没错,会假定数据翻转的盘一定是 P 而不是 ABCD,并且用新的校验值覆盖 P 里的数据。如果你坏的数据恰好不是 P,那你正确的数据就会被错误的数据永久覆盖了。 而 RAID 6 呢,额外用了里德所罗门校验码,所以不管哪块硬盘数据损坏,都可以正确定位到是谁坏了,然后用剩下的好数据来修复。这里又要说到上面第三点的问题,因为 RAID 6 知道哪块硬盘是好的,所以就算阵列出现更多损坏数据,只要有足够的冗余就可以恢复,而 RAID 5 则是百分百炸数据的,因为 RAID 5 没有足够的冗余了。 所以,如果你有足够的资源去选择做 RAID 5+热备或者 RAID 6,那么 RAID 6 几乎总是更优秀的。 如果你只有 4 盘位,只能塞 4 块盘,那迫不得已做 RAID 5 倒也是可以的。 但是热备是没有什么必要的,与其热备,不如直接成为战斗力。 注:冷备是可以的。冷备是说平时不通电不工作,只在出问题以后才上电。 但是这个话题就更复杂了,而且背后也有很多坑,这里就不多细说了。 |