RAID

RouterOS 中的 RAID 技术可将数据存储在多块磁盘上,提升性能与保护能力,支持 RAID 0、1、4、5、6、线性以及嵌套配置,并包含配置示例。

RAID

信息

此功能需要 Storage 软件包。 RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)技术允许将数据存储在多块磁盘上,通过把多块磁盘组合为逻辑单元来提升数据传输性能、数据保护能力或两者兼有。

RAID 磁盘发生故障时,更换故障磁盘后会自动开始重建。

RouterOS 支持软件 RAID 级别 0、1、4、5、6、线性以及嵌套 RAID。

配置示例(RAID6)

以下示例说明如何配置 RAID。大多数 RAID 类型的操作步骤相同。

创建 RAID 块设备(本示例为 RAID 6):

add raid-device-count=20 raid-type=6 slot=raid1 type=raid

向该 RAID 添加磁盘:

set nvme1 raid-master=raid1 raid-role=0
set nvme2 raid-master=raid1 raid-role=1
set nvme3 raid-master=raid1 raid-role=2
set nvme4 raid-master=raid1 raid-role=3
set nvme5 raid-master=raid1 raid-role=4
set nvme6 raid-master=raid1 raid-role=5
set nvme7 raid-master=raid1 raid-role=6
set nvme8 raid-master=raid1 raid-role=7
set nvme9 raid-master=raid1 raid-role=8
set nvme10 raid-master=raid1 raid-role=9
set nvme11 raid-master=raid1 raid-role=10
set nvme12 raid-master=raid1 raid-role=11
set nvme13 raid-master=raid1 raid-role=12
set nvme14 raid-master=raid1 raid-role=13
set nvme15 raid-master=raid1 raid-role=14
set nvme16 raid-master=raid1 raid-role=15
set nvme17 raid-master=raid1 raid-role=16
set nvme18 raid-master=raid1 raid-role=17
set nvme19 raid-master=raid1 raid-role=18
set nvme20 raid-master=raid1 raid-role=19

格式化 RAID 块设备:

/disk> format raid1 file-system=ext4 

结果应与以下内容类似:

21 BM        type=raid slot="raid1" slot-default="" parent=none uuid="f457bc79-7408-489b-8850-85923e900452" fs=ext4 model="RAID6 2-parity-disks" 
             size=17 283 541 893 120 free=17 283 538 190 336 raid-type=6 raid-device-count=20 raid-max-component-size=none raid-chunk-size=1M raid-master=none 
             raid-state="clean" nvme-tcp-export=no iscsi-export=no nfs-sharing=no smb-sharing=no media-sharing=no media-interface=none 

警告

避免在多个 RAID 阵列中使用同一块物理磁盘上的多个分区。同一块物理磁盘参与多个 RAID 阵列可能导致性能下降。

示例:RAID 检查

监控 RAID 阵列是否发生故障极其重要。有多种方式可以实现,最简单的方法是创建一个在 RAID 成员故障时发送电子邮件的脚本。可将以下脚本作为可用示例:

/system/scheduler
add interval=30s name=MRaidHealthCheckCall on-event=MraidHealthCheck policy=ftp,read,write,policy,test,sniff start-time=startup
/system/script
add dont-require-permissions=no name=MraidHealthCheck owner=admin policy=ftp,read,write,policy,test,sniff source=":global CheckRAID;\
    \n:local sysadmin; \
    \n\
    \n:set  \$sysadmin \"<servername@domain.tld>\";\
    \n\
    \n:local temp [/disk/print count-only where raid-member-failed];\
    \n:if ( \$temp > 0 ) do={\
    \n   :if ( \$CheckRAID < 1 ) do={\
    \n      /log/info message=\"ERROR: RAID has failed!\";\
    \n      /tool/e-mail/send to= \$sysadmin subject=([/system/identity/get name].\" RAID failed\") body=(\"Go check it! Value: \".\$temp);\
    \n      :set \$CheckRAID 7;\
    \n      :delay 5s;\
    \n    }\
    \n   }       \
    \n   :if ( \$CheckRAID > 0 ) do={\
    \n      :set \$CheckRAID ( \$CheckRAID -1 );\
    \n   }\
    \n"

你还需要配置 RouterOS 设备的电子邮件服务器设置:

/tool/e-mail
set from=<raidcheck@domain.tld> port=587 server=smtp.domain.com tls=starttls

警告

请确保在 /tool/e-mail 中配置电子邮件服务器设置,并将上述脚本中的电子邮件地址替换为与你的邮件服务器设置相匹配的值。

RAID 类型

RAID 0

所有数据均匀写入该 RAID 中的所有磁盘。此配置不提供任何容错能力,但性能最佳。

RAID 0 示意图:数据跨磁盘条带化

RAID 1

相同数据写入所有磁盘(数据镜像)。此配置提供最佳容错能力,但写入速度等于阵列中最慢磁盘的速度。

RAID 1 示意图:磁盘间数据镜像

RAID 4

块级数据跨数据磁盘条带化,校验位存储在专用磁盘上。性能受限于校验写入速度。

RAID 4 示意图:块级条带化与专用校验磁盘

RAID 5

块级数据均匀条带化到可用磁盘上。可承受 1 块磁盘故障。

RAID 5 示意图:块级条带化与分布式校验

RAID 6

块级数据均匀条带化到可用磁盘上。可承受 2 块磁盘故障。

RAID 6 示意图:块级条带化与双分布式校验

RAID 线性

数据依次追加到多块磁盘上,将它们合并为一块大磁盘。不提供冗余,速度受限于单块磁盘的读写速度。

RAID 线性示意图:数据跨磁盘追加

嵌套 RAID

将多种 RAID 配置组合为另一种 RAID。例如 RAID 10(RAID 1+0)结合磁盘镜像(RAID 1)与磁盘条带化(RAID 0)。

嵌套 RAID 示意图:RAID 1+0 结合镜像与条带化

配置示例

本示例使用 10 块 SSD 配置 RAID(RAID 1+0)。

创建 RAID 0 块:

add raid-device-count=5 raid-type=0 slot=raid10 type=raid

创建五个 RAID 1 块,每个包含 2 块设备,并将它们的 master-raid 设置为先前创建的 RAID 0 块(name=raid10):

add raid-device-count=2 raid-master=raid10 raid-role=0 raid-type=1 slot=raid0 type=raid
add raid-device-count=2 raid-master=raid10 raid-role=1 raid-type=1 slot=raid1 type=raid
add raid-device-count=2 raid-master=raid10 raid-role=2 raid-type=1 slot=raid2 type=raid
add raid-device-count=2 raid-master=raid10 raid-role=3 raid-type=1 slot=raid3 type=raid
add raid-device-count=2 raid-master=raid10 raid-role=4 raid-type=1 slot=raid4 type=raid

向每个 RAID 块添加磁盘:

set nvme1 raid-master=raid0 raid-role=0
set nvme3 raid-master=raid1 raid-role=0
set nvme5 raid-master=raid2 raid-role=0
set nvme7 raid-master=raid3 raid-role=0
set nvme9 raid-master=raid4 raid-role=0

set nvme2 raid-master=raid0 raid-role=1
set nvme4 raid-master=raid1 raid-role=1
set nvme6 raid-master=raid2 raid-role=1
set nvme8 raid-master=raid3 raid-role=1
set nvme10 raid-master=raid4 raid-role=1

随后格式化 raid10 块:

format raid10 file-system=ext4 

格式化后应能看到可用空间并使用该块:

23 BM        type=raid slot="raid10" slot-default="" parent=none uuid="ec3344f4-1662-49ab-b899-db1aaa217b0f" fs=ext4 model="RAID0 striped" size=9 601 967 652 864 
             free=9 597 901 369 344 raid-type=0 raid-device-count=5 raid-max-component-size=none raid-master=none raid-state="clean" nvme-tcp-export=no 
             iscsi-export=no nfs-sharing=no smb-sharing=no media-sharing=no media-interface=none 

基于此配置,你可以调整 RAID 10 配置以适配所需的存储设备数量。

按照示例中的相同原则,也可以创建其他嵌套 RAID 配置。