Для некоторых наших заказчиков Microsoft Windows Server 2003(R2) по-прежнему является актуальной ОС. Понятно, что это происходит не от хорошей жизни, ведь даже расширенная поддержка заканчивается в 2015-м году. Работа критичного для бизнеса legacy-софта приводит к ситуации, когда эту антикварную ОС необходимо переносить на новый сервер. Оборудование 5-8-летней давности начинает выходить из строя, ремонт является нецелесообразным, но как быть с поддержкой Windows Server 2003/2003R2 на современных платформах Supermicro?
Таблица совместимости с ОС обнадеживает: для большинства популярных 1- и 2-процессорных плат X9 заявлена поддержка Server 2003 (не уточняется — обычной или R2) Enterprise в 32бит и 64бит (x86_64) вариантах. Хуже обстоят дела с бюджетными однопроцессорными платами на чипсетах C202/204/222/224/226 под Xeon E3-1200/v2/v3 - именно платформы на их основе чаще всего выбирают в качестве замены отслуживших свое старых серверов. Для X10SLM во всех вариантах поддержка Windows Server 2003 не заявлена, и вас ждет BSOD при попытке установить ОС.
Проблема номер два — дополнительные контроллеры. Для сетевых карт Intel драйверы выходят, а вот с RAID/HBA ситуация сложнее: Adaptec by PMC не обновляет драйверы под Server 2003 с 2011 года.
Остается виртуализация как способ решения проблемы с поддержкой современного оборудования. Причем зачастую ситуация складывается так, что она должна быть бесплатной и относительно простой в администрировании: старые приложения есть, средств на переписывание / переход на новую версию / другой продукт нет, едва хватило на скромный сервер за $1000, а сама ситуация в большинстве случаев возникает в небольших организациях с начинающими системными администраторами. Тут есть три варианта:
Настольные гипервизоры (Virtualbox, VMware Workstation) стоит использовать только в тех случаях, когда вам неинтересны производительность и сколь-нибудь продолжительный аптайм, то есть для обучения и тестирования.
Устанавливаем 64-битную (x86_64) CentOS 6.5 в минимальном варианте, для этого будет достаточно носителя minimal или netinstall. Ставим необходимые пакеты:
Запускаем сервис libvirtd и добавляем его в автозагрузку:
Самым оптимальным с точки зрения производительности является прямое использование блочных устройств для размещения ВМ. Отдавать само блочное устройство целиком не стоит (например,
Использовать файлы тоже можно, в большинстве случаев это удобнее. Например, формат qcow2 позволяет легко использовать thin-provisioning, снапшоты, шифрование и сжатие, но ценой некоторого снижения производительности.
В данном примере мы добавляем в пул каталог
Добавляем метку SELinux, чтобы libvirt мог использовать каталог для размещения ВМ:
Добавляем каталог в пул, инициализируем его, запускаем и включаем автозапуск:
ISO образ с драйверами можно взять тут. Кроме него понадобится дискета с драйвером
Приступаем к установке. Сделать это можно при помощи скрипта
Не забудьте, что нужно успеть подключиться по VNC и нажать F6 для добавления драйвера.
После окончания установки скрипт virt-install завершится:
Современные ОС (например, Windows, начиная с Server 2008, или RHEL, начиная с 6) используют по умолчанию смещение в 2048 секторов (1024КиБ). В Windows Server 2003 Service Pack 1 в утилите
Таблица совместимости с ОС обнадеживает: для большинства популярных 1- и 2-процессорных плат X9 заявлена поддержка Server 2003 (не уточняется — обычной или R2) Enterprise в 32бит и 64бит (x86_64) вариантах. Хуже обстоят дела с бюджетными однопроцессорными платами на чипсетах C202/204/222/224/226 под Xeon E3-1200/v2/v3 - именно платформы на их основе чаще всего выбирают в качестве замены отслуживших свое старых серверов. Для X10SLM во всех вариантах поддержка Windows Server 2003 не заявлена, и вас ждет BSOD при попытке установить ОС.
Проблема номер два — дополнительные контроллеры. Для сетевых карт Intel драйверы выходят, а вот с RAID/HBA ситуация сложнее: Adaptec by PMC не обновляет драйверы под Server 2003 с 2011 года.
Остается виртуализация как способ решения проблемы с поддержкой современного оборудования. Причем зачастую ситуация складывается так, что она должна быть бесплатной и относительно простой в администрировании: старые приложения есть, средств на переписывание / переход на новую версию / другой продукт нет, едва хватило на скромный сервер за $1000, а сама ситуация в большинстве случаев возникает в небольших организациях с начинающими системными администраторами. Тут есть три варианта:
- ESXi. В версии 5.5 решили отказаться от лимита в 32ГБ RAM в бесплатном варианте. Не будет Storage IO control и Network IO control (лимиты на использование ресурсов сети и дисковой подсистемы). Но главный минус в нашем случае — поддержка бюджетного оборудования. Никакие программные RAID'ы (все чипсетные контроллеры Intel являются таковыми) не поддерживаются. Не поддерживаются некоторые сетевые карты, например, i217LM в платах X10SLM.
- Hyper-V и бесплатный Hyper-V Server. Неплохой вариант для Windows-администраторов, но только для гостевых Server 2003(R2) поддерживается не больше 2-х vCPU.
- KVM. О нем и пойдет сегодня речь. В бесплатном одиночном варианте это будет CentOS 6.4 или 6.5 в качестве стабильной платформы (но можно использовать другой клон RHEL, например, Oracle Linux или Scientific Linux). Паравиртуальные драйверы для дисковой подсистемы и сети для Server 2003(R2) существуют и поддерживаются, есть управление лимитами ресурсов через cgroups (что поможет вам обеспечить для приоритетных ВМ нужное количество ресурсов по CPU/памяти/сети/IOPS или пропускной способности дисковой подсистемы). Миграция работающих виртуальных машин между хостами тоже поддерживается. Управление осуществляется через консоль (напрямую или при помощи virsh) или через virt-manager — примитивный в сравнении с SC VMM и vSphere Client, но достаточный для скромных задач.
Настольные гипервизоры (Virtualbox, VMware Workstation) стоит использовать только в тех случаях, когда вам неинтересны производительность и сколь-нибудь продолжительный аптайм, то есть для обучения и тестирования.
Первоначальная установка
За основу взяты статьи "Установка и настройка KVM под управлением CentOS 6" на Хабре и "KVM Virtualization in RHEL 6 Made Easy " от инженеров Dell. Итак, приступим.Устанавливаем 64-битную (x86_64) CentOS 6.5 в минимальном варианте, для этого будет достаточно носителя minimal или netinstall. Ставим необходимые пакеты:
yum install kvm libvirt policycoreutils-python virt-install virt-manager bridge-utilsМожно добавить еще screen для повышения удобства в работе с консолью.
Запускаем сервис libvirtd и добавляем его в автозагрузку:
service libvirtd start chkconfig libvirtd onПроверяем возможность подключения к KVM через virsh:
virsh sysinfoНа выходе мы должны получить длинный xml-файл:
American Megatrends Inc. 3.0a 12/04/2013 3.10 Supermicro X9DRi-LN4+/X9DR3-LN4+ 0123456789 0123456789 ...
Сеть
Для особо критичных к производительности сети сценариев можно использовать SR-IOV. Но начнем с классического простого варианта, которых подходит для решения задачи (если у вас арендованный ДЦ с ограничием на один MAC и все нужно прятать за NAT'ом) — доступ через мост. В данном примере для доступа к серверу использовался единственный интерфейс eth0 с IP 192.168.0.161/24 и шлюзом 192.168.0.199. Редактируем конфигурационный файл интерфейса eth0 и создаем еще один для моста br0:vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE="br0" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Bridge" BOOTPROTO="static" IPADDR="192.168.0.161" GATEWAY="192.168.0.199" DNS1="212.45.0.3" DNS2="212.45.2.5" MTU="1500" NETMASK="255.255.255.0" DEFROUTE="yes" IPV4_FAILURE_FATAL="yes" IPV6INIT="no" NAME="System br0"
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="none" HOSTNAME="centos-nc.localdomain" HWADDR="00:25:90:86:86:B0" IPV6INIT="no" MTU="1500" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" NAME="System eth0" BRIDGE="br0"Перезапускаем сеть:
service network restartНастраиваем
iptables
. Нужно разрешить форвардинг трафика через мост:
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT service iptables save service iptables restartДля внешнего доступа к консоли ВМ через VNC нужно открыть соответствующие порты:
iptables -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5900:5903,6000:6003 -j ACCEPT service iptables save service iptables restart
Storage pool'ы (хранилище для ВМ)
Образы дисков виртуальных машин хранятся в storage pool'ах, где могут использоваться блочные устройства хоста (тома LVM, LUN'ы с блочных СХД), файлы (RAW или, например, в формате qcow2) или сетевы ФС (NFS или кластерные ФС, например, GFS2).Самым оптимальным с точки зрения производительности является прямое использование блочных устройств для размещения ВМ. Отдавать само блочное устройство целиком не стоит (например,
/dev/sdd
), так как гостевая ОС начнет создавать на нем разделы или LVM группы, хост начнет их определять и ничего хорошего из этого не выйдет. Так что использовать нужно разделы или тома LVM.
Использовать файлы тоже можно, в большинстве случаев это удобнее. Например, формат qcow2 позволяет легко использовать thin-provisioning, снапшоты, шифрование и сжатие, но ценой некоторого снижения производительности.
В данном примере мы добавляем в пул каталог
/mnt/kvm-00
, куда смонтирована файловая система ext4 на LVM-томе /dev/vg00/lv-kvm-00
объемом в 40ГиБ.
Добавляем метку SELinux, чтобы libvirt мог использовать каталог для размещения ВМ:
semanage fcontext -a -t virt_image_t /mnt/kvm-00
Добавляем каталог в пул, инициализируем его, запускаем и включаем автозапуск:
virsh pool-define-as guest_images_dir dir - - - - "/mnt/kvm-00" [root@centos-nc ~]# virsh pool-build guest_images_dir Pool guest_images_dir built [root@centos-nc ~]# virsh pool-start guest_images_dir Pool guest_images_dir started [root@centos-nc ~]# virsh pool-autostart guest_images_dir Pool guest_images_dir marked as autostartedВывод информации о пуле:
[root@centos-nc ~]# virsh pool-info guest_images_dir Name: guest_images_dir UUID: a39bfd16-9690-83f8-9095-aca0c1ef5b45 State: running Persistent: yes Autostart: yes Capacity: 39.37 GiB Allocation: 175.88 MiB Available: 39.20 GiB
Установка ОС
Перед установкой нам понадобится дистрибутив с паравиртуальными драйверами Virtio. Паравиртуальные драйверы позволяют гипервизору не тратить ресурсы на эмуляцию работы реальными физическими устройствами, например, с ethernet-контроллером Intel E1000. Вместо этого гипервизор предоставляет ОС т.н. паравиртуальные устройства, которые обеспечивают существенное снижение накладных расходов при передаче данных или дополнительный функционал. Для гостевых Windows в KVM есть следующие устройства:- virtio-scsi — SCSI контроллер.
- virtio-net — Ethernet контроллер. Некоторое время назад в Windows были проблемы со стабильной работой virtio-net, но сейчас все наладилось.
- virtio-serial — последовательный интерфейс. Можно использовать в качестве последовательной консоли, например.
- virtio memory balloon — позволяет оптимизировать количество выделяемой для ВМ памяти. При наличии свободной памяти в ВМ она может быть отдана обратно хосту, т.е. гостевая ОС использует ровно столько памяти, сколько ей действительно нужно в определенный момент времени. Естественно, что такая технология требует наличия драйвера и специального сервиса, взаимодействующего с гипервизором. Для Windows Server 2003 memory balloon поддерживается, но связываться с его настройкой стоит лишь при условии тесного размещения ВМ
ISO образ с драйверами можно взять тут. Кроме него понадобится дискета с драйвером
virtio-scsi
, ведь Windows Server 2003 ничего не знает о таком устройстве. Дискету можно взять тут, драйвер не последней версии, но можно обновить потом с ISO.
Приступаем к установке. Сделать это можно при помощи скрипта
virt-install
.
virt-install --connect qemu:///system --arch=x86_64 \ -n win_srv_2003r2 -r 2048 --vcpus=2 \ --disk pool=guest_images_dir,size=30,bus=virtio,cache=writethrough \ --cdrom==/mnt/kvm-dist/ru_win_srv_2003_r2_enterprise_with_sp2_vl_cd1_X13-46484.iso \ --disk path=/mnt/kvm-dist/virtio-win-0.1-74.iso,device=cdrom,perms=ro \ --disk path=/mnt/kvm-dist/virtio-win-drivers-20120712-1.vfd,device=floppy \ --graphics vnc,listen=0.0.0.0,keymap=ru,password=Q123q \ --noautoconsole --os-type windows --os-variant win2k3 \ --network=bridge:br0,model=virtioРасшифровка:
- Создаем ВМ с двумя vCPU и 2ГБ памяти
- диском на 30ГБ, подключенным к паравиртуальному контроллеру, используется кэш хоста на чтение (
cache=writethrough
). Еще можно использоватьwriteback
, что небезопасно, или отключить совсем (none
), если используется NFS - Добавляем установочный CD-ROM
- CD с драверами virtio и дискету
- VNC-консоль с паролем
- выбор типа и выпуска ОС
- сетевая карточка virtio с подключеним к мосту br0
Не забудьте, что нужно успеть подключиться по VNC и нажать F6 для добавления драйвера.
После окончания установки скрипт virt-install завершится:
Starting install... Allocating 'win_srv_2003r2.img' | 30 GB 00:00 Creating domain... | 0 B 00:00 Domain installation still in progress. Waiting for installation to complete. Domain has shutdown. Continuing. Starting domain... | 0 B 00:00 Domain installation still in progress. Waiting for installation to complete. Domain has shutdown. Continuing. Guest installation complete... restarting guest.И управлять ВМ можно будет через
virsh
или, если нужен GUI, через virt-manager
, в том числе и с Windows-ПК, но об этом ниже.
Windows Server 2003 и выравнивание разделов
Проблема с выравниванием успела в свое набить оскомину всем. Вот краткая суть: при стандартной разбивке диска в Windows Server 2003 и старше раздел начинался на 64-м секторе (так исторически сложилось еще с тех времен, когда параметры геометрии HDD имели какой-то смысл). Это никого не волновало до тех пор, пока все работало на физических серверах с дисками с 512 байтовыми секторами. При работе с RAID появляется проблема в виде размера страйпа, который не делится на 31,5КиБ, что приводит к очевидному последствию в виде снижения производительности (например, запись блока размером 8киБ может привести к необходимости обращения к двум разным страйпам массива). Виртуализация добавляет несколько уровней абстракции: диск ВМ -> файловая система хоста -> диск хоста -> физические диски.Современные ОС (например, Windows, начиная с Server 2008, или RHEL, начиная с 6) используют по умолчанию смещение в 2048 секторов (1024КиБ). В Windows Server 2003 Service Pack 1 в утилите
diskpart
появилась возможность задать смещение при создании разделов. В итоге, решение будет простым: системный диск можно не трогать, а под полезную нагрузку добавлять отдельный виртуальный диск и создавать на нем разделы с правильным смещением:
- Запустить
diskpart
- Выбрать диск командой
select disk <номер_диска>
(list disk
выводит список дисков) - Создать раздел со смещением в 1024КиБ:
create partition primary align=1024
Virt-manager
Virt-manager — GUI для управления виртуализацией через libvirt. На сервере с KVM не должно быть ничего лишнего. Так что запускать там X-сервер (и оконные менеджеры или тем более тяжеловесные GNOME или KDE) не стоит. Тут можно воспользоваться сетевыми возможностями X11. Для nix систем все тривиально, для Windows понадобятся PuTTY и Xming:- В PuTTY включаем Enable X11 Forwarding
- Включаем X11 Forwarding на хосте (файл
/etc/ssh/sshd_config
):X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes
- Ставим дополнительные пакеты xorg-x11-xauth и liberation-sans-fonts
- На удаленном ПК запускаем Xming, подключаемся к серверу и запускаем
virt-manager
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow -dpi 108
Комментариев нет:
Отправить комментарий