Привет всем,

Темой для сегодняшней заметки стала задача, в рамках которой необходимо на сервере под AIX 7.2 перенести данные Oracle-базёнки со старой схд с медленными SAS-дисками, новую дисковую полку c модными/быстрыми NVMe-накопителями.

Главным условием и сложностью стало требование выполнить эту задачу без простоя базы данных.

В качестве решения было предпринято следующее: в текущие volume-группы добавляются новые LUN‘ы/диски с быстрой Hitachi.

+-------------------+
| Volume Group (VG) |
| +---------------+ |     +---------------+ 
| |   Old LUNs    | |     |   New LUNs    |
| |   hdisk15     | |  +  |   hdisk20     | 
| | (Slow Disks)  | |     | (Fast Disks)  |
| +---------------+ |     +---------------+
+-------------------+

Далее настраивается зеркалирование новых дисков со старыми в рамках volume-группы.

+--------------------------------------------------+
|                 Volume Group (VG)                |
| +---------------+              +---------------+ | 
| |   Old LUNs    |              |   New LUNs    | |
| |   hdisk15     | <Mirroring > |   hdisk20     | | 
| | (Slow Disks)  |              | (Fast Disks)  | |
| +---------------+              +---------------+ |
+--------------------------------------------------+

После завершения репликации старые диски удаляются из volume-группы.

+-------------------+
| Volume Group (VG) |
| +---------------+ |     +---------------+ 
| |   New LUNs    | |     |   Old LUNs    |
| |   hdisk20     | |  -  |   hdisk15     | 
| | (Fast Disks)  | |     | (Slow Disks)  |
| +---------------+ |     +---------------+
+-------------------+

Предварительно, чтобы добавить на сервер новые LUN‘ы, нужно узнать WWNN-адреса FC-карточек. Получаем их командой:

lscfg -vl fcs* | grep -i 'Network Address'
Network Address.............210000C0DD227189
Network Address.............210000C0DD22718B

Далее с этими данными идем в панель управления SAN-сетью и настраиваем зонирование. Затем на стороне дисковой системы создаем host-группы и новые разделы (Volume), после чего презентуем новые диски на подготовленные host-группы.

Если в вашем случае этим занимается другой администратор, просто передаем ему WWNN-адреса.

Системные партиции самого AIX размещаются на локальных дисках Power-системы и, как правило, организованы в volume-группу (например, rootvg). Эту volume-группу мы не будем изменять.

Перенос затрагивает только volume-группы, относящиеся к базе данных — datavg, oraindxvg, logindvg, backupvg. Однако для демонстрации я покажу концепцию только на одной VG. В случае с остальными группами команды и принципы остаются теми же.

После добавления нового диска, подключаемся на сервера по SSH и выполняем команду:

cfgmgr

Данная команда запустит процесс обнаружения и добавления новых устройств.

После рескана можно вывести актуальный список физических томов (PVs) с помощью команды:

bash-4.4# lspv
hdisk0          0004ff2b8d0f624d       rootvg          active
hdisk1          0004ff2b8d0f7069       rootvg          active
hdisk7          0004ff2b7c9ad9bc       datavg          active
hdisk12         0004ff2b7dabc1e4       logindvg        active
hdisk14         0004ff2b7c7c6e74       oravg           active
hdisk15         0004ff2b7df7facd       backupvg        active    <<--- Старый медленный диск 
hdisk20         none                   None                      <<--- Новый быстрый диск

Как видно из вывода, новый диск не имеет hash-ID и не привязан к какой-либо volume-группе.

Далее убеждаемся, что размер нового диска соответствует старому. Проверяется это командой:

getconf DISK_SIZE /dev/hdisk20
931840

Перед добавлением диска в группу необходимо изменить атрибут queue_depth для этого устройства:

chdev -a queue_depth=32 -l hdisk20

Зачем это нужно? Увеличение параметра queue_depth позволяет увеличить количество параллельных команд, исполняемых на диске, что может повысить производительность I/O. Однако это также может увеличить задержки отклика, поэтому важно найти баланс. Максимальное значение для queue_depth64.

Если требуется посмотреть текущий лимит - queue_depth, можно воспользоваться командой:

lsattr -E -l hdisk20 -a queue_depth
queue_depth 32 Queue DEPTH True+

Теперь добавляем новый диск в volume-группу backupvg:

extendvg backupvg hdisk20

Далее зеркалируем тома в данной группе:

mirrorvg backupvg hdisk20

Важно! Если тома большие, процесс зеркалирования может занять продолжительное время. Рекомендуется запускать команду через tmux или screen, чтобы при обрыве сессии процесс не остановился.

Для мониторинга текущей обстановки можем воспользоватся утилитами - iostat или topas. Запускать их лучще всего из соседней SSH сессии.

# Выполнит 5 итераций, каждые 2 секунды c выводом статистики по диску
iostat -D hdisk20 2 5 

# Мониторинг в реальном времени (по аналогии с top/htop)
topas -D

Также проверяем, что VG работает корректно:

lsvg -l backupvg
backupvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
jslog04             jfs2log    1       1       1    open/syncd    N/A
fslv29              jfs2       805     805     1    open/syncd    /backup

Значение LV STATE = open/syncd говорит нам, что логический том в порядке..

Другие возможные состояния, могут быть:

Состояние Значение
closed/syncd LV существует, но не используется (не смонтирован, не задействован). Все копии данных синхронизированы.
open/stale LV используется, но не все копии синхронизированы (например, после сбоя диска в зеркалированной VG). Нужно выполнить syncvg.
closed/stale LV не используется, и есть несинхронизированные копии. Обычно это после сбоя диска в зеркале.
unavailable LV недоступен (например, если диск вышел из строя). Требуется проверка lsvg -p <vg_name> и исправление.

Убедившись, что все работает корректно, начиваем ее разваливать VG. Убираем из зеркалирования старый диск:

unmirrorvg backupvg hdisk15

Затем удаляем старый диск из volume-группы:

reducevg backupvg hdisk15

И, наконец, удаляем устройство из системы:

rmdev -dl hdisk15

Таким простым способом мы мигрировали данные на новый диск без простоя.

По этому же алгоритму выполняем миграцию остальных volume-групп, после чего задача считается завершенной. 🚀