Привет всем,
Темой для сегодняшней заметки стала задача, в рамках которой необходимо на сервере под 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_depth
— 64.
Если требуется посмотреть текущий лимит - 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-групп, после чего задача считается завершенной. 🚀