Xen: конвертировать изображение в lvm с минимальным временем простоя
Мои цели:
- Конвертируйте все мои DomU из изображений на основе lvm
- Минимальное время простоя
- Минимальное влияние на производительность на других DomUs/Dom0
Мой план / настройка:
Все мои изображения находятся в большом lvm-томе, все lvs для новой настройки создаются с файловой системой (ext3/ext4). Так что мой подход - сделать это для каждой машины:
- сделать снимок большого изображения-лв
- смонтировать этот снимок (например, на
/tmp/img_snap/
) - шлейф-монтировать сам образ (например, на
/tmp/convert_src/
) - смонтировать новый lv (например, на
/tmp/convert_dest
) - Rsync из
/tmp/convert_src
в/tmp/convert_dest
- размонтировать все
- удалить lv-снимок
- закрытие DomU
- повторите шаги 1-7
- изменить настройки диска в конфиге DomU
- разжечь дом снова
Шаги 1-7 уже записаны в сценарии, поэтому на шаге 9 я просто могу снова запустить этот сценарий. Это означает немного накладных расходов, потому что lv-snapshot не нужен, но я в порядке и знаю об этом.
Из-за того, что исходный компьютер может работать до шага 8 (а шаг 9 должен копировать только дельту), время простоя должно быть минимальным. Я также renice
а также ionice
процесс (ы) rsync, поэтому влияние на все другие системы должно быть минимальным. Или так я думал...
- Debian Lenny
- Xen 3.2 из Debian
- HP ML350 G5 с контроллером SmartArray (iirc: e220?)
- диски подключены через SATA
Вопросы / Проблемы:
- Этот подход приемлем и протестирован с небольшими изображениями, но у меня есть несколько больших изображений 400 ГБ +. Это занимает много лет. Есть ли лучшие подходы?
- Иногда - я точно не знаю, почему - загрузка Dom0 сильно возрастает, машина зависает, и я получаю сообщения вроде
INFO: task loop27:23352 blocked for more than 120 seconds
,INFO: task pdflush:7329 blocked for more than 120 seconds.
... и их следы вызова и прочее. Почему / когда? Я не могу понять шаблон? Есть слишком много ввода-вывода, слишком процессор? И больше всего: почему не блокируются мои rsync-процессы - я обслужен (renice 20 -p $(pidof rsync)
) и ионизированный (ionice -c2 -n7 -p$pid
) их - не должны ли эти процессы быть первыми заблокированными? - Вообще какие-то намеки и идеи по улучшению?
1 ответ
rsync - очень хороший инструмент. Если вы используете его, выберите опцию "-aSH --delete", чтобы вы получили почти одинаковую цель (ctime-штампы софт-ссылок будут иметь текущее время).
Из вашего письма я понимаю, что время, необходимое для rsync, кажется, является вашей главной проблемой, в то время как завершение / запуск DomUs довольно быстр (включая их приложения, я полагаю).
Я вижу еще одну проблему в вашем снимке вашего большого LV, содержащего все ваши работающие DomU. Если у вас много запросов на запись, ваш снимок будет заполняться довольно быстро - и снимок будет замедлять работу DomU во время записи.
В этой ситуации я бы выбрал другой подход: используйте программный рейд 1 для зеркального отображения ваших изображений в новые LV.
Если вы хотите, вы можете объединить это с snapshot/rsync, чтобы уменьшить объем данных, которые необходимо переместить. Но ИМХО, время, необходимое для того, чтобы разобраться и написать сценарий, не стоит усилий.
Итак, вот план - в обоих случаях вам нужны блочные устройства (монтируйте петлевые образы):
A) Использование md (настройка через mdadm). Напишите скрипт для:
- Выключи ДомУ
- Loopback-монтировать образ DomUs
- Создайте ухудшенное устройство md-raid-1-device с этим образом
- Загрузите ваш DomU с "phy:mdN" в качестве нового дискового устройства
- Увеличьте количество участников raid 1 с 1 до 2
- добавить цель LV
- Измените настройку вашего DomU, чтобы в будущем он использовал phy:vgX/lvY
- Если зеркало завершено, перезапустите DomU с новой настройкой
В соответствии с планом А у вас есть два простоя, продолжающиеся один перезапуск DomU. Зеркальное отображение будет происходить на заднем плане как можно быстрее.
Недостаток: все данные будут синхронизированы (зеркало RAW, не основанное на файловой системе)
Вы можете обойти это, создав md-raid1 с (--assume clean) без ухудшения качества. Но это будет непросто (вам понадобится rsync для передачи ваших данных в LV, а затем для зеркалирования дельты с помощью md-bitmap).
Б) Использование drbd (настраивается через /etc/drbd.conf). Если вы планируете в будущем перейти на drbd, вы должны пойти по этому пути. Я не проверял это, но не вижу причины, по которой drbd не должен отражаться между 127.0.0.1 и 127.0.0.2;-)
Я не проверял это, но это должно работать - и это более сложно, чем план А.
Недостаток: сложный, не проверенный.
Но: Если вы все равно хотите переключиться на drbd, вы можете подготовить свой DomU таким образом. Запустите в отключенном режиме, пока ваш кластер не будет готов, затем подключитесь, синхронизируйте по IP и начните динамическую миграцию...