在本文会介绍 AIX 中 MPIO hdisk 的 reserve_policy,以及通过对它的正确设置实现数据的共享及保护的方法。
在 SAN 技术日益普及的今天,提到 SAN 环境我们就会想到 – 数据高可用、I/O 高性能和数据在系统间共享等特性。当来自 SAN 中的 hdisk 在多个系统间共享时,我们通常会使用集群软件来保证它们之间数据的一致性。
但是如果在开发,测试环境中没有安装集群软件,或在生产环境中某个 hdisk 没有被定义到集群中,但又要使多个 AIX 系统共享它,此时数据的一致性又该如何实现的呢?在本文会介绍 AIX 中 MPIO hdisk 的 reserve_policy 属性,以及通过对它的正确设置实现数据的共享及保护的方法。
在一次去客户现场的时候,有一位负责测试开发的工程师问我:为了测试方便,他们将 SAN 环境中的 LUN 同时 mapping 给了多个 AIX 系统,这几个系统间没有配置 PowerHA 集群, 由哪一个 AIX ">系统使用这些 hdisk, 是靠手工来协调的。所以经常由于大意,两个 AIX 系统同时做了 varyonvg 的操作,将该 hdisk 上的卷组 (VG) 给激活,使得用裸设备的数据库会宕掉或起不来; 在 mount 起的文件系统上,明确记得已保存了的文件,当下次再用时找不到了,或内容丢失;有时侯文件系统突然间就不能写了,辛辛苦苦编写的东西转眼就消失了。有什么办法使这几个 hdisk,在多个 AIX 系统共享的同时,又阻止同一时刻对 hdisk 进行写操作,以避免上述情况的发生。
我当时告诉他们的办法是将 hdisk 的 reserve_policy 属性由缺省的 no_reserve 改为 single_path,卷组就只能在一个 AIX 上被激活了. 但是 I/O 的性能会有一定的损失.
随着存储技术和 AIX 系统的不断更新,现在大多数的设备和系统都支持 SCSI-3 系列命令。11545.html">我们有了既满足共享数据一致性要求,又能不损失 I/O 性能的方法。我为此进行了相应的测试,希望能够帮助分析类似错误发生的原因,找到解决问题的办法。下面将结果分享给大家.
AIX 技术术语介绍
MPIO: Multi-path Input Output, 多路径输入和输出 SCSI-3 PR: 表示 SCSI-3 Persistent Reservation. SCSI-3 PR 使用注册登记(Registration)和预约保护方式 (Reservation) 来实现多路径,多系统对共享 MPIO hdisk 的访问。 每个系统要先向 SCSI-3 设备进行注册登记自己的 PR 值,
然后以预约保护或共享的方式使用该设备。使用 SCSI-3 的 PR 预约保护在系统关机后保护还是有效的,这就是持续预约保护 (persistent reserve) 所在;而 SCSI-2 的保护在 AIX 系统关机后就无效了。 在 AIX 中 MPIO hdisk 的 reserve_policy 有如下几种:
无保护策略No Reserve reservation policy ( no_reserve)
如果系统中MPIO hdisk选择的是此保护策略的话,就意味该设备不受保护。任何可以识别到它的系统,都可以在任何时候进行I/O 访问。 并且 I/O可以通过多条路到达。 这是目前AIX系统内嵌的和SDDPCM多路径软件的缺省保护策略。
单路径排他保护策略 Exclusive Host Access single-path reservation policy (single_path)
它使用的是SCSI-2的保护策略。 使用该保护策略时,尽管MPIO hdisk 的 所有路径都是打开的, 但只在一条路做了SCSI-2的保护,I/O 请求只能通过这一条路径到达。 当选中的路径发生问题时,该路径保护被释放; 在其他备选路径中重新选择一条,再加上 I/O保护, 所有的I/O请求转到新路径上。多路径的特性没有被充分利用,损失了I/O 性能。
持续排他预约保护策略Persistent Reserve Exclusive Host Access reserve policy (PR_exclusive)
如果AIX系统中的 MPIO hdisk 设置的是此预约保护策略,表示该hdisk 的访问保护是由一个 SCSI-3 PR 值来控制的,任何AIX系统如果注册登记了与hdisk的当前预约保护PR值相同的话,就可以访问此它。 通常我们要为每个AIX系统的MPIO hdisk设置一个唯一的PR值,不同的系统应设置不同PR值。这样就能很容易知道当前谁在使用该hdisk. 由于MPIO hdisk的所有路径注册的PR值是相同的,这样I/O 请求就被发送到MPIO hdisk的所有路径上,可以提高数据访问的性能。这是在非并发,非集群环境中应该为MPIO hdisk选择的保护策略。我们可以用 pcmquerypr 命令来检查hdisk 所使用的保护策略(resrvpolicy)和已注册登记的PR值(Key0)。由于该hdisk使用的是 PR_exclusive保护策略,只能注册一个PR值。
#pcmquerypr -Vh /dev/hdisk8connection type: fscsi0open dev: /dev/hdisk8Attempt to read reservation key...Attempt to read registration keys...Read Keys parameter Generation : 196 Additional Length: 8 Key0 : 0x00000000000ABCD3resrvpolicy= PR_exclusiveReserve Key provided by
current host=0xabcd3 (hex)0xabcd3Reserve Key on the
device: 0x00000000000ABCD3Reservation key type: 0x5Reserved by the current host with 0xabcd3
持续共享预约保护策略Persistent Reserve Shared Host Access reserve policy (PR_shared) 如果系统中的 MPIO hdisk 选择的是此保护策略,表示hdisk 是可共享访问的.无论哪个系统只要是使用了SCSI-3 PR值进行了注册登记,并且reserve_policy=PR_shared就可以访问此MPIO hdisk。 在并发的集群环境中选择此策略来设置在多个AIX系统间共享的hdisk。 我们可以用 pcmquerypr 命令来检查hdisk 所使用的保护策略(resrvpolicy)和已注册登记的PR值(Key0,Key1)。由于该hdisk使用的是 PR_shared保护策略,所以能注册多个PR值。
#pcmquerypr -Vh /dev/hdisk8connection type: fscsi0open dev: /dev/hdisk8Attempt to read reservation key...Attempt to read registration keys...Read Keys parameter Generation : 229 Additional Length: 16 Key0 : 0x00000000000ABCD3 Key1 : 0x0000000000009876resrvpolicy= PR_sharedReserve Key provided by current host = 0x9876 (hex)0x9876Device is shared by the current host with reserve_type 7 系统是否支持 SCSI-3 的 PR 保护策略,与所连接的存储设备驱动程序及多链路软件有关。在 AIX 中可以使用 lsattr 命令来检查。若命令输出中包含 no_reserve, single_path,PR_exclusive 和 PR_shared 表示此 hdisk 支持 SCSI-3 PR 和 SCSI-2 保护策略;若 lsattr 命令输出只有 no_reserve, single_path, 表示此 hdisk 只支持 SCSI-2 的保护策略。