Как оторвать зеркало в VxVM?
14.05.2009
При выполнении сложных работ, в результате которых могут быть потеряны данные или нарушена работа приложений можно воспользоваться отключением «подзеркала» томов в VxVM, в случае проблем можно затем быстро подняться с оторванного подзеркала. В случае, когда объемы данных значительны, а окно для выполнения работ ограничено, то восстановление из бэкапа может привести к нарушению SLA. А такой способ является простым, быстрым и надежным ;)
Итак, пусть у нас есть дисковая группа DG01, каждый том имеет по два зазеркалированных плекса. Плексы располагаются на 2 массивах (ARRAY_01 и ARRAY_01) и сабдиски имеют в своем названии эти имена (на самом деле это не обязательно, это нужно лишь чтобы отгрипать плексы, а как вы их разделите — это ваше дело, хоть руками ;)
1. Для начала убедимся, что у нас все тома имеют больше одного плекса и они все активны:
vxprint -g DG01 -v -F "%name" -e "v_pl_num < 2 "
vxprint -g DG01 -p | grep DISABLE
2. создаем 2 файла, в первом — основные плексы, во втором — те, которые будем отрывать.
vxprint -g DG01 -p -F "%vol %plex %aslist" | egrep 'ARRAY_01' > /tmp/dg_pl_1.txt
vxprint -g DG01 -p -F "%vol %plex %aslist" | egrep 'ARRAY_02' > /tmp/dg_pl_2.txt
Убедимся, что поделилось все правильно:
cat /tmp/dg_pl_1.txt |wc -l
cat /tmp/dg_pl_2.txt |wc -l
3. Останавливаем все приложения и отмонтируем файловые системы, использующие тома (или переводим Oracle в режим «begin backup»). Ну или если ваше приложение имеет механизмы восстановления, то можно ничего и не делать.
4. Отрываем плексы:
cat /tmp/dg_pl_2.txt | awk '{ print "vxplex -g DG01 det " $2 }' | sh
5. Примонтируем файловые системы, поднимаем приложения, переводим Oracle в «End backup». Ну и делаем все что мы хотели, типа ставим патчи, изменяем стурктуру таблиц итд.
6. Проверяем. Если все в порядке, то приаттачиваем подзеркало и забываем о этой процедуре до следующего апдейта. Если нет, переходим к пункту 7.
cat /tmp/dg_pl_2.txt | awk '{ print "vxplex -g DG01 att " $1 " " $2 }'| sh
Если же все плохо, то нужно сделать переключение на подзеркало:
7. Останавливаем все приложения и отмонтируем файловые системы, использующие тома. Останвливаем тома:
cat /tmp/dg_pl_2.txt | awk '{ print "vxvol -g DG01 stop " $1 }' | sh
8. Отрываем от тома активный плекс (это нужно, чтобы быстрее поднять тома, иначе — начнется процесс зеркалирования, который может нам помешать):
cat /tmp/dg_pl_1.txt | awk '{ print "vxplex -g DG01 dis " $2 }' | sh
9. Исправляем статус оствшегося плекса со «STALE» на «CLEAN»
cat /tmp/dg_pl_2.txt | awk '{ print "vxmend -g DG01 fix clean "$2 }'
10. Стартуем тома:
vxvol -g diskgr2 startall
11. Примонтируем все файловые системы и запускаем приложения.
12. Ну и теперь можно и запустить зеркалирование:
cat /tmp/dg_pl_1.txt | awk '{ print "vxplex -g DG01 att " $1 " " $2 }' | sh