摘要:在主机系统和存储系统之间增加冗余SCSI路径,并在主机上运行SCSI路径管理软件,从而在SCSI路径之间实现负载均衡和故障切换。在多主机共享存储系统时,利用路径管理软件的屏蔽功能,可将逻辑单元唯一地分配给某一主机。讨论了在Windows NT系统下SCSI路径管理软件的原理和实现方法。
关键字:SCSI,设备驱动程序,冗余路径,负载均衡
1.引言
随着计算机对信息的处理能力的日益提高,对存储系统在存储容量,存取速度,可用性等方面的要求越来越高。目前,在存储系统中广泛使用了RAID(Redundant Array of Inexpensive Disk)技术,以提高数据的可靠性。即使在磁盘发生错误后,存储系统仍然能够工作,并且能够以新的磁盘来替换故障磁盘。
通常,每台主机只使用一块SCSI卡或光纤卡与RAID系统相连,一旦存储路径发生故障(如SCSI卡或光纤卡故障,光纤Hub故障,连线故障等),主机就不能继续访问存储系统,主机上运行的应用就会被中断。
为提高存储系统的的可用性,在RAID系统的基础上,采用冗余配置,在主机系统和存储系统中建立两条并行的连接。在软件方面,必须在操作系统的存储架构中增加一个设备驱动程序,完成负载均衡,故障切换,逻辑单元屏蔽的功能。
2.建立冗余路径
为防止主机系统失效,存储系统一般被连接于多台主机上,当某台主机失效后,其应用可由高可用(HA)软件或集群(Cluster)软件转移到其他主机上。
为进一步消除单点故障(Single Point of Failure),在存储系统中使用两个RAID控制器,每个RAID控制器连接到一个光纤Hub(或Switch),再连接到主机的光纤卡上。如图1所示。若使用SCSI连接,RAID控制器需直接连接到主机的SCSI卡上。两种连接方式都建立了从主机系统的冗余路径,并允许多台主机同时连接到存储系统上。
光纤卡,光纤Hub,光纤连接电缆(或SCSI卡,SCSI连接电缆)等失效时,由路径管理软件切换到另一条路径上。服务器失效时,由HA或Cluster软件切换其上运行的应用。
图1 存储系统光纤冗余连接
3. SCSI冗余路径模块的功能
在软件方面,还需要SCSI冗余路径模块(SCSI Path Management,简称SPM)。其主要功能为:故障路径切换(Path Failover),负载均衡(Load Balance),逻辑单元屏蔽(LUN Masking)。
3.1故障路径切换
SPM通过消除存储I/O路径上所有部件(如主机的HBA即主机总线适配器,控制器,HUB,电缆等)的单点故障,提高系统的可用性。主机通过多条I/O路径访问存储系统,一旦一条I/O路径出现故障,SPM会立即检测到相应故障,并将之后的I/O操作重新路由至其它正常路径上。重新路由I/O的过程仅需要几秒,对应用程序是透明的,应用程序不会受到路径故障的影响而终止运行。SPM对发生故障的路径持续监控,一旦发现其恢复正常,SPM会恢复该路径的I/O任务。
3.2 负载平衡并增加带宽
在主机与存储系统之间存在多条I/O路径时,为了避免某一存储路径成为系统的性能瓶颈,SPM将主机上的对该存储系统的所有I/O操作均衡地分配至这些路径上去,提供负载平衡能力。
通过同时利用多条并行数据路径,SPM能够有效地提高系统的数据传输带宽。在多台主机共享存储系统的配置中,可以加快I/O访问的操作,减小数据路径的瓶颈,从而增加整个系统的可用带宽。
3.3 逻辑单元屏蔽
在多台主机同时连接到一台存储系统时,SPM的逻辑单元屏蔽(LUN Masking)功能可以使得每台主机在存储系统上拥有其专属的部分,其他主机不能存储属于该主机的存储区域。因此,这些主机可以运行不同的操作系统,在其存储区域上使用不同的文件系统,而不受其他主机的影响。
图3表示多台主机共享连接存储系统的一个配置。图中NT主机使用的区域为LG0;Solaris主机使用LG1;Linux主机使用LG2。从操作系统角度,每台主机都可以看到所有的逻辑盘或逻辑卷。在物理连接上,每一个主机都可以访问到LG0,LG1和LG2。通过SPM软件的逻辑单元屏蔽功能,NT主机只能访问LG0,而不能访问到LG1和LG2;同样,Solaris主机只能访问LG1,而不能访问到LG0和LG2;Linux主机只能访问LG2,而不能访问到LG0和LG1。这种功能允许IT管理员将某个逻辑单元唯一地分配给某一台主机使用,而禁止其他主机访问这个逻辑单元,从而避免多个主机同时访问一个逻辑单元而造成数据冲突和丢失。
4. SPM在Windows NT环境下的实现
为使SPM的各项功能对应用程序透明,SPM需以设备驱动程序的形式实现。所有对存储系统的I/O操作须经由SPM驱动程序。
光纤连接与SCSI连接的区别只存在于硬件方面,在操作系统层次上,对二者的处理是相同的,在上层使用SCSI命令接口,由光纤卡的驱动程序对SCSI命令和数据进行转换。因此SPM对SCSI连接和光纤连接的处理是一致的,内部使用SCSI协议接口。
4.1 运行层次
在Windows NT操作系统下,SPM设计为一个过滤器驱动程序,它是一种特殊类型的中间驱动程序。在系统层次结构中,它位于文件系统驱动程序和磁盘驱动程序之间,来自于文件系统的I/O请求通过它再到下一层。SPM管理数据路径,通过控制和分配数据流量达到I/O负载均衡。将SPM驱动程序设置为filter类型的驱动程序,并以boot方式启动。[1]4.2 SCSI冗余路径在Windows NT的内部表示
在Windows NT中,每一个物理磁盘都被赋予一个SCSI地址,用(c,b,t,d)表示,c(channel)表示SCSI卡的编号,b(bus)表示SCSI卡上的通道编号(一般只有一个通道,b总为0),t(target)表示目标地址,d(disk)表示LUN号。磁盘驱动程序为这个磁盘创建一个设备“\Device\Harddisk(x)\Partition0”,x为该磁盘的唯一编号。若该磁盘上存在分区,则为每一个分区创建一个设备“\Device\Harddisk(x)\Partition(y)”,y为分区的编号。
当存在冗余路径时,由于每一个SCSI卡都连接到物理磁盘上,因此物理磁盘具有多个SCSI地址。对应于这个磁盘,系统内部也创建了多个“\Device\Harddisk(x)\Partition0”设备;对应于这个磁盘的每一个分区,也存在着多个多个“\Device\Harddisk(x)\Partition(y)”设备(所有设备的y(即分区号)相同。
为保证该物理磁盘对于上层只存在唯一的一个映象,对于某个磁盘的多个“\Device\Harddisk(x)\Partition0”, SPM驱动程序只允许一个设备,一般选取磁盘号最小的这个设备;同样,对于某个分区的多个“\Device\Harddisk(x)\Partition(y)”设备,SPM驱动程序也只允许一个设备。
4.3 故障路径切换
SPM驱动程序启动后,将挂接(Attach)原始磁盘设备“\Device\Harddisk(x)\Partition0”和分区设备“\Device\Harddisk(x)\Partition(y)”,对磁盘设备和分区设备的操作,NT系统构造一个IRP包,先调用SPM驱动程序,再由SPM将该操作转发给下层磁盘驱动程序。SPM将拒绝对冗余的磁盘设备和分区设备的操作,不进行转发。
SPM管理各个存储路径,决定采用哪个存储路径执行操作。正常情况下,SPM使用主路径执行操作,将IRP转发主路径对应的设备;如果主路径已经失效,SPM在备用路径中选择一条路径,将IRP转发至该路径对应的设备。
在转发IRP到下层磁盘驱动程序之前,SPM先设置IRP的完成例程(IoSetCompletionRoutine)。在IRP完成后,NT系统将调用这个例程。如果这个IRP正常完成,表示路径正确,SPM即完成对这个IRP的处理。如果这个IRP的操作未正常执行,表示选取的路径发生错误, SPM选取另外一个状态正常的路径,将这个IRP转发到该路径对应的设备重试这个IRP。若操作执行成功,则正常返回。如果所有的路径都不能成功地执行操作,SPM可对当前操作使用全部路径进行重试,直到达到规定的重试次数而超时返回,以防止应用程序无限等待而导致系统挂起。
为及时地更新各路径的状态,SPM创建一个系统线程,定时检查各个路径;另外,IRP的重试不能在IoCompletion例程中完成,SPM创建另一个系统线程执行重试操作。
因此,在I/O路径发生故障时,正在该路径执行的IRP在返回后,将由SPM转发至其他正确路径上;随后的IRP将由SPM直接转发到其他路径。从而实现了故障路径切换的目的。
4.4 负载均衡
对于负载均衡方式,SPM可采用不同的算法。最简单的算法是轮流顺序分配每个IRP到所有状态正确的存储路径。这种方法适用于以随机存取为主的应用场合,或者系统的存储瓶颈在于Hub和Switch的情况。对于以连续存取为主的场合,这种方法将把连续的IRP分配到不同的HBA上,分别启动独立的DMA操作来完成,降低系统的效率。改进的方法是将整个磁盘划分为若干个连续区域,每个区域对应于一条路径。转发IRP时,根据IRP操作的位置,确定其属于某一区域,选取该区域对应的路径。因此可保证对该区域内连续的数据读写请求总是分配到同一路径上。
为增加软件的灵活性,可提供参数供用户设置,根据实际环境决定采用何种方式达到负载均衡。
4.5 逻辑单元屏蔽
对于每一个物理磁盘,SPM为其保留一个排斥(exclude)属性。仅当exclude为0时,该磁盘的IRP操作才会被转发到下层驱动程序执行;当exclude属性为1时,该磁盘的IRP操作被直接返回,不会被执行。因此,对于分配给该主机的磁盘,可利用SPM软件设置其exclude属性为0;对于分配给其他主机的磁盘设置其exclude属性为1。
5.结论
SCSI冗余路径模块实现了负载均衡,故障路径切换,逻辑单元屏蔽的功能,提高计算机系统在存储方面的存取带宽,避免了存储体系中存在的单点故障,在多主机共享存储系统的环境中为存储空间提供了保护手段。
由于SPM工作运行于主机中,若希望其运行于Windows NT之外的其他操作系统,需进行移植。另外,SPM实现逻辑单元屏蔽功能由各主机独立进行,不能保证各主机设置exclude属性的一致性,理想的解决方案是将逻辑单元分配信息集中管理和设定,或通过存储系统的特殊机制进行设置和仲裁,以确保逻辑单元不会由多个主机同时访问。
参考文献
[1](美)Art Baker著,科欣翻译组译,Windows NT 设备驱动程序设计指南,机械工业出版社,1997.12