在SAN环境中如何使共享hdisk保持数据一致性

在本文会介绍 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 的保护策略。

时间: 2024-10-23 20:29:05

在SAN环境中如何使共享hdisk保持数据一致性的相关文章

XML在Domino环境中的应用研究

dom|xml 摘 要:提出利用XML在Domino环境下实现供应链内各成员企业物流信息交换,并给出一个应用实例. 关键词:物流信息:XML:Domino:供应链 1 引 言 物流计划和执行的过程是一个企业内部各部门之间,乃至与供应链上下游合作伙伴之间的流程协作过程,因而,物流信息通常需要实现跨部门.跨企业流动,以便使业务伙伴之间可以像企业内部部门之间那样实现补货.运输.采购.订单处理等流程协同化工作,实现面向物流流程的协作.这必须要以物流信息协作为基础.然而,由于供应链中各成员企业相互独立,其

在团队开发环境中使用 Visual Studio .NET (二)

脱机时签入文件 不可能在脱机时签入文件:因为您未连接到网络,签入命令未启用.这是故意设置的,这样可以在项目重新联机时方便地查看哪些文件在脱机时被签出. 进入联机状态 这与进入脱机状态基本上相同.若要使解决方案及其项目联机,请在"File"菜单上,单击"Source Control",然后单击"Change Source Control...".显示的对话框与进入脱机状态时相同.选择"Connected"即可使解决方案和项目联机

在 Intranet 环境中保护 .NET Web 应用程序

web|程序 Microsoft Corporation内容简介 基于 Intranet Web 应用程序的安全性并不是不重要,因为它存在于许多控制网络中,并且对一个限制集合中的用户是可以访问的.不同个体和部门可能需要对应用程序提供的功能和数据有不同的访问等级,所以在传输过程中仍然必须保护机密数据的安全性.为了使问题复杂化,应用程序的安全性结构必须补偿任何安全性相关的问题,这些问题源于存在的基础和要配置应用程序的 Intranet 的操作特点. 通过关注某些常用分布式应用程序结构的要求,本章介绍

Win 2003环境中设置一个Web服务器

  概要 本文介绍了如何在 Windows Server 2003 环境中设置一个用于匿名访问的WWW服务器. 安装 Internet 信息服务 Microsoft Internet 信息服务 (IIS) 是与Windows Server 2003 集成的 Web 服务. 要安装IIS.添加可选组件或删除可选组件,请按以下步骤xx作: 单击开始,指向控制面板,然后单击"添加或删除程序". "添加或删除程序"工具就会启动. 单击添加/删除 Windows 组件. 显示

生产环境中的容器之工作流

本文讲的是生产环境中的容器之工作流,[编者的话]很多公司已经在生产环境里大规模使用容器.前一篇文章里介绍了Spotify,DramaFever,Built.io和IIIEPE如何以及为什么使用容器.本文继续深入讨论这几个公司的工作流. 构建应用程序以及管理pull请求 在生产环境使用容器的一大吸引人之处是创建无缝的开发到生产环境的能力,最先代码在开发人员的笔记本上,然后能够整体移动到测试环境,并且随后直接部署,而不会因为底层基础架构环境的改动而导致问题. IIIEPE怎么做 Luis Elizo

《DB2性能管理与实战》——2.6 DB2 pureScale环境中内存管理

2.6 DB2 pureScale环境中内存管理 DB2性能管理与实战 本节将要介绍与pureScale特性相关的内存管理,可以对比前面的单节点环境下的内存管理,来分析它们之间的异同点.本节为学习后续章节中的相关案例奠定了基础. 2.6.1 集群高速缓存设施 在DB2 pureScale环境中,又引入了集群高速缓存设施(CF),CF将不同内存堆用于以下用途. 1.组缓冲池内存 组缓冲池内存被用于DB2pureScale实例的组缓冲池.如果以一致方式将此类型的内存用至最大已配置能力,那么可能会对性

在生产环境中使用Docker必须注意的事情

本文讲的是在生产环境中使用Docker必须注意的事情,[编者的话]本文以最近非常火的希特勒怒喷Docker的视频为线索,详细分析了Docker存在的一些问题和弱点,以及在生产环境中使用Docker所要注意的方面.这些问题包括隔离性.镜像安全.Docker缺省配置.发布及部署:文章的最后分析了微软最近在容器支持方面的动作. 我们不能否认Linux容器是一个非常强大的概念,它组合了众多优秀的Linux内核功能和Docker开源工具,任何背景知识的开发者都很容易使用. 在2016年容器峰会上,Brya

IFTTT在开发环境中使用Docker的经验

本文讲的是IFTTT在开发环境中使用Docker的经验,[编者的话]IFTTT是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便,其宗旨是"Put the internet to work for you"(让互联网为你服务).Docker在IFTTT中也在开发实践,以下是Nicholas Silva的一些介绍. IFTTT是一款新兴的互联网工具型应用,正如他们给自己的介绍"If This Then T

Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍

本文讲的是Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍, 前言 建议阅读本文之前,你对ARM组件的有个基本了解,本文会先为你介绍32位Linux环境中进程的内存布局,然后再介绍堆栈和堆相关内存损坏的基本原理以及调试方法. 本文中使用的示例是在ARMv6 32位处理器上编译的,如果你无法访问ARM设备,可以点击这里https://azeria-labs.com/emulate-raspberry-pi-with-qemu/创建自己的实验环境并在虚拟机中模拟Raspberry Pi发