本章说明与镜像和子镜像相关的基本 Solaris Volume Manager 概念。有关执行相关任务的信息,请参见第 11 章,RAID-1(镜像)卷(任务)。
本章包含以下信息:
RAID-1 卷(或镜像)是用于维护 RAID-0(条带化或串联)卷中的相同数据副本的卷。各个镜像的 RAID-0 卷称为子镜像。镜像要求购买磁盘。所需的磁盘空间至少要为必须镜像的数据量的两倍。由于 Solaris Volume Manager 必须对所有子镜像写入数据,因此镜像还会增加将要写入的请求写入磁盘所需的时间量。
配置镜像后,就可以像使用物理片一样使用该镜像。
可以镜像任何文件系统,包括现有文件系统。这些文件系统包括根 (/)、swap 和 /usr。也可以将镜像用于任何应用程序,如数据库。
将 Solaris Volume Manager 的热备用功能与镜像结合使用,可以使数据始终安全且可用。有关热备件的信息,请参见第 16 章,热备用池(概述)和第 17 章,热备用池(任务)。
镜像由一个或多个称为子镜像的 RAID-0(条带化或串联)卷组成。
镜像最多可以包含四个子镜像。但是,双向镜像通常会为大多数应用程序提供足够的数据冗余,且就磁盘驱动器成本而言比较廉价。第三个子镜像使您可以在其中一个子镜像处于脱机状态下进行联机备份,同时又能保持数据冗余。
如果在“脱机”状态下获取子镜像,则镜像将停止向子镜像读取和写入数据。此时,可以访问子镜像本身(例如,执行备份)。但是,子镜像处于只读状态。子镜像处于脱机状态时,Solaris Volume Manager 将跟踪向该镜像中写入的所有内容。当使子镜像恢复联机状态时,只有在子镜像处于脱机状态时写入的镜像部分(重新同步区域)会被重新同步。还可以在脱机状态下获取子镜像,以对出现错误的物理设备进行故障排除或修复。
可以随时附加子镜像或从镜像拆离子镜像,但至少必须有一个子镜像始终处于连接状态。
通常,创建的镜像只包含一个子镜像。创建镜像后,可以附加第二个子镜像。
图 10–1 说明了镜像 d20。该镜像由两个卷(子镜像)d21 和 d22 组成。
Solaris Volume Manager 在多个物理磁盘上生成相同的数据副本,并向应用程序显示一个虚拟磁盘(本示例中为 d20)。所有磁盘上写入的内容都是相同的。磁盘读取内容来自其中某个基础子镜像。镜像 d20 的总容量为最小子镜像的大小(如果子镜像的大小不相等)。
Solaris Volume Manager 支持 RAID-1+0 和 RAID-0+1 冗余。RAID-1+0 冗余代表先建立一组镜像配置,然后再进行条带化。RAID-0+1 冗余代表先建立一组条带配置,然后再进行镜像。Solaris Volume Manager 界面显示所有的 RAID-1 设备在严格意义上讲都为 RAID-0+1。但是,Solaris Volume Manager 可以识别出基础组件并对每个组件分别进行镜像(如果可能)。
Solaris Volume Manager 无法始终提供 RAID-1+0 功能。但是,如果两个子镜像彼此相同且由磁盘片(而不是软分区)组成,则提供 RAID-1+0 功能是可能的。
请考虑使用由三个条带化片组成的双向镜像来实现 RAID-0+1。如果不使用 Solaris Volume Manager 产品,则一个片出现故障可能会导致镜像的一面失败。假设未使用任何热备件,则两个片出现故障将导致镜像失败。使用 Solaris Volume Manager 时,最多可有三个片出现故障,而不会导致镜像失败。由于这三个条带化片中的每个片均已单独镜像到另一半镜像的对应部分中,因此镜像不会失败。
图 10–2 说明了 RAID-1 卷遇到片丢失的危险但 RAID-1+0 功能阻止了数据丢失的这一过程。
RAID-1 卷包含两个子镜像。每个子镜像都包含三个相同的物理磁盘,且这些物理磁盘的交错值都相同。允许 A、B 和 F 三个磁盘出现故障。镜像的整个逻辑块范围仍然包含于至少一个良好的磁盘上。卷的所有数据都可用。
但是,如果磁盘 A 和 D 出现故障,则部分镜像数据在任何磁盘上都不再可用。对这些逻辑块的访问将失败。但是,对数据可用的镜像部分的访问仍将成功。在这种情况下,该镜像和出现了坏块的单个磁盘一样,损坏的部分不可用,但其余部分是可用的。
RAID-1 卷(镜像)重新同步是指在出现以下情况之一时将数据从一个子镜像复制到另一个子镜像的过程:
子镜像失败
系统崩溃
子镜像脱机之后又重新联机
添加了新的子镜像
执行重新同步时,用户始终可以读取和写入镜像。
镜像重新同步通过维护具有相同数据的所有子镜像(正在写入的镜像除外),确保了正确的镜像操作。
不应忽略镜像重新同步。不需要以手动方式启动镜像重新同步。此过程将自动执行。
将新的子镜像附加(添加)到镜像时,该镜像中另一子镜像中的所有数据都将自动写入新附加的子镜像。完成镜像重新同步后,新的子镜像即可读取。拆离子镜像之前,该子镜像始终附加到镜像。
如果系统在重新同步期间崩溃了,则系统完成重新引导后就会重新启动重新同步。
出现系统故障后重新引导系统期间,或在子镜像脱机之后又重新联机时,Solaris Volume Manager 将执行优化的镜像重新同步。元盘驱动程序将跟踪子镜像区域。元盘驱动程序借助此功能来了解,哪些子镜像区域在出现故障后可能不同步。优化的镜像重新同步仅在不同步区域中执行。可以指定在重新引导期间重新同步镜像的顺序。通过将子镜像传送号设置为 0,可以省略镜像重新同步。有关与更改传送号关联的任务,请参见示例 11–16。
替换子镜像内的片后,Solaris Volume Manager 将执行数据的部分镜像重新同步。Solaris Volume Manager 会将数据从另一子镜像的仍然完好的片复制到替换后的片中。
本节提供可帮助您创建镜像的指南,此外,还提供所创建镜像的性能指南。
创建镜像之前,请先创建组成镜像的 RAID-0(条带化或串联)卷。
创建镜像时,请首先创建单向镜像,然后附加第二个子镜像。此策略可以启动重新同步操作,此外,还可以确保数据不会被损坏。您还可以创建单向镜像,以用作将来的双向或多向镜像。
可以使用单个命令根据单向镜像来创建双向镜像、三向镜像或四向镜像。通过使用单个命令来创建所有的子镜像,可以加速创建过程。只有在未镜像现有数据,而且已充分销毁所有子镜像上的数据时,才使用此过程。
可以使用在片上生成的现有文件系统来创建 RAID-1 卷。主 RAID-0 卷(子镜像)中只能包括单个片。如果您正在镜像根文件系统或其他对系统非常关键的文件系统,则所有的子镜像必须仅包含单个片。
使用 swap -l 命令可以检查所有的 swap 设备。指定为 swap 的每个片必须独立于其余交换片进行镜像。
Solaris Management Console 中增强的存储工具 不支持取消镜像根 (/)、/opt、/usr 或 swap。实际上,该工具不支持取消镜像任何不能在系统处于运行状态时取消挂载的文件系统。请对这些文件系统改用命令行过程。
使用大小相同的子镜像。不同大小的子镜像会导致部分磁盘空间不能使用。
仅使用镜像内以类似方式配置的子镜像。需要特别指出的是,如果创建的镜像包含未加标记的子镜像,则不能附加包含磁盘标号的任何子镜像。
如果您的镜像文件系统中附加的第一个子镜像不是从柱面 0 开始的,则附加的所有其他子镜像也不得从柱面 0 开始。如果尝试附加从柱面 0 开始的子镜像,则会显示以下错误消息:
can't attach labeled submirror to an unlabeled mirror |
要么在特定镜像内使用的所有子镜像都必须从柱面 0 开始,要么在特定镜像内使用的所有子镜像都不得从柱面 0 开始。
所有子镜像的开始柱面不必相同。但是,所有子镜像要么都包括柱面 0,要么都不包括柱面 0。
通过在创建镜像之前添加其他状态数据库副本,可以提高镜像的性能。按照一般规则,为添加到系统中的每个镜像添加两个其他副本。Solaris Volume Manager 使用这些附加副本存储脏区日志 (DRL, dirty region log),该日志用于提供优化的重新同步。通过提供足够数量的副本,可以使 I/O 对 RAID-1 卷性能的影响降至最低程度。在相同的磁盘或控制器上使用至少两个副本作为副本记录的镜像,还可以帮助提高整体性能。
只需直接挂载镜像设备即可。请不要尝试直接挂载子镜像,除非该子镜像处于脱机状态且以只读方式挂载。请不要挂载作为子镜像一部分的片。此过程可能会销毁数据并使系统崩溃。
使不同子镜像的片位于不同的磁盘和控制器中。如果同一镜像的两个和多个子镜像的片位于同一个磁盘上,则对数据的保护作用将大大降低。同样,应将子镜像分布在不同的控制器中,因为控制器及关联电缆比磁盘更容易发生故障。此做法还可以提高镜像性能。
对一个镜像使用同一类型的磁盘和控制器。特别是对于旧的 SCSI 存储设备,不同型号或不同品牌的磁盘或控制器的性能差别很大。如果在单个镜像中使用具有不同性能级别的磁盘和控制器,则性能可能会明显降低。
镜像可能会提高读取性能,但写入性能始终会降低。仅在线程或异步 I/O 情况下,镜像才会提高读取性能。 从卷单线程读取不会提高性能。
可以体验到使用镜像读取策略可提高性能。例如,缺省读取模式为以循环方式交替读取磁盘中的数据。此策略是缺省设置,因为循环往往最适合于 UFS 多用户、多处理器活动。
在某些情况下,geometric 读取选项通过使磁头移动和访问时间降至最低程度,可以提高性能。此选项在以下情况下最有效:
每个磁盘上只有一个片
一次只有一个进程使用片或文件系统
I/O 模式高度连续或所有的访问权限都为读取权限
可以将子镜像附加到镜像上,而不中断服务。可以将子镜像附加到镜像上,以创建双向、三向和四向镜像。
使子镜像处于脱机状态时,可以防止镜像从子镜像读取数据并向子镜像写入数据。但是,要保留子镜像与镜像的逻辑关联。子镜像处于脱机状态时,Solaris Volume Manager 将跟踪向该镜像中写入的所有内容。子镜像恢复联机状态时,所有内容都将被写入该子镜像中。通过执行优化的重新同步,Solaris Volume Manager 只须重新同步已发生更改的数据,而不必重新同步整个子镜像。拆离子镜像时,需要提供该子镜像与对应镜像的逻辑关联。通常,要执行维护,需要使子镜像处于脱机状态。要删除子镜像,需要先拆离该子镜像。
以下选项可用于优化镜像性能:
镜像读取策略
镜像写入策略
重新同步镜像的顺序(传送号)
最初创建镜像时,可以定义镜像选项。设置镜像且镜像处于运行状态后,还可以更改镜像选项。有关与更改这些选项相关的任务,请参见如何更改 RAID-1 卷选项。
Solaris Volume Manager 可以为 RAID-1 卷配置不同的读取和写入策略。正确设置读取和写入策略可以提高给定配置的性能。
表 10–1 RAID-1 卷读取策略
读取策略 |
说明 |
---|---|
循环(缺省) |
尝试平衡子镜像中的负载。从镜像的所有子镜像中依照循环顺序(一个接着一个)执行所有读取操作。 |
几何 |
可以基于逻辑磁盘块地址划分不同子镜像的读取操作。例如,使用双向子镜像时,可以将镜像上的磁盘空间划分为两个大小相等的逻辑地址范围。从某个子镜像的读取操作被限制到逻辑范围的一半。从其他子镜像的读取操作被限制到另一半。几何读取策略可以有效减少读取所需的查找时间。性能提高的程度(通过使用此读取策略)取决于系统 I/O 负载以及应用程序的访问模式。 |
第一 |
将所有读取操作导向第一个子镜像。只有在组成第一个子镜像的设备比第二个子镜像的设备速度明显更快时,才应使用此策略。 |
表 10–2 RAID-1 卷写入策略
写入策略 |
说明 |
---|---|
并行(缺省) |
对镜像执行同时复制并分发到所有子镜像的写入操作。 |
串行 |
对子镜像连续执行写入操作(也就是说,第一个子镜像写入操作完成后,才能启动第二个子镜像写入操作)。此策略指定必须完成向一个子镜像的写入操作,才能启动下一个子镜像写入操作。如果因电源故障等无法访问子镜像,则系统会提供此策略。 |
传送号(范围为 0–9 的编号)可以确定在系统重新引导期间重新同步特定镜像的顺序。缺省传送号为 1。首先重新同步较低的传送号。如果使用 0,则将跳过镜像重新同步。应仅对以只读方式挂载的镜像使用传送号 0。具有相同传送号的镜像同时重新同步。
Solaris Volume Manager 的 metastat 命令可用于报告有关 RAID 1 卷和子镜像的状态信息。状态信息可帮助您确定是否需要对 RAID-1 卷执行维护操作。下表说明了对 RAID-1 卷运行 metastat 命令时显示的子镜像状态。
表 10–3 子镜像状态
状态 |
含义 |
---|---|
正常 |
子镜像没有错误且正常发挥作用。 |
正在重新同步 |
正在以活动方式重新同步子镜像。出现错误且已更正错误,子镜像刚刚恢复联机状态,或者添加了新的子镜像。 |
需要维护 |
子镜像中的片遇到 I/O 错误或打开错误。子镜像中的此片的所有读取和写入操作都已停止。 |
此外,对于子镜像中的每一片,metastat 命令都会显示以下信息:
指示条带中的片的设备名称
指示片开始的块
指示片中是否包含状态数据库副本
指示片的状态
指示正在将片用作出现故障片的热备件
子镜像状态仅提供有关子镜像状态的常规信息。排除镜像错误时,片状态可能是要查阅的最重要的信息。如果子镜像报告“需要维护”状态,则必须参阅片状态来了解更多信息。
根据片处于“维护”状态还是处于“最近出错”状态,可以执行不同的恢复操作。如果只有处于“维护”状态的片,则可以按任意顺序修复这些片。如果同时具有处于“维护”状态和处于“最近出错”状态的片,则必须首先修复处于“维护”状态的片。修复处于“维护”状态的片后,请接着修复处于“最近出错”状态的片。有关更多信息,请参见在 RAID-1 和 RAID-5 卷中替换和启用组件的概述。
下表说明了子镜像的片状态以及可能执行的操作。
表 10–4 子镜像片状态
状态 |
含义 |
操作 |
---|---|---|
正常 |
片没有错误且正常发挥作用。 |
无。 |
正在重新同步 |
正在以活动方式重新同步片。出现错误且已更正错误,子镜像刚刚恢复联机状态,或者添加了新的子镜像。 |
如果需要,请监视子镜像状态,直到重新同步完成为止。 |
维护 |
片遇到 I/O 错误或打开错误。此组件的所有读取和写入操作都已停止。 |
启用或替换出现故障的片。请参见如何启用子镜像中的片或如何替换子镜像中的片。metastat 命令将显示 invoke 恢复消息,其中包含要使用 metareplace 命令执行的相应操作。也可以使用 metareplace -e 命令。 |
最近出错 |
片遇到 I/O 错误或打开错误。但是,由于其他片出现了故障,因此不会在其他位置复制数据。仍然对片执行 I/O 操作。如果产生了 I/O 错误,则镜像 I/O 将失败。 |
首先,启用或更改处于“维护”状态的片。请参见如何启用子镜像中的片或如何替换子镜像中的片。通常,此错误会导致某些数据丢失,因此修复镜像之后,应验证该镜像。对于文件系统,请使用 fsck 命令,然后检查数据。应用程序或数据库必须具有各自的设备验证方法。 |
有时,您可能需要将包含根 (/)、/usr 和 swap(即所谓的“引导”文件系统)镜像的系统引导到单用户模式(通过使用 boot -s 命令)。在这种情况下,这些镜像(可能还有系统上的所有镜像)都会以“需要维护”状态出现(如果使用 metastat 命令进行查看)。此外,如果对这些片执行写入操作,则 metastat 命令将显示镜像中的脏区数目不断增加。
这种情况看起来存在潜在危险。但是,当将系统引导到单用户模式时,metasync - r 命令(通常在引导系统以重新同步镜像时运行)将被中止。重新引导系统后,metasync -r 命令将运行并重新同步所有镜像。
如果您担心此情况,则可以手动运行 metasync -r 命令。
RAID-1 卷提供了一种构造冗余卷的方式。因此,当某个基础 RAID-0 卷部分或完全出现故障时,不会丢失数据或中断对文件系统的访问。以下示例(利用在第 5 章,配置和使用 Solaris Volume Manager(方案)中说明且在方案-RAID-0 卷中继续使用的方案)介绍了 RAID-1 卷如何提供冗余存储。
正如方案-RAID-0 卷中所述,样例系统具有两个 RAID-0 卷。每个卷的大小大约为 27 GB,且跨越三个磁盘。通过创建 RAID-1 卷来镜像这两个 RAID-0 卷,完全冗余存储空间可以提供有弹性的数据存储。
在该 RAID-1 卷中,磁盘控制器的故障不会中断对卷的访问。同样,在不中断访问的情况下,最多可能允许三个单独的磁盘出现故障。
要针对可能中断访问的问题提供进一步的保护,请使用热备件,如第 16 章,热备用池(概述)中所述。有关具体情况,请参见热备件的工作原理。