31.03.2007

Виртуализация с Xen. Живая миграция

После конференции 26 марта 2007 мы получили достаточно много вопросов касательно живых демонстраций. Поэтому мы решили рассказать о том, на каких технологиях он были основаны, как организованы, и как их можно повторить.

Для демонстрации использовались 2 сервера и 2 клиента. Виртуальная машина, с которой велась трансляция, мигрировала между серверами. Один клиент использовался в качестве управляющей станции, со второго собственно демонстрировалась трансляция. Клиентов, в принципе, можно объединить в одного. Соединены все машины были через обычный 100 Mbit Ethernet.

Далее используются следующие имена машин:

xen_host_1 - первый физический сервер
xen_host_2 - второй физический сервер
virt_server - виртуальный сервер

Подготовка демонстрации

  1. Установите на xen_host_1 и xen_host_2 Red Hat Enterprise Linux 5 с поддержкой виртуализации.
  2. Установите на xen_host_1 в виртуальную машину virt_server паравиртуализованный Red Hat Enterprise Linux 5.
  3. После установки отредактируйте /etc/xen/virt_server, приведите его к следующему вид:
    #vnc=1
    #vncunused=1
    sdl=1
    Это необходимо, чтобы можно было осуществить живую миграцию данной виртуальной машины.
  4. Теперь необходимо настроить xen на xen_host_1 и xen_host_2 таким образом, чтобы он позволял осуществить миграцию между двумя физическими серверами. Для этого внесите следующие изменения в /etc/xen/xend-config.sxp на обоих машинах:
    #(xend-unix-server yes)
    (xend-relocation-server yes)
    (xend-relocation-port 8002)
    (xend-relocation-address '')
    (xend-relocation-hosts-allow '')
    #(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
    После этого перезапустите xen
    service xend restart
  5. Теперь нам необходимо, чтобы оба физические сервера видели общее хранилище, на котором находятся данные виртуальной машины. Кроме того, необходимо, чтобы оно было смонтировано по одинаковому пути. Это требуется потому, что при миграции виртуальной машины ее файловая система не копируется, так как это требовало бы слишком много времени даже в случае быстрой сети.
    В нашем распоряжении не было внешнего накопителя, но это не стало препятствием. Мы использовали NFS.
    На xen_host_1 (на котором установлен virt_server) в /etc/exports добавьте строку:
    /xen *(rw,sync,no_root_squash)
    После этого перезапустите NFS и убедитесь, что сервис стартует автоматически:
    service nfs restart
    chkconfig nfs on
  6. Смонтируйте созданную папку на xen_host_2:
    mount xen_host_1:/xen /xen
  7. Запустите виртуальный сервер на xen_host_1
    xm create -c virt_server
  8. Установите сервер потокового видео на virt_server. Мы использовали gnump3d. Для установки скачайте с http://www.gnump3d.org/ архив gnump3d-2.9.9.9.tar.bz2 (620k), распакуйте и скомпилируйте его.
    tar xjvf gnump3d-2.9.9.9.tar.bz2
    cd gnump3d-2.9.9.9/
    make install
  9. Включите трансляцию. По умолчанию сервер настроен на трансляцию содержимого директории /home/mp3/.
    mkdir /home/mp3
    cd /home/mp3
    wget -c http://www.redhat.com/v/ogg/TruthHappens.ogg
    gnump3d &

Теперь все готово к демонстрации. На клиентской машине нам потребуется любой видеоплеер, поддерживающий http. Мы использовали totem.

Демонстрация

  1. Запустите просмотр трансляции на клиенте. В случае totem для этого нажмите 'Movie', затем 'Open Location' и введите http://virt_server:8888/TruthHappens.ogg
  2. Остановите виртуальный сервер. Для этого на xen_host_1 выполните
    xm pause virt_server
    В течение некоторого времени после остановки виртуальной машины (как правило, нескольких секунд) клиент будет продолжать показывать ролик из буфера плеера. После того, как буфер закончится, трансляция прервется. Теперь Вы знаете размер буфера в секундах. :)
  3. Снимите виртуальный сервер с паузы. Для этого на xen_host_1 выполните
    xm unpause virt_server
  4. Вновь запустите трансляцию на клиенте.
  5. Выполните живую миграцию сервера без остановки трансляции. Для этого на xen_host_1 выполните
    xm migrate -l virt_server xen_host_2
    Процесс занимает несколько десятков секунд. Следить за миграцией можно с помощью команды xm list на обоих физических серверах. Трансляция при миграции не рвется. Клиент никак не замечает, что виртуальная машина переносится на другой физический сервер. Так как Вы только что измерили размер буфера плеера, можете быть уверены, что все честно. :)

Комментариев нет: