ALUA

原文链接:

http://www.pearsonitcertification.com/articles/article.aspx?p=2819032

本文节选自Storage Design and Implementation in vSphere 6: A TechnologyDeep Dive, 2nd Edition 一书,帮助大家了解如何区分各种ALUAAsymmetric Logical Unit Access)配置以及不同配置如何影响主机。

存储阵列根据其类别和设计提供各种配置和功能。根据阵列如何处理设备 I/O,可将其分类如下:

  • Active/Active  -- I/O 可以通过任何存储处理器(storage processor, SP)和端口发送到逻辑单元号(LUN)。 这些阵列中的大多数都具有较大的缓存,I/O 在缓存中的 LUN 上完成,然后写 I/O 被异步刷新到物理磁盘。
  • Active/Passive  --  I/O 只能发送到拥有 LUN 的存储处理器上的端口(也称为 active SP)。 如果尝试通过“non-owner”处理器(也称为 passive SP)上的 LUN 和端口做 I/O,则该LUN会向启动器返回一个错误,即“ No entry ”或“No, you can’t do that.“(我在第7章” Multipathing and Failover.“中提供了实际的sense code。)
  • Pseudo-active/Active  --(也称为asymmetric active-active)I/O可以发送到任一存储处理器的端口上。 但是,由于I/O从每个SP到达设备的路径不同,发送到owner SP的I/O比发送到 non-owner SP的I/O速度更快。 通过non-owner SP涉及到通过一些后端通道发送I/O,而通过 owner SP 则是直接路径。

后两种类型的阵列最近开始起草被称为非对称逻辑单元访问(ALUA)的SCSI-3规范。它允许通过两个SP访问阵列设备,但清楚地向发起者标识哪些目标在ownerSP以及哪些目标位于non-owner SP上。vSphere 4.0首次引入ALUA支持

ALUA定义

T10 SCSI-3规范SPC-35.8节中介绍了ALUA(请参阅www.t10.org/cgi-bin/ac.pl?t=f&f=spc3r23.pdfALUA的官方描述如下:

当一个端口的访问特性可能不同于另一个端口的访问特性时,会发生非对称逻辑单元(ALUA)访问。

简而言之,ALUA指定了一种存储设备,它能够在两个不同的存储处理器上以不均匀的方式为给定的LUN提供I/O服务。

如前所述,使用ALUA,可将给定LUNI/O发送到存储阵列中任何SP的可用端口。这更接近非对称主动/主动阵列(asymmetric active/active array)的行为,而不是主动/被动阵列(active/passive array)的行为。从I/O 到 LUN,owner SP的性能优于non-owner SP的性能。为了让 initiator确定哪些target 能提供最佳I/O,每个SP上的端口被划分成到同一个目标端口组(target port grouptpg)中。每个tpg都有一个独特的stateasymmetricaccess state [AAS]),表示一个SP上的端口与另一个SP上的端口相比的optimization状态(例如,active-optimized vs active-non-optimized)。

ALUA Target Port Groups

根据SPC-3 规范target port groupTPG)描述如下:

目标端口组(tpg)被定义为一组始终处于相同asymmetric access state的目标端口。目标端口组非对称访问状态(targetport group asymmetric access state)被定义为目标端口组(tpg)中的目标端口集合所共有的目标端口非对称访问状态。目标端口的分组是由存储厂商决定的。

这仅仅意味着在给定的存储阵列中,例如,有两个SPSPASPBSPA上的端口被分为一组,SPB上的端口被分为另外一组。假设此存储阵列向E主机中的启动器提供两个LUNLUN 1LUN 2,并且LUN 1SPA拥有,LUN 2SPB拥有。对于主机E,最好通过SPA访问LUN 1并通过SPB访问LUN 2相对于LUN 1SPA上的端口位于主动优化(active-optimizedAOTPG中,而SPB上的端口位于主动非优化(active-non-optimizedANOTPG中。在本例中,LUN 2的情况正好相反,SPA上的TPGANOSPB上的TPGAO

6.1展示了这个非对称主动/主动阵列asymmetric active/active的例子。 ID = 1TPGSPA上的左侧矩形)为LUN1 的AO(由TPG1到 LUN 1的实线表示)。同时TPG1 LUN2 ANO (由TPG 1LUN 2的虚线表示)。

图6.1 TPG 图例

对于ID = 2TPG来说正好相反它是LUN 2 的 AOLUN1 ANO

在某些active/passive ALUA阵列上,您可能会看到non-ownerSP上的TPG是Standby非对称访问状态(AAS而不是 “ANO”

Asymmetric Access StateAAS)

对于给定的LUNALUA TPG中的端口可以始终处于相同的AAS中。TPGAAS 作为REPORT TPGS命令请求的返回值报告给initiator TPG描述符在该返回值的byte 1中。

可能的状态如下:

Active-optimizedAO - 该端口组位于 owner SP上,为LUN提供最佳I/OActive-non-optimizedANO - 该端口组位于non-owner SP上。AO AAS相比,LUNI/O不太理想。

TransitioningTPG AAS正在从一个状态切换到另一个状态。例如,如果AO TPGSP正在reboot或 offline,或者SANstorage area network)管理员手动切换LUN的所有权(在EMC CLARiiON上,这称为trespass),将备用SP 上 TPGAAS 修改为AO在这个过程中,TPG AAS处于transitioning状态。

TPG处于这种状态时,来自initiator的请求会被返回BUSYCHECK CONDITION,其中sense key  为 NOT READYASCadditional sense code) LOGICALUNIT NOT ACCESSIBLE LOGICAL UNIT NOT ACCESSIBLE 

Standby此状态与非ALUA配置中的某个passiveSP以及某些支持ALUA的阵列类似。它返回CHECKCONDITION,其中 sense key为 NOT READY。

TPG处于该AAS中时,它在AO AAS中支持以下命令子集:

INQUIRY

LOG SELECT

LOG SENSE

MODE SELECT

MODE SENSE

REPORT LUNS (for LUN 0)

RECEIVE DIAGNOSTIC RESULTS

SEND DIAGNOSTIC

REPORT TARGET PORT GROUPS

SET TARGET PORT GROUPS

REQUEST SENSE

PERSISTENT RESERVE IN

PERSISTENT RESERVE OUT

Echo buffer modes of READ BUFFER

Echo buffer modes of WRITE BUFFER

Unavailable当硬件错误或由于其他SCSI设备的限制,TPGLUN的访问受到限制时,通常会看到此AAS。错误消失之前,此状态下的TPG无法转换到AOANO

一些经vSphere 6认证的ALUA存储阵列可能不支持后三种状态。

ESXi6I/O发送到AO AASTPG,但如果它们不可用,则将I/O发送到ANO AASTPG如果存储阵列在ANO AAS上的TPG上接收到持续I/O,则阵列会将TPG的状态转换为AO AAS谁进行此项转换取决于存储阵列的ALUA管理模式(请参阅下一节)。

ALUA 管理模式

multipathfailover的动态特性需要灵活管理和控制ALUA TPGAAS这通过一组命令以及和存储阵列的交互来完成。这些命令如下所示:

  • INQUIRY—根据SPC-3的第6.4.2节,响应此命令,存储阵列返回VPD(vital product data)或EVPD(extended vital product data)的某些page。 存储阵列响应此命令并返回的查询数据包括TPGS字段。 如果该字段中的返回值不为零,则该设备(LUN)支持ALUA。 (关于TPGS字段值和AAS管理模式之间的相关性,请参阅本章后面的表6.3。)
  • REPORT TARGET PORT GROUPS (REPORT TPGs)—该命令请求存储阵列将TPG信息发送给启动器。
  • SET TARGET PORT GROUPS (SET TPGs)—该命令请求存储阵列设置指定TPG中所有端口的AAS。 例如,TPG的AAS可以通过SET TPGs命令从ANO转换到AO。

ALUAAAS的控制或管理可以使用以下四种模式中的一种(见表6.1):

Table 6.1 ALUA AAS 管理模式

Mode

Managed By

REPORTPGs

SET TPGs

Not Supported

N/A

Invalid

Invalid

Implicit

Array

Yes

No

Explicit

Host

Yes

Yes

Both

Array/host

Yes

Yes

  • Not Supported—对REPORT TPG和SET TPG命令的响应无效。 这意味着存储阵列不支持ALUA,或对于EMC CLARiiON,initiator 未配置为支持ALUA的模式。
  • Implicit—阵列能响应REPORT TPG,但不响应SET TPGs命令。 在这种情况下,设置TPG的AAS只能由存储阵列来完成。
  • Explicit—该存储阵列可以响应REPORT TPG和SET TPGs命令。 在这种情况下,设置TPG的AAS只能由initiator完成。
  • Both—与Explicit相同,但存储阵列和initiator都可以设置TPG的AAS。

ALUA Common Implementations

ALUA AAS和管理模式的组合因厂商而异。6.2显示了一个常见组合矩阵。

表6.2常见 ALUA 实现 

Mode

AO

ANO

Standby

Array Vendor Example

Implicit

Yes

Yes

No

NetApp

Explicit and Implicit

Yes

Yes

No

HP EVA
VNX or CLARiiON CX

Explicit

Yes

No

Yes

IBM DS4000

ALUA Followover

为了更好地解释ALUA followover,我首先描述一下没有它的情况。使用active/passive阵列的存储设计必须考虑防止路径抖动(path thrashing),这是由于设计不良或物理故障导致某些主机只能访问一个SP,而其他主机选择另一个SP/或不正确的路径选择插件(Path Selection Plug-inPSP)。我在两个场景中看到了这种情况,这些场景将在以下各节中介绍。

路径抖动场景一

6.2显示了非ALUA active/passive阵列的FCSAN设计。这里主机A只能访问SPA,主机B只能访问SPB LUN 1SPA拥有。但是,由于主机B无法访问该SP,因此它会从c存储阵列请求将LUN所有权转移给SPB阵列同意后,结果主机A失去对LUN的访问权限,因为它不再由SPA拥有。主机A尝试通过请求存储阵列将LUN所有权转移回SPA来恢复状态。阵列同意时,主机B再次启动该循环。这种拔河问题会一直持续下去,两台主机都不能在LUN上发出任何I/O

解决此问题的唯一方法是纠正设计,使得每个主机都可以访问两个SP并使用VMW_PSP_MRU可插拔存储架构(Pluggable Storage ArchitecturePSA)插件。请注意,仅启用ALUA而不纠正设计可能无法防止此类问题。

6.2场景1:由于布线设计选择不当导致的路径抖动

路径抖动场景2

 6.3显示了场景1的一个变种,其中FC 结构根据VMware最佳实践设计。但两台主机都配置了 VMW_PSP_FIXED 而不是VMW_PSP_MRU。这本身不会导致路径抖动。但是,设计人员决定对每个主机进行自定义,以便它们对LUN1具有不同的首选路径。这些首选路径设置由虚线表示(主机A的路径和主机B的另一路径)。此配置中的预期行为是,只要定义的LUN 1的首选路径可用,主机就会一直通过该路径发送I/O。因此,主机A尝试通过SPA将其I/O发送到LUN 1,主机B通过SPB发送它的I/O。但是,LUN 1SPA拥有,尝试通过SPB发送I/O会产生sense key为ILLEGAL_REQUEST 的 check condition(第7章中的更多内容)。主机B坚持通过其首选路径发送I/O。因此,它会向存储阵列发送START_UNITTRESPASS命令。因此,该阵列将LUN 1所有权转移给SPB。现在主机A变得非常不安,并使用START_UNITTRESPASS命令告诉阵列将LUN转交给SPA阵列同意,拔河开始!

6.3场景2:由于糟糕的PSP设计选择导致的路径抖动

防止路径抖动

这两个例子促使VMware创建用于active/passive阵列的VMW_PSP_MRU插件。 在旧版本中,在ESX4.0之前,这是每个LUN的策略设置。 4.0和更高版本中,包括6.0和6.5,MRU是一个PSA插件。 (我描述第7章中的PSP设计选择)。通过MRU,主机将I/O发送到最近使用的路径。 如果LUN控制权转移到另一个SP,那么I/O会通过新路径发送到该SP,而不是发送给是前所有者的SP。 请注意,MRU会忽略首选路径设置。

owner SP上的TPG提供AO AAS,为non-owner SP上的TPG提供AO AASALUA存储阵列允许通过AO TPG以高优先级对给定LUN进行I / O,相反,也允许通过ANO TPG提供较低优先级。这意味着如果通过non-owner SP发送给LUNI/O,后者不会返回sensekey 为ILLEGAL_REQUEST的check condition这意味着对这些阵列使用VMW_PSP_FIXED可能导致较轻的路径抖动。在这种情况下,如果这条路径是首选路径,则发送到ANO TPG的 I/O不会失败但是,与使用AO TPG相比,I/O性能要低得多。如果有更多主机将AO TPG用作首选路径,则LUN所有权保留在拥有它的原始SP上。因此,对于违规主机,ANO TPG不会转换为AO

为了适应这种情况,VMware推出了一项用于ALUA设备的新功能; 但是,它并未在ALUA规范中定义。这个特征被称为ALUA followover.

ALUAfollowover只是意味着,当主机检测到TPG AAS变化并非由自己造成时,即使只能访问属于ANOTPG,也不会尝试恢复。实际上,这可以防止主机为TPG AAS而战,相反,他们会遵循阵列的TPG AAS6.46.5说明了ALUA followover与TPG AAS的相互作用。

6.4失败前的ALUA followover

6.4显示了一个逻辑存储图,其中交换机结构已被删除以简化图。这里,TPG ID 1AO 状态的 SPA,两台主机都将I/O发送到该TPGTPG ID 2ANO,并且I/O不发送给它。这些TPG使用ALUA显式模式进行配置。

6.5显示了通向AO TPG的路径失败后发生的情况。

6.5显示主机A失去了通往AO TPG的路径(基于图6.4)。因此,该主机利用阵列上的ALUA显式模式并向该阵列发送SET_TPGS命令,以便将TPG ID 2更改为AO,并将TPG ID 1更改为ANO主机B发现到不是自己做这个的改变。但是因为启用了ALUA followover功能,所以主机B只接受此更改并且不尝试将其反转。因此,I/O被发送到TPG ID 2,因为它现在是AO TPG(请注意,阵列将LUN所有权移至SPB,因为它是AO TPG

6.5失败后的ALUA followover

注意

ALUA followover是在存储阵列上配置的设备设置。默认设置取决于厂商和存储设备型号。

一些存储阵列实现PREF(首选项)位,该位使阵列能够指定哪个SP是给定LUN的首选所有者。这允许存储管理员将LUN分散到两个SP上(例如,偶数LUN 位于一个SP上,奇数LUN位于另一个SP上)。每当需要关闭其中一个SP时,该SP拥有的LUN(如SPA)就会转移到尚存的非优选SPSPB)。因此,SPB上的端口组的AAS变为AO ALUA followover将承认此更改并将传输给该LUN的下一个I/O发送到SPB上的端口组。当SPA重新联机时,它曾经拥有的LUN将被转移给它。这反转了先前所做​​的更改,并且SPA上的端口组的AAS被设置为AO。相反,SPB上不再拥有LUN的端口组的AAS更改为ANO。同样,ALUAfollowerover 执行此更改并将I/O切换回SPA上的端口组。这是支持ALUAHP EVA存储阵列的默认行为。


原文地址:

http://www.pearsonitcertification.com/articles/article.aspx?p=2819032

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值