powerha 7.1_了解IBM PowerHA SystemMirror 7.1中的存储框架磁盘防护

最近,我遇到了一个有趣的AIX逻辑卷管理器(LVM)问题。 一位客户报告说,他无法将卷组(VG)备份映像还原到可用的存储区域网络(SAN)磁盘。 restvg命令显示一条I / O失败消息,并且LVM日志显示错误代码47 EWRPROTECT ,这表明该磁盘已被写保护 。 但是,当他与SAN存储服务器管理员检查了此问题时,他们确认根本没有对存储服务器的磁盘设置任何写保护限制。

这个问题使我和顾客感到困惑。 我花了几天的时间进行调查,最终确定了此问题的根本原因。 这是由于IBM PowerHA SystemMirror 7.1的新功能,即存储框架磁盘防护 ,它阻止了对该磁盘的写访问。

我意识到此新功能是PowerHA SystemMirror 7.1的一个重大更改,但似乎仅在PowerHA SystemMirror 7.1公告信和IBMRedbooks®中提到过。 所以,我想在这里分享我的研究。

比较卷组被动模式和存储框架磁盘防护

在PowerHA 6.1和早期版本中,在快速磁盘接管模式下使用增强的并发卷组时,在拥有资源组的节点上,VG处于完全读/写(活动)模式。 任何备用节点的VG在只读(被动)模式下均处于打开状态。 被动模式相当于磁盘防护的LVM。

被动模式仅允许读取卷组描述符区域和每个逻辑卷的前4 KB。 它不允许对文件系统或逻辑卷的读/写访问。 它还不支持LVM操作。 但是,低级命令(例如dd )可以绕过LVM并直接写入磁盘。 而且,当增强的并发卷组发生变化时,磁盘上将不再具有写保护限制。

PowerHA SystemMirror 7.1使用存储框架磁盘防护,并防止从AIX SCSI磁盘驱动程序层进行磁盘写访问,从而使较低级别的操作(例如dd )成功的可能性无效。 这项新功能可防止由于意外从多个节点访问共享磁盘而导致数据损坏,即使在增强的并发卷组发生变化后,它也可以保护磁盘。

PowerHA SystemMirror 7.1如何使用存储框架磁盘防护

存储框架磁盘防护功能是AIX节点本地的。 因此,PowerHA集群中的每个节点都为PowerHA SystemMirror 7.1管理的每个增强型并发卷组设置并维护了隔离区组。

PowerHA SystemMirror 7.1使用三个实用程序: cl_vg_fence_initcl_set_vg_fence_heightcl_vg_fence_term来初始化,管理和终止存储框架篱笆组和磁盘防护。 当磁盘被只读访问EWPROTECT时,AIX SCSI磁盘驱动程序拒绝磁盘写访问并返回EWPROTECT错误。

hacmp.out文件中的以下PowerHA日志显示了PowerHA SystemMirror 7.1如何使用此功能。

  1. 当PowerHA节点启动时, node_up事件调用cl_vg_fence_init来为所有增强的并发卷组添加一个存储框架篱笆组,并将增强的并发卷组中的所有磁盘设置为只读篱笆高度。 这样可以防止对磁盘的写访问。
    Dec 27 15:52:55 EVENT START: node_up hacmp93
    ...
    :node_up[256] : Setup VG fencing. This must be done prior to any potential disk access.
    :node_up[258] node_up_vg_fence_init
    ...
    :node_up:havg1[node_up_vg_fence_init:104] : Volume group havg1 is an HACMP resource
    :node_up:havg1[node_up_vg_fence_init:110] fence_height=ro
    ...
    :cl_vg_fence_redo[112] cl_vg_fence_init -c havg1 ro hdisk2
    ...
    cl_vg_fence_init[279]: sfwAddFenceGroup(havg1, 1, hdisk2)
    cl_vg_fence_init[385]: creat(/usr/es/sbin/cluster/etc/vg/havg1.uuid)
    cl_vg_fence_init[393]: write(/usr/es/sbin/cluster/etc/vg/havg1.uuid, 16)
    cl_g_fence_init[427]: sfwSetFenceGroup(vg=havg1, height=ro(2)  
            uuid=7b139a551bc137c92bd7e1a28905a901):
    ...
    cl_vg_fence_redo[113] RC=0

    用于AIX存储框架的篱笆组和磁盘防护的sfwAddFenceGroup()sfwSetFenceGroup()接口,并且AIX kdb命令可以显示存储框架中篱笆组和磁盘防护的详细信息。

    (0)> sfw_info
    sfw_info_t *sfw_info = 0x60D02C0
    struct anchor {
        int cfg_cnt = 0x2
        lock_t lock = 0xFFFFFFFFFFFFFFFF;
        void *entrypts = 0xF1000A0000A8A800
        sfwobjhdr_t *cluster_head = 0xF1000A1FC0BD6200
        sfwobjhdr_t *cluster_tail = 0xF1000A1FC0BD6200
        sfwobjhdr_t *node_head = 0xF1000A1FC0BD6D80
        sfwobjhdr_t *node_tail = 0xF1000A1FC0BD6D80
        sfwobjhdr_t *fgrp_head = 0xF1000A1FC0BD7A80 <- Fence group
        sfwobjhdr_t *fgrp_tail = 0xF1000A17D0F37200
        sfwobjhdr_t *disk_head = 0xF1000A0031042500 <- Disk Fencing
        sfwobjhdr_t *disk_tail = 0xF1000A17D0F34880
    ...
    
    (0)> sfwobjhd -l 0xF1000A1FC0BD7A80
    struct object_header {
        uint   type = 0x7
        uint   subtype = 0x0
        char   name = "havg1"  <- Set fence group name to VG name
        char   uuid = 0x7B139A551BC137C92BD7E1A28905A901
        void   *dptr = 0xF1000A1FC0B00420
        struct object_header *next = 0xF1000A17D0F37200
        struct object_header *link = 0xF1000A0031042500
    }
    object_header.dptr=0xF1000A1FC0B00420
    struct sfw_fencegroup_obj {
        uint  height = 0x2
        sfwobjhdr_t *head = 0x0
    }
    
    (0)> sfwobjhd -l 0xF1000A0031042500
    struct object_header {
        uint   type = 0x3
        uint   subtype = 0x0
        char   name = "hdisk2"
        char   uuid = 0x80EE86210C6F8A0CAC83D697E5041B6C
        void   *dptr = 0xF1000A0031042580
        struct object_header *next = 0xF1000A0031042600
        struct object_header *link = 0x0
    }
    object_header.dptr=0xF1000A0031042580
    struct sfw_disk_obj {
        dev_t  devno = 0x8000001800000001
        uint   state = 0x8017
        uint   type  = 0x1
        uint   height = 0x2
    ...
    (0)> scsidisk hdisk2
    	...
        ulong64_t state = 0x0000000000080002;
        ONLINE
    	FENCED    <- FENCED state prevents write access from SCSI disk driver
    	...
    	    struct sfw_dattrs_t &sfw = 0xF1000A0150736B50
    	    {
    	        uint64_t state = 0x10017;
    	        uint  local_state = 0x00000000;
    	        uchar dtype    = 0x1;
    	        uchar fheight  = 0x2;
    	        uchar rmode    = 0x201;
    	        uchar orig_rmode = 0x201;
    	        uchar raw_devsn  = 0xA059329A;
    	    };
    	...
  1. 在更改增强型并发卷组之前,VG的篱笆高度由cl_set_vg_fence_height设置为读写 。 然后, varyonvg命令可以工作,并且在被动变通后它会返回到“只读”,以防止再次进行磁盘写访问。
    :cl_pvo(0.123):havg1[849] varyonp havg1
    ...
    :cl_pvo(0.124):havg1[varyonp:271] : Make sure the volume group is not fenced. 
            Varyon requires read write access.
    :cl_pvo(0.124):havg1[varyonp:274] cl_set_vg_fence_height -c havg1 rw
    :cl_pvo(0.128):havg1[varyonp:275] RC=0
    ...
    :cl_pvo(0.128):havg1[varyonp:289] : Try to vary on the volume group in passive concurrent mode
    :cl_pvo(0.128):havg1[varyonp:291] varyonvg -c -P -O havg1
    :cl_pvo(0.717):havg1[varyonp:292] rc=0
    ...
    :cl_pvo(0.717):havg1[varyonp:345] : Restore the fence height to read only, for passive varyon
    :cl_pvo(0.718):havg1[varyonp:347] cl_set_vg_fence_height -c havg1 ro
    :cl_pvo(0.718):havg1[varyonp:348] RC=0
  1. 当PowerHA资源组联机时,增强的并发卷组将在活动模式下打开,并且它们的围栅高度设置为读写 ,并授予对磁盘的写访问权限。
    +rg1:cl_activate_vgs(0.103):havg1[vgs_chk:91] clvaryonvg -n havg1
    ...
    +rg1:clvaryonvg(0.038):havg1[807] : require read/write access. 
            So, set any volume group fencing appropriately.
    +rg1:clvaryonvg(0.038):havg1[809] cl_set_vg_fence_height -c havg1 rw
    +rg1:clvaryonvg(0.041):havg1[810] RC=0
    ...
    +rg1:clvaryonvg(0.255):havg1[1037] varyonvg -n -c -A -O havg1
    +rg1:clvaryonvg(0.773):havg1[1038] varyonvg_rc=0
  1. 增强的并发卷组的篱笆高度保持在读写模式下,直到资源组降落到另一个节点为止。 发生跌倒时,增强的并发卷组会发生变化,并且它们的围栏高度会更改为只读 。
    Dec 28 03:52:03 EVENT START: rg_move hacmp94 1 RELEASE
    
    +rg1:cl_deactivate_vgs:havg1[712] vgs_varyoff havg1 32
    ...
    +rg1:cl_deactivate_vgs(1.515):havg1[vgs_varyoff:281] (( 0 == 0 ))
    +rg1:cl_deactivate_vgs(1.515):havg1[vgs_varyoff:284] : successful varyoff, 
            set the fence height to read-only
    +rg1:cl_deactivate_vgs(1.516):havg1[vgs_varyoff:287] cl_set_vg_fence_height -c havg1 ro
    +rg1:cl_deactivate_vgs(1.519):havg1[vgs_varyoff:288] RC=0

    并且,接管资源组的节点中增强型并发卷组的篱笆高度从只读更改为读写 ,并且始终仅对活动节点授予对磁盘的写访问权限。

    +rg1:process_resources[3091] eval JOB_TYPE=DISKS ACTION=ACQUIRE HDISKS='"hdisk3"' 
            RESOURCE_GROUPS='"rg1' '"' VOLUME_GROUPS='"havg1"'
    ...
    +rg1:clvaryonvg(0.030):havg1[807] : require read/write access. 
            So, set any volume group fencing appropriately.
    +rg1:clvaryonvg(0.030):havg1[809] cl_set_vg_fence_height -c havg1 rw
    +rg1:clvaryonvg(0.033):havg1[810] RC=0
  1. 当在所有节点上停止PowerHA服务时,所有增强型并发卷组的篱笆高度都将设置为在所有节点上均为读写状态 。
    :node_down_complete[356] : The last node out turns off fencing on all nodes
    :node_down_complete[358] node_down_vg_fence_term
    ...
    :node_down_complete:havg1[node_down_vg_fence_term:81] 
            cl_on_cluster -P 'cl_set_vg_fence_height -c havg1 rw'
    :node_down_complete:havg1[node_down_vg_fence_term:89] return 0

    如果安装了AIX APAR IV65140,则将cl_vg_fence_term命令以终止所有节点中的磁盘防护。

存储框架磁盘防护的LVM操作问题

PowerHA SystemMirror 7.1对磁盘写访问实施严格的控制。 它使用rw选项调用cl_set_vg_fence_height命令,以允许对其所有需要写入磁盘的命令进行磁盘写入访问,并且当这些命令完成后,它将再次禁止磁盘写入访问。 它要求您对PowerHA C-SPOC菜单中的PowerHA增强的并发卷组执行所有LVM更改操作,否则您将遇到与我在本文开头提到的类似的LVM操作失败。

但是,并非所有LVM操作都可以在PowerHA C-SPOC内完成(例如,我提到的restvg命令)。 因此,有时您可能必须从PowerHA中删除增强的并发卷组,或者停止所有节点中的PowerHA服务来执行此操作。 现在,您可以使用cl_set_vg_fence_height命令打破磁盘防护,这是另一种方法,如下所示:

# cl_set_vg_fence_height
Usage: cl_set_vg_fence_height [-c] <volume group> [rw|ro|na|ff]

# cl_set_vg_fence_height -c havg1 rw

然后使用cl_getdisk检查磁盘防护状态。

# cl_getdisk hdisk3
Disk name:                      hdisk3
Disk UUID:                      4248df415c0e31c8 1f4d3e193d4548e9
Fence Group UUID:               25251b0a37f7a5cd f9c3e9bd4a7f2d8e (vg1)
Disk device major/minor number: 19, 5
Fence height:                   0 (Read/Write)
Reserve mode:                   513 ( )
Disk Type:                      0x01 (Local access only)
Disk State:                     32785

如果要终止磁盘防护组,则可以使用cl_vg_fence_term命令。

# cl_vg_fence_term
Usage: cl_vg_fence_term [-c] <volume group>

# cl_vg_fence_term -c havg1

# cl_getdisk hdisk3
Disk name:                      hdisk3
Disk UUID:                      4248df415c0e31c8 1f4d3e193d4548e9
Fence Group UUID:               0000000000000000 0000000000000000 - Not in a Fence Group
Disk device major/minor number: 19, 5
Fence height:                   0 (Read/Write)
Reserve mode:                   513 ( )
Disk Type:                      0x01 (Local access only)
Disk State:                     17

局限性

现在,仅多路径I / O(MPIO)磁盘支持存储框架磁盘防护功能。 对于其他磁盘类型,PowerHA SystemMirror 7.1使用此防护功能可能会导致错误消息。 您可以忽略这些类型的错误消息。

翻译自: https://www.ibm.com/developerworks/aix/library/au-aix-storage-powerha-system-mirror71/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值