9 创建软件 RAID 10 设备 #
本章说明如何设置嵌套和复杂 RAID 10 设备。RAID 10 设备包含嵌套 RAID 1(镜像)和 RAID 0(分段)阵列。嵌套 RAID 可以设置为条带化镜像 (RAID 1+0) 或镜像化条带 (RAID 0+1)。复杂 RAID 10 设置支持更高的数据冗余级别,因此镜像与分段兼得,并且拥有更多的数据安全措施。
9.1 使用 mdadm
创建嵌套 RAID 10 设备 #
嵌套的 RAID 设备由使用另一个 RAID 阵列(而不是物理磁盘)作为其基本元素的 RAID 阵列组成。此配置的目标是提高 RAID 的性能和容错能力。YaST 不支持设置嵌套 RAID 级别,但可以通过 mdadm
命令行工具实现。
根据嵌套的顺序,可以设置两个不同的嵌套 RAID。本文使用了下列术语:
RAID 1+0:: 先构建 RAID 1(镜像)阵列,然后组合形成 RAID 0(条带化)阵列。
RAID 0+1:: 先构建 RAID 0(条带化)阵列,然后组合形成 RAID 1(镜像)阵列。
下表描述嵌套为 1+0 和 0+1 的 RAID 10 的优点和缺点。假定您使用的储存对象驻留在不同的磁盘上,每个都有专用的 I/O 功能。
RAID 级别 |
描述 |
性能和容错 |
---|---|---|
10 (1+0) |
使用 RAID 1(镜像)阵列构建的 RAID 0(条带化) |
RAID 1+0 提供高级别的 I/O 性能、数据冗余、和磁盘容错。因为 RAID 0 中的每个成员设备都分别镜像,因此可以容忍多个磁盘故障,并且只要失败的磁盘在不同的镜像中,数据仍然可用。 您可以选择为每个底层的镜像阵列配置一个备用设备,或配置一个备用设备充当服务于所有镜像的备用组。 |
10 (0+1) |
使用 RAID 0(条带化)阵列构建的 RAID 1(镜像) |
RAID 0+1 提供高级别的 I/O 性能和数据冗余,但比 1+0 的容错稍差。如果在镜像的一端多个磁盘失败,则另一个镜像可用。但是,如果在镜像的两端同时丢失磁盘,则所有数据会丢失。 这种解决方案比 1+0 解决方案磁盘容错差,但是如果需要在不同的站点执行维护或维护镜像,则可以使镜像的整个一端脱机,并仍可以有完全正常的储存设备。同时,如果丢失两个站点之间的连接,每个站点会彼此独立地运行。如果条带化镜像分段,则不是这种情况,因为这些镜像在较低级别进行管理。 如果一个设备失败,该端的镜像则会失败,因为 RAID 1 不容错。创建新的 RAID 0 以替换失败的一端,然后重新同步这两个镜像。 |
9.1.1 使用 mdadm 创建嵌套的 RAID 10 (1+0) #
嵌套的 RAID 1+0 的构建方法是,创建两个或更多 RAID 1(镜像),然后使用它们作为 RAID 0 中的组件设备。
如果需要管理到这些设备的多个连接,则在配置这些 RAID 设备之前,必须配置多路径 I/O。有关信息,请参见Chapter 17, 管理设备的多路径 I/O 。
本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。
原始设备 |
RAID 1(镜像) |
RAID 1+0(条带化镜像) | ||
---|---|---|---|---|
|
|
| ||
|
|
打开一个终端控制台。
如果需要,使用 parted 等磁盘分区程序创建四个大小相同的 0xFD Linux RAID 分区。
创建两个软件 RAID 1 设备,为每个 RAID 设备使用两个不同的设备。在命令提示符处,输入以下两个命令:
tux >
sudo
mdadm --create /dev/md0 --run --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 sudo mdadm --create /dev/md1 --run --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1创建嵌套的 RAID 1+0 设备。在命令提示符处,使用您在上一步中创建的软件 RAID 1 设备输入以下命令:
tux >
sudo
mdadm --create /dev/md2 --run --level=0 --chunk=64 \ --raid-devices=2 /dev/md0 /dev/md1默认大块大小为 64 KB。
在 RAID 1+0 设备
/dev/md2
上创建文件系统,例如 XFS 文件系统:tux >
sudo
mkfs.xfs /dev/md2要使用其他文件系统,请修改该命令。
编辑
/etc/mdadm.conf
文件,如果它不存在,则创建该文件(例如通过运行sudo vi /etc/mdadm.conf
)。添加下列行(如果该文件存在,则第一行很可能也已经存在)。DEVICE containers partitions ARRAY /dev/md0 UUID=UUID ARRAY /dev/md1 UUID=UUID ARRAY /dev/md2 UUID=UUID
每个设备的 UUID 可以使用以下命令检索:
tux >
sudo
mdadm -D /dev/DEVICE | grep UUID编辑
/etc/fstab
文件以添加 RAID 1+0 设备/dev/md2
的项。下列示例显示了采用 XFS 文件系统并以/data
做为安装点的 RAID 设备的项。/dev/md2 /data xfs defaults 1 2
装入 RAID 设备:
tux >
sudo
mount /data
9.1.2 使用 mdadm 创建嵌套的 RAID 10 (0+1) #
嵌套的 RAID 0+1 的构建方法是,创建两个到四个 RAID 0(分段)设备,然后将它们镜像为 RAID 1 中的组件设备。
如果需要管理到这些设备的多个连接,则在配置这些 RAID 设备之前,必须配置多路径 I/O。有关信息,请参见Chapter 17, 管理设备的多路径 I/O 。
在此配置中,不能为底层的 RAID 0 设备指定备用设备,因为 RAID 0 不能容忍设备丢失。如果在镜像的一端一个设备失败,则必须创建一个替换 RAID 0 设备,然后将其添加到镜像。
本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。
原始设备 |
RAID 0(条带化) |
RAID 0+1(镜像条带化) | ||
---|---|---|---|---|
|
|
| ||
|
|
打开一个终端控制台。
如果需要,使用 parted 等磁盘分区程序创建四个大小相同的 0xFD Linux RAID 分区。
创建两个软件 RAID 0 设备,为每个 RAID 0 设备使用两个不同的设备。在命令提示符处,输入以下两个命令:
tux >
sudo
mdadm --create /dev/md0 --run --level=0 --chunk=64 \ --raid-devices=2 /dev/sdb1 /dev/sdc1 sudo mdadm --create /dev/md1 --run --level=0 --chunk=64 \ --raid-devices=2 /dev/sdd1 /dev/sde1默认大块大小为 64 KB。
创建嵌套的 RAID 0+1 设备。在命令提示符处,使用您在上一步中创建的软件 RAID 0 设备输入以下命令:
tux >
sudo
mdadm --create /dev/md2 --run --level=1 --raid-devices=2 /dev/md0 /dev/md1在 RAID 1+0 设备
/dev/md2
上创建文件系统,例如 XFS 文件系统:tux >
sudo
mkfs.xfs /dev/md2要使用其他文件系统,请修改该命令。
编辑
/etc/mdadm.conf
文件,如果它不存在,则创建该文件(例如通过运行sudo vi /etc/mdadm.conf
)。添加下列行(如果该文件存在,第一行很可能也已经存在)。DEVICE containers partitions ARRAY /dev/md0 UUID=UUID ARRAY /dev/md1 UUID=UUID ARRAY /dev/md2 UUID=UUID
每个设备的 UUID 可以使用以下命令检索:
tux >
sudo
mdadm -D /dev/DEVICE | grep UUID编辑
/etc/fstab
文件以添加 RAID 1+0 设备/dev/md2
的项。下列示例显示了采用 XFS 文件系统并以/data
做为安装点的 RAID 设备的项。/dev/md2 /data xfs defaults 1 2
装入 RAID 设备:
tux >
sudo
mount /data
9.2 创建复杂 RAID 10 #
YaST(以及带 --level=10
选项的 mdadm
)可创建单一复杂软件 RAID 10,它结合了 RAID 0(分段)与 RAID 1(镜像)的功能。所有数据块的多个副本遵循一个分段准则在多个驱动器上排列。组件设备应大小相同。
复杂 RAID 10 与嵌套 RAID 10 (1+0) 的目的类似,但在以下方面不同:
特性 |
复杂 RAID 10 |
嵌套 RAID 10 (1+0) |
---|---|---|
设备数 |
允许组件设备数为奇数或偶数 |
要求组件设备数为偶数 |
组件设备 |
作为单个 RAID 设备管理 |
作为嵌套 RAID 设备管理 |
分段 |
在组件设备的近布局或远布局中发生分段。 远布局提供根据驱动器数(而不是 RAID 1 对数)缩放的串行读吞吐量。 |
在组件设备之间连续发生分段 |
数据的多个副本 |
两个或更多副本,最多为阵列中的设备数 |
每个镜像段上的副本 |
热备用设备 |
单个备用设备可以服务于所有组件设备 |
为每个底层的镜像阵列配置一个备用设备,或配置一个备用设备充当服务于所有镜像的备用组。 |
9.2.1 复杂 RAID 10 中的设备和复本数 #
配置复杂 RAID 10 阵列时,必须指定需要的每个数据块的复本数。默认复本数是 2,但该值可以是 2 到阵列中设备数之间的任何数字。
必须至少使用指定的复本数的组件设备。但是,RAID 10 阵列中的组件设备数不必是每个数据块的复本数的倍数。有效储存大小是设备数除以复本数。
例如,如果为使用 5 个组件设备创建的阵列指定 2 个复本,则每个块的副本储存在两个不同的设备上。所有数据的一个副本的有效储存大小是 5/2 或 2.5 乘以组件设备的大小。
9.2.2 布局 #
复杂 RAID 10 设置支持 3 种不同的布局,这些布局定义了在磁盘上排列数据块的方式。可用布局有近(默认值)、远和偏移。它们的性能特性各不相同,因此您必须选择适合自己工作负载的布局。
9.2.2.1 近布局 #
使用近布局,数据块的副本会在不同的组件设备上彼此邻近地条带化。即,一个数据块的多个副本在不同设备中的偏移类似。近布局是 RAID 10 的默认布局。例如,如果使用奇数个组件设备以及数据的两个副本,则一些副本可能在设备的一个大块中。
在半数的驱动器上,复杂 RAID 10 的近布局在读写性能上与 RAID 0 类似。
具有偶数个磁盘和两个复本的近布局:
sda1 sdb1 sdc1 sde1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
具有奇数个磁盘和两个复本的近布局:
sda1 sdb1 sdc1 sde1 sdf1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12
9.2.2.2 远布局 #
远布局在所有驱动器的前面部分条带化数据,然后在所有驱动器的后面部分条带化数据的另一份副本,以确保块的所有副本在不同的驱动器上。第二个值集合在组件驱动器的中间开始。
使用远布局,复杂 RAID 10 的读取性能类似于所有驱动器上的 RAID 0,但写入速度比 RAID 0 慢得多,因为前者需要更多地搜寻驱动器头。适用于读密集性操作,例如只读文件服务器。
RAID 10 的写入速度类似于其他镜像 RAID 类型(例如使用近布局的 RAID 1 和 RAID 10),因为该文件系统的电梯式操作会以最佳方式而不是原始写入方式调度写入。使用远布局的 RAID 10 最适合镜像写入应用程序。
具有偶数个磁盘和两个复本的远布局:
sda1 sdb1 sdc1 sde1 0 1 2 3 4 5 6 7 . . . 3 0 1 2 7 4 5 6
具有奇数个磁盘和两个复本的远布局:
sda1 sdb1 sdc1 sde1 sdf1 0 1 2 3 4 5 6 7 8 9 . . . 4 0 1 2 3 9 5 6 7 8
9.2.2.3 偏移布局 #
偏移布局会复制分段,从而使指定大块的多个副本在连续的驱动器上以连续偏移进行布局。事实上,会复制每个分段且副本会按每个设备进行偏移。如果使用适当较大的大块大小且不超过写入的寻道大小,则此方式会赋予远布局类似的读特征。
具有偶数个磁盘和两个复本的偏移布局:
sda1 sdb1 sdc1 sde1 0 1 2 3 3 0 1 2 4 5 6 7 7 4 5 6 8 9 10 11 11 8 9 10
具有奇数个磁盘和两个复本的偏移布局:
sda1 sdb1 sdc1 sde1 sdf1 0 1 2 3 4 4 0 1 2 3 5 6 7 8 9 9 5 6 7 8 10 11 12 13 14 14 10 11 12 13
9.2.2.4 使用 YaST 和 mdadm 指定复本数和布局 #
复本数和布局在 YaST 中或使用 mdadm 的 --layout
参数指定为 。接受的值如下:
nN
对近布局指定
n
,并用复本数替换 N。n2
是默认值,在未设置布局和复本数时使用。fN
对远布局指定
f
,并用复本数替换 N。oN
对偏移布局指定
o
,并用复本数替换 N。
YaST 自动为
参数的所有可能的值提供了选择。9.2.3 使用 YaST 分区程序创建复杂 RAID 10 #
起动 YaST 并打开分区程序。
如果需要,请创建应该与 RAID 配置搭配使用的分区。请勿将它们格式化,并将分区类型设置为 第 10.1 节 “使用专家分区程序”。
。使用现有分区时,不需要更改它们的分区类型 — YaST 会自动更改。有关详细信息,请参见对于 RAID 10,至少需要四个分区。强烈建议您使用储存在不同硬盘上的分区,以降低当其中一个损坏时遗失数据的风险。建议仅使用大小相同的分区,因为每个段仅可将相同的空间量作为最小大小的分区。
在左侧面板中,选择
。右侧面板中即会打开现有 RAID 配置的列表。
在 RAID 页面的左下方,单击
。在
下,选择 。您可以选择性地为 RAID 指派一个
。这样,RAID 的名称将是/dev/md/NAME
。有关详细信息,请参见第 7.2.1 节 “RAID 名称”。在
列表中选择所需的 分区,然后单击 ,将其移到 列表中。(可选)单击
,指定各磁盘在 RAID 阵列中的首选顺序。对于容易受到磁盘添加顺序影响的 RAID 类型(例如 RAID 10),您可以指定以何种顺序使用设备。这将确保一半的阵列在一个磁盘子系统上,另一半阵列在另一个磁盘子系统上。例如,如果一个磁盘子系统出现故障,则系统仍可以通过第二个磁盘子系统继续运行。
依次选择每个磁盘,并单击其中一个
按钮,其中 X 表示要指派给磁盘的字母。可用的类有 A、B、C、D 和 E,但很多情况下需要的类会比较少(例如,仅需要 A 和 B)。以此方式指派所有可用的 RAID 磁盘。可以按 Ctrl 或 Shift 键选择多个设备。也可以右键单击所选设备并从环境菜单中选择合适的类。
选择以下其中一个排序选项指定设备的顺序:
将所有 A 类设备排序在所有 B 类设备之前,并以此类推。例如: ::
AABBCC
。按照先是 A 类的第一个设备,然后是 B 类的第一个设备,以此类推直到排完所有指派了后面类的设备。再然后是 A 类的第二个设备,B 类的第二个设备,以此类推。没有类的所有设备将排在设备列表的末尾。例如: ::
ABCABC
。模式文件:: 选择一个包含多行的现有文件,其中的每一行都是一个正则表达式以及一个类名称 (
"sda.* A"
)。所有与该正则表达式匹配的设备都将被指派给该行指定的类。正则表达式会依次与内核名称 (/dev/sda1
)、udev 路径名称 (/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part1
) 和 udev ID (dev/disk/by-id/ata-ST3500418AS_9VMN8X8L-part1
) 进行比对。如果设备名称与多个正则表达式匹配,则会使用首个匹配项来决定类。在对话框的底部,单击
,以确认顺序。
单击
。在
下,指定 和 ,然后单击 。对于 RAID 10,奇偶校验选项包括 n(近)、f(远)和 o(偏移)。数字表示所需的每个数据块的复本数。默认值为 2。有关信息,请参阅第 9.2.2 节 “布局”。
将文件系统和装入选项添加至 RAID 设备,然后单击
。单击
。确认要进行的更改,然后单击
以创建 RAID。
9.2.4 使用 mdadm 创建复杂 RAID 10 #
本节中的过程使用下表中显示的设备名。确保使用您自己的设备名称修改这些设备名称。
原始设备 |
RAID 10 |
---|---|
|
|
打开一个终端控制台。
如果需要,使用 parted 等磁盘分区程序创建至少四个大小相同的 0xFD Linux RAID 分区。
输入以下命令创建 RAID 10。
tux >
sudo
mdadm --create /dev/md3 --run --level=10 --chunk=32 --raid-devices=4 \ /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1请务必根据您的设置调整
--raid-devices
的值和分区列表。该命令会创建采用近布局并有两个复本的阵列。要更改这两个值中的任何一个,请按第 9.2.2.4 节 “使用 YaST 和 mdadm 指定复本数和布局”中所述使用
--layout
。在 RAID 10 设备
/dev/md3
上创建文件系统,例如 XFS 文件系统:tux >
sudo
mkfs.xfs /dev/md3要使用其他文件系统,请修改该命令。
编辑
/etc/mdadm.conf
文件,如果它不存在,则创建该文件(例如通过运行sudo vi /etc/mdadm.conf
)。添加下列行(如果该文件存在,第一行很可能也已经存在)。DEVICE containers partitions ARRAY /dev/md3 UUID=UUID
设备的 UUID 可以使用以下命令检索:
tux >
sudo
mdadm -D /dev/md3 | grep UUID编辑
/etc/fstab
文件以添加 RAID 10 设备/dev/md3
的项目。下列示例显示了采用 XFS 文件系统并以/data
做为安装点的 RAID 设备的项。/dev/md3 /data xfs defaults 1 2
装入 RAID 设备:
tux >
sudo
mount /data