------------------------------------重要说明------------------------------------
以下部分内容来网络,部分自华为存储官方教材
具体教材内容请移步华为存储官网进行教材下载
网络引用内容无法找到原创,如有侵权请通知
------------------------------------重要说明------------------------------------
① 多路径技术产生的背景
如果但链路连接会导致但点故障,网络中某一处发生故障,可能导致整个网络瘫痪;
单点故障是指网络中的某一处发生故障,可能导致整个网络瘫痪, 为了避免单点故障,高可靠系统对可能的单点故障设备都做了冗余备份。
用户数据从主机侧到磁盘阵列, 经历的典型路径为:主机 -> SAN网络 -> 存储系统机头 -> 存储系统磁盘。
所谓多路径技术,即在一台主机和存储阵列端使用多条路径连接,使主机到阵列的可见路径大于一条,其间可以跨过多个交换机,避免在交换机处形成单点故障。如上右图中,主机到存储阵列的可见路径有2条,即 ( 1, 3)( 2, 4 ),该路径上有两台独立的交换机。在这种模式下,当路径1断开时,数据流会在主机多路径软件的导引下选择路径( 2,4 )到达存储阵列侧,同样在左侧交换机失效时,也会自动导引到右侧交换机到达存储阵列。在路径1恢复的情况下, IO流会自动切回原有路径下发。整个切换和恢复过程对主机应用透明,完全避免了由于主机和阵列间的路径故障导致IO中断。
存储系统冗余保护方案涉及了这个路径上的所有领域,在主机侧和SAN网络领域,通过结合UltraPath多路径软件及其它多路径软件,保证了前端路径没有单点故障;在存储机头侧,使用了全冗余硬件及热插拔技术实现了双控双活的冗余保护;在磁盘侧,利用磁盘双端口技术及磁盘多路径技术,实现了磁盘侧冗余保护。
② 多路径软件处理的故障
HBA故障、链路故障、存储控制器故障;
利用多路径技术可以实现冗余路径的可靠利用。如果一条路径不能使用,或不能满足规定的性能要求,多路径技术会自动而透明地将I/O流转移到其他可用的路径上,确保I/O流有效、可靠地继续传输。
③ 多路径技术原理
主机上每个SCSI设备都具有一个SCSI地址,该地址由initiator ID(Host ID)、bus ID、Target ID以及LUN(逻辑单元号) 成。
SCSI设备:
小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。
主机上每个SCSI设备都具有一个SCSI地址,该地址由initiator ID(或称为host ID)、bus ID、 target ID以及LUN(逻辑单元号)组成;
在实际组网中, initiator ID一般对应主机HBA端口, target ID一般对应存储阵列控制器端口( bus ID适用于老旧的并行SCSI总线,在SAN环境中一般固定为0)。
如胶片中,主机的两个HBA端口连接到存储阵列的4个控制器端口,存储映射了两个LUN给主机,则主机上会生成8个SCSI设备,其SCSI地址分别为:
1. I:1 - B:0 - T:1 - L:1(即initiator ID =1、 bus ID =0、 target ID=1、 LUN=1)
2. I:1 - B:0 - T:1 - L:2
3. I:1 - B:0 - T:3 - L:1
4. I:1 - B:0 - T:3 - L:2
5. I:2 - B:0 - T:2 - L:1
6. I:2 - B:0 - T:2 - L:2
7. I:2 - B:0 - T:4 - L:1
8. I:2 - B:0 - T:4 - L:2
不同的SCSI设备表示通过不同的路径访问不同的存储逻辑单元,因此UltraPath基于SCSI设备来抽象path,即一个path指向一个SCSI设备。
由于UltraPath管理的path是关联到LUN的,因此UltraPath不仅能处理主机与存储之间的链路故障,还能处理特定存储控制器访问特定LUN失败的故障(例如LUN 1无法通过控制器A访问,但可以通过控制器B访问) 。
每个LUN都拥有一个唯一标识符WWN(可以存储的LUN属性中看到),UltraPath通过WWN来区分不同的SCSI设备到底是不同的LUN,还是同一个LUN的不同PATH,UltraPath生成与真实LUN一一对应的虚拟磁盘提供给上层使用,并维护虚拟磁盘与PATH之间的映射关系。
存储阵列与主机之间有两条路径,并映射3个LUN给主机,则在主机上生成6个SCSI设备;UltraPath通过WWN判断出这6个SCSI设备来自于3个LUN,则生成了3个虚拟磁盘,每个虚拟磁盘有两个path;
拥有相同的initiator ID和target ID的SCSI设备表示通过相同的I_T连接访问存储,UltraPath通过抽象出physical path,把这些SCSI设备关联在一起。如胶片图中组网可以抽象出4条physical path:
1. I:1 - T:1
2. I:1 - T:3
3. I:2 - T:2
4. I:2 - T:4
虚拟磁盘与路径的映射: 每个LUN都拥有一个唯一标示符WWN, UltraPath通过WWN来区分不同的SCSI设备到底是不同的LUN,还是同一个LUN的不同path, UltraPath生成与真实LUN一一对应的虚拟磁盘提供给上层应用使用,并维护虚拟磁盘与path之间的映射关系。
④ SCSI技术
SCSI是一个能够让设备在没有CPU和SCSI适配卡的情况下能够互相通信的协议。
SCSI是一个智能传输协议,这是其一个特别的优点。如果多个设备是连接在同一组总线上的(并行通信通道),这些设备可以进行相互的通信。也就是说,两个连在同一组总线上的设备间,可以互相通信,而且不需要CPU或者特别的适配卡协助。
传输方式:同步传输、异步传输
l SCSI传输原理
多路复用技术的采用使得在SCSI传输中使用的总线数目大大减少。在一条典型的SCSI传输链路上,大约只有20根连接线。如果没有多路复用技术,连接线的数据至少要翻倍。在总线上传输数据时,数据的发起端(设备B)将数据以电信号的方式发送出来,数据从设备B与总线的接入点发送到总线上。下面我们看看如果数据的目标设备是设备D,总线是如何传输数据的。
电信号进入总线后,将会沿着总线的电缆朝各个方向进行传输,并且在每个交叉口,再沿着各个分叉的方向进行传输。因此,当承载着数据的电信号从设备B传输到设备B与总线的交叉点后,信号将分成两份,分别向总线的两个相反的方向进行传输。当信号到达设备A或设备C与总线的交叉点时,信号再次会分成两份,分别沿着总线方向和设备方向进行传输。当信号到达设备D与总线的交叉点时,也会以同样的方式进行传输。
信号继续按照总线的分叉的两个方向传输,并在下一个交叉点向两个分叉的方向进行传输。
其中一份信号将像我们希望的那样向设备D传输。第二份则继续向前传输到达总线的尽头。
设备D,就像设备A和设备C那样接收到了信号。在传输的信号里,包含了数据包的目标设备是哪个设备的信息。因此,当设备A和设备C接收到这个数据包后,将会发现这个数据包不是传输给它们的,因此会将数据包丢弃。而设备D则发现这个数据包是传输给自己的,因此会接收并处理这个数据包。
因此设备D将得到需要的数据包,但是仍然会有一份数据继续传输并到达总线的尽头。在总线的尽头,可能的处理方法有:吸收、反射或者篡改。无论怎样,我们肯定不希望数据再被反射回去,因为这样会与在总线上传输的新的数据包产生冲突和干扰。
为了避免信号被反射回总线,因此我们需要在总线的尽头安装一个终结器以吸收信号。终结器的原理很简单,它像一个插头一样安装在总线的尽头,吸收接收到的信号以防止反射。因此,每一个SCSI总线系统都需要终结器这个装置,否则就不能正常得进行信号传输。
注意:我们也将注意到也会有一份信号传输到总线的另一端,这一端是SCSI适配卡。传输到这一端的信号同样也需要被吸收终结,防止信号被反射回去。
l SCSI设备寻址
为了对连接在SCSI总线上的设备寻址, SCSI协议引入了SCSI设备ID和逻辑单元号LUN(Logical Unit Number)。在SCSI总线上的每个设备都必须有一个唯一的设备ID,当然服务器中的主机总线适配器也拥有自己的设备ID,固定为7。每条总线,包括总线适配器,最多允许有8个或者16个设备ID。设备ID一方面用以寻址,另一个作用是标识该设备在总线使用上的优先级。此外,在同一条总线上连接的不同的设备的设备ID必须不同,否则就会引起寻址和优先级的冲突。
每一个存储设备可能包括若干个子设备,如虚拟磁盘、磁带驱动器等。 因此SCSI协议引入了逻辑单元号LUN ID,以便于对存储设备中的子设备进行寻址。
传统的SCSI控制器连接单条总线,相应的只具有一个总线号。企业级的一个服务器则可能配置了多个SCSI控制器,从而就可能有多条SCSI总线。在引入存储网络之后,每个FCHBA( Host Bus Adapter)或iSCSI( Internet SCSI)网卡也都各连接着一条总线,因此必须对每一条总线分配一个总线号,在他们之间依靠不同的总线号加以区分。我们可以使用一个三元描述标识一个SCSI目标:总线号/目标设备ID/逻辑单元号LUN ID。
⑤ 多路径软件功能
a. Failover
UltraPath在路径故障时可以自动将IO转移到其他可用路径,流程如下所示:
① 应用向UltraPath生成的虚拟磁盘下发IO。
② UltraPath将IO转发给一个path 1(即SCSI设备)。
③ 路径故障导致该path 1上IO失败。
④ UltraPath将IO重新下发给另一个path 2。
⑤ path 2返回IO成功。
⑥ UltraPath向上层应用返回IO成功。
b. Failback
UltraPath在检测到路径故障恢复后会自动重新把IO下发到该路径。
对于支持热插拔的系统(windows),主机与存储之间的链路断开会导致SCSI设备被删除,相应的在链路恢复后会触发重新创建SCSI设备,对于这种场景UltraPath可以立即感知到路径恢复;
对于不支持热插拔的系统(AIX、低版本的linux),UltraPath通过周期例测感知路径恢复;
c. 路径监测
空闲可用路径:UltraPath对空闲路径也会进行测试以提前发现路径的故障,避免造成无谓的IO失败重发;对于空闲路径测试的频度相对较低,目的是减小对业务IO的影响;
故障路径:UltraPath对于故障路径的测试频度相对较高,以尽可能早的感知路径恢复;
d. 负载均衡轮询算法
轮询(round-robin)算法,IO平均分摊到每条路径。
e. 负载均衡Least-io算法
Least-io算法,实时统计各路径的派对IO数,并将IO下发到当前派对IO数最小的路径。