После конференции 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 на обоих машинах:
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 [10]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 на обоих физических серверах.
Трансляция при миграции не рвется. Клиент никак не замечает, что
виртуальная машина переносится на другой физический сервер. Так
как Вы только что измерили размер буфера плеера, можете быть
уверены, что все честно. :)