Содержание


Экранирование дисков системы хранения данных в IBM PowerHA SystemMirror 7.1

Comments

Недавно я столкнулся с интересной проблемой AIX Logical Volume Manager (LVM). Клиент сообщил, что не может восстановить резервный образ группы томов (volume group - VG) на чистый диск SAN (storage area network). Команда restvg выводила сообщение об ошибке ввода/вывода, а в log-файле LVM появлялась ошибка с кодом 47 EWRPROTECT, указывающая, что диск защищен от записи. Однако, проанализировав проблему, клиент и администратор сервера SAN-хранилища убедились, что никаких ограничений по записи на диске установлено не было.

Эта проблема озадачила меня, как и клиента. Я потратил несколько дней на ее исследование и в конце концов обнаружил источник. Причина крылась в реализованной в IBM PowerHA SystemMirror 7.1 новой функциональности экранирования дисков системы хранения данных, которая запрещала доступ к диску по записи.

Я понял, что эта функциональность является существенным изменением в PowerHA SystemMirror 7.1, но о ней упоминается, по-видимому, только в анонсе версии PowerHA SystemMirror 7.1 и в руководствах IBM Redbook®. Поэтому я хотел бы поделиться своими находками.

Сравнение пассивного режима группы томов и экранирования дисков системы хранения данных

В PowerHA 6.1 и предыдущих версиях при использовании групп томов с улучшенным одновременным доступом в режиме быстрого перехвата дисков (fast disk takeover) эти группы томов находятся в режиме полного доступа по чтению/записи (активном) на узле, владеющем группой ресурсов. Любой резервный узел имеет группы томов, подключенные в режиме доступа только по чтению (пассивном). Пассивный режим является LVM-эквивалентом экранирования диска.

Пассивный режим позволяет читать только область дескрипторов группы томов и первые 4 KБ каждого логического тома. Он не разрешает доступ по чтению/записи к файловой системе или логическим томам. Он также не поддерживает LVM-операции. Однако низкоуровневые команды, например dd, могут обойти LVM и выполнить запись на диск напрямую. После отключения групп томов с улучшенным одновременным доступом ограничение по записи на диски перестает действовать.

PowerHA SystemMirror 7.1 использует функциональность экранирования дисков системы хранения данных и предотвращает доступ по записи к диску на уровне драйвера SCSI-дисков AIX, исключая возможность выполнения низкоуровневых операций, таких как dd. Эта новая функциональность предотвращает повреждение данных из-за непреднамеренного доступа к общим дискам из нескольких узлов и защищает диски даже после отключения групп томов с улучшенным одновременным доступом.

Как PowerHA SystemMirror 7.1 использует функциональность экранирования дисков системы хранения данных

Функциональность экранирования дисков системы хранения данных является локальной для AIX-узла. Поэтому каждый узел в кластере PowerHA настраивает и управляет группой экранов для каждой группы томов с улучшенным одновременным доступом, управляемой PowerHA SystemMirror 7.1.

PowerHA SystemMirror 7.1 использует три вспомогательные программы (cl_vg_fence_init, cl_set_vg_fence_height и cl_vg_fence_term) для инициализации, управления и завершения экранирования дисков и группы экранов системы хранения данных. Драйвер SCSI-дисков AIX отклоняет доступ к диску по записи и возвращает ошибку EWPROTECT, когда диски экранированы с доступом только по чтению.

Приведенный ниже фрагмент log-файла hacmp.out показывает, как эта функциональность используется системой 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

    Интерфейсы sfwAddFenceGroup() и sfwSetFenceGroup() для группы экранов и экранирования дисков системы хранения данных AIX и команда 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 переходят в режим online, группы томов с улучшенным одновременным доступом подключаются в активном режиме, их экран устанавливается в режим "чтение/запись" и доступ к дискам по записи разрешается.
    +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 реализует жесткий контроль доступа к дискам по записи. Он вызывает команду cl_set_vg_fence_height с параметром rw, чтобы разрешить доступ по записи для всех своих команд, выполняющих запись на диски, а после завершения этих команд опять запрещает доступ по записи. Поэтому все LVM-операции для групп томов с улучшенным одновременным доступом PowerHA необходимо выполнять в меню PowerHA C-SPOC, в противном случае LVM-операции будут генерировать ошибку, аналогичную той, которая рассматривалась в начале статьи.

Но не все LVM-операции можно выполнить в меню C-SPOC PowerHA (например, вышеупомянутую команду 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

Ограничение

В настоящее время функциональность экранирования дисков системы хранения данных поддерживается только для MPIO-дисков (Multipath I/O). Для других типов дисков использование этой функциональности в PowerHA SystemMirror 7.1 может привести к появлению сообщений об ошибках. Такие сообщения об ошибках можно игнорировать.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=1015696
ArticleTitle=Экранирование дисков системы хранения данных в IBM PowerHA SystemMirror 7.1
publish-date=01222015