CentOS 6.4 - Установка и настройка системы виртуализации и гипервизора Qemu-KVMПодписка на Комментарии к "CentOS 6.4 - Установка и настройка системы виртуализации и гипервизора Qemu-KVM"

Аватар Vadimsky

Исходные данные:
Физический сервер Asus, 4 ядра, 16 Гб RAM, 1Тб HDD четыре штуки, собранные в RAID10, 4 гигабитных сетевых карты.

Требуемая площадка минимум для:

  1. Windows Server 2008R2 Standart RUS полная установка — контроллер домена.
  2. Windows Server 2008R2 Standart RUS Core — обновление системы КонсультантПлюс.
  3. CentOS 6.4 х64 — антивирусный и кеширующий прокси-сервер, файл-сервер.
  4. Windows 7(8) х64(х32) — тестовая машина.

В качестве гипервизора выбран Qemu-KVM.
Выбор гипервизоров проводился среди Xen Server, Qemu-KVM, Microsoft Hyper-V Server.
В двух словах, почему выбор пал именно на Qemu-KVM.
Проводились тестовые установки всех указанных систем. По результата сравнения вывод следующий:

  • Xen Server — ставиться очень просто и быстро. Идеальное решение если развернуть систему нужно было ещё вчера. На этом все его преимущества, по сравнениею с Qemu-KVM, и заканчиваются. Отмечу, что мнение высказанное далее, относительно Xen Server - моё ИМХО, выработанное на практике, под влиянием моих тараканов в моей голове, если у вас другое мнение, я его уважаю и оспаривать не собераюсь.
    Недостатки Xen Server — он по своему усмотрению разбивает жёсткий диск, и указать ему на своё предпочтение в разделах, нет ни какой возможности (по крайней мере у меня не получилось).
    Ладно, пусть так, ставим с разбивкой диска "по-умолчанию". Следующая неприятность нас ждёт в демонах (в аббревиатуре Windows — сервисах запускаемых по-умолчанию) и в настройках фаервола. Говоря проще в сервисах запущено всё, что только возможно, а в фаерволе открыто всё, что можно открыть. Особо разработчики перемудрили с автовходом пользователя root, с основной консоли (то есть клавиатура и монитор присоединены непосредственно к серверу), а также автозапуском, после автовхода, текстовой утилиты предварительной настройки. Которой, естественно, можно также просто всё и расстроить.
    С одной стороны - так проще запустить и поставить гостевую систему. Но, с точки зрения безопасности - её просто нет. Если у злоумышленника будет физический доступ к серверу (это отдельная тема), то считай ему и делать то ничего не придётся. Кстати, как найти и отключить этот автовход — сходу разберётся далеко не каждый. Ну и не могу не заметить, что в комплекте идёт утилита для контроля гостевых систем, и их установки в гипервизоре, чисто «виндовская». Для управления гостями из "линукса", потребуется virt-manager.
    И так, основываясь на всём выше перечисленном от Xen Server решено было отказаться.
  • Следующий - Microsoft Hyper-V Server ставится быстро, в несколько кликов мыши, и в результате мы имеем голый Windows Server Core, то есть окно командной строки и больше ничего. Для человека, всю сознательную жизнь проработавшего именно с интерфейсом командной строки, это не было пугающим или даже удивлением, а скорее, чем то приятным и родным. Трудность возникла в управлении гостевыми системами. Как оказалось, для этого опять же нужна Windows причём полная установка, с графикой и со всеми наваротами. Но и это не самое страшное. Следуя своим убеждениям - не рискнул я в качестве фундамента использовать изделие от Microsoft, хотя был готов в любой момент к нему вернуться в случае неудачи с Qemu-KVM.
  • Qemu-KVM. Если первые два, были по сути самостоятельными системами, то этот гипервизор — всего лишь «рядовая» программа, которая может быть установленная в на любой компьютер, где есть установленный дистрибутив на базе Linux.
    То есть мы можем собрать конструктор с нуля под себя, по своему усмотрению. Что и было сделано. Рассказывать об установке и настройке CentOS не стану - мануалов куча. Скажу лишь, что ставилась система в минимальной инсталляции, что бы не захламлять, к тому же других ролей на этой системе не будет.
  • И так, будем считать, что на нашем физическом сервере установлена система CentOS 6.4 в минимальной конфигурации.

    Далее я буду приводить только те системные настройки, которые непосредственно касаются системы виртуализации.

    Важным моментом, в правильности установки и последующей работы гостей, является правильная настройка сети на сервере. Для работы виртуальных машин, их выхода в сеть, и главное их доступности из локальной сети, нам потребуется настроить мост bridge0, между физической сетевой картой и всей системой в целом. И вот тут самое интересное. На моём физическом сервере имеется 4 гигабитных сетевых карты. Логично предположить, что каждой гостевой системе достанется по одной карточке.
    На практике можно конечно именно так и поступить. Но это будет означать 4 занятых порта в свиче (а портов, как и памяти, лишних не бывает). Я повесил по две системы на первые две карточки., То есть у меня в системе есть bridge0 и bridge1, у каждой свой IP-адрес. Сам сервер доступен по любому из этих двух адресов. То есть если кто то из пользователей "отвалится" и позвонит с вопросом "где сервер?" (что то случилось с одной сетевой карточкой) всегда можно зайти на сервер удалённо по второму адресу и разобраться в сути проблемы. Сразу хочу оговориться, что систем может быть больше, даже не смотря на то, что физических ядер всего 4, а физической памяти 16 Гб, я запускал 4 виртуальные машины в каждой из которых по два ядра и по 6 Гб оперативки. Они работали одновременно вполне сностно, но о распределении вычеслительных мощностей между гостями в конце статьи.
    И так, у нас на двух физических сетевых карточках "висит" по две гостевые системы (2х2).
    Изначально я хотел объединить все четыре физических сетевых карточки в одну bond0, и уже с неё кидать мост bridge0, к которому подключались бы как гостевые системы, так и хостовая. При этом у хостовой системы IP-адрес был бы тот, который прописан в /etc/sysconfig/network-scripts/ifcfg-bridge0, а у гостевых - у каждой свой. Но при данной настройке постоянно отваливались SMB-шары как на виндовых, так и на линуксовых серверах, а так же RDP, а вот SSH работал исправно. В чём собака порылась - выяснить так и не удалось, поэтому остановлися на варианте 2х2.

    Под катом скрипт1, который я использую для постустановочой настройки, что бы минимизировать однообразные действия. Обязательно разберитесь в нём, прежде чем его запускать, особенно касается раздела отключения служб, хотя сам по себе скрипт - проще простого.

    #!/bin/bash
    #
    INSTALL=/root
    cp -f $INSTALL/sysctl.conf /etc/sysctl.conf
    cp -f $INSTALL/modprobe.conf /etc/modprobe.d/modprobe.conf
    cp -Rf $INSTALL/network-scripts/* /etc/sysconfig/network-scripts
    rm -Rf /etc/yum.repos.d
    cp -Rf $INSTALL/yum.repos.d /etc
    service network restart
    service sshd restart
    #
    #
    yum clean all
    rm -Rf /var/cache/yum/*
    yum install -y yum-plugin-remove-with-leaves.noarch yum-plugin-priorities.noarch yum-plugin-fastestmirror.noarch htop mc webmin
    #
    #
    echo "export EDITOR=ee" >> .bash_profile # Здесь я прописал консольный текстовый редактор ee из комплекта FreeBSD, вы можете прописать свой,
    # тогда при вводе команды virsh edit именно он и будет вызываться.
    #
    chkconfig webmin --level 2345 off
    chkconfig cgconfig --level 2345 off
    chkconfig cgred --level 2345 off
    chkconfig fcoe --level 2345 off
    chkconfig iscsi --level 2345 off
    chkconfig iscsid --level 2345 off
    chkconfig lldpad --level 2345 off
    chkconfig lvm2-monitor --level 2345 off
    chkconfig multipathd --level 2345 off
    chkconfig netconsole --level 2345 off
    chkconfig netfs --level 2345 off
    chkconfig nfs --level 2345 off
    chkconfig nfslock --level 2345 off
    chkconfig rdisc --level 2345 off
    chkconfig restorecond --level 2345 off
    chkconfig rpcbind --level 2345 off
    chkconfig rpcgssd --level 2345 off
    chkconfig rpcidmapd --level 2345 off
    chkconfig rpcsvcgssd --level 2345 off
    chkconfig rsyslog --level 2345 off
    chkconfig haldaemon --level 2345 off
    #
    chkconfig ksm --level 345 on
    chkconfig ksmtuned --level 345 on
    chkconfig ip6tables --level 2345 on
    chkconfig iptables --level 2345 on
    chkconfig network --level 2345 on
    #
    gpasswd -d mail mail
    #
    userdel -r radvd
    userdel -r nfsnobody
    userdel -r rpcuser
    userdel -r rpc
    userdel -r mail
    userdel -r game
    userdel -r ftp
    userdel -r floppy
    userdel -r audio
    userdel -r video
    #
    groupdel floppy
    groupdel audio
    groupdel video
    groupdel mail
    groupdel ftp
    groupdel game
    groupdel nfsnobody
    #
    #
    yum -y install kvm libvirt libvirt-python python-virtinst # Cобственно установка гипервизора, естественно доступ в Интернет уже должен быть.
    groupadd libvirt
    #cp -f $INSTALL/libvirtd.conf /etc/libvirt/libvirtd.conf
    #
    service libvirtd start
    virsh net-destroy default
    virsh net-undefine default
    #
    cp -f $INSTALL/config /etc/selinux/config
    shutdown -r now
    exit

    Первая секция тупо копирует с перезаписью конфиги служб и сервисов по своим местам.
    Все конфиги в конце статьи.
    Вторая секция, устанавливает плагины к yum и утилиты htop, webmin и mc. Что это такое и зачем они нужны сказано уже не мало. Если вы всё ещё не знаете, что это, то скорее всего они вам и не понадобятся вовсе - поэтому удаляйте, но плагины yum лучше оставьте.
    И так, следующая секция - отключение ненужных служб из автозапуска и удаление "левых" пользователей. По хорошему ненужное лучше вообще всё удалить, заменив в директиву --level 2345 off директивой -del, но делайте это только если вы точно знаете что делаете.

    Обращаю ваше внимание:
    ВНИМАТЕЛЬНО ПРОСМОТРИТЕ ОТКЛЮЧАЕМЫЕ СЛУЖБЫ!

    Что бы не возникло потом вопросов типа "я сделал по вашей инструкции и теперь у меня перестал работать почтовый сервер!"
    Следующим разделом идёт собственно установка самого гипервизора и его настройка.
    Обратите внимание, что группа libvirt в CentOS, при установке на CentOS 6.3 Qemu-KVM, не создаётся автоматически. Если для установки Qemu-KVM вы решили не использовать мой скрипт, то не забудьте создать группу libvirt вручную, коммандой groupadd libvirt. При установке на CentOS 6.4 всё создаётся корректно. На других дистрибутивах не проверял.
    Так же нужно удалить все виртуальные сетевые соединения, созданные при установке Qemu-KVM,
    командами virsh net-destroy default и virsh net-undefine default
    Ну и на напоследок отключение selinux и перезагрузка.
    Если всё сделано правильно, то после перезагрузки мы получим полностью функциональную площадку для размещения гостевых систем, ни чем не уступающую Xen Server или Microsoft Hyper-V Server, а в чём то даже превосходящую их.
    На этом настройка сервера закончена.

    Для установки гостевых систем, входим на сервер по ssh, и запускаем скрипт2:

    #!/bin/bash
    #
    qemu-img create -f qcow2 -o preallocation='metadata' /home/virtual/Stronghold.qcow2 100G
    #
    virt-install --connect qemu:///system \
            --name Stronghold \
            --ram 6144 \
            --vcpus 2 \
            --cpuset 2,3 \
            --cdrom /home/ISO/centos_6.4_final.iso \
            --description Proxy \
            --os-type Linux \
            --network bridge=bridge0 \
            --disk '/home/virtual/Stronghold.qcow2',device='disk',size=500,sparse=false,cache='writeback',bus='ide' \
            --hvm \
            --accelerate \
            --graphics vnc,port=5900,keymap=ru \
            --virt-type kvm \
            --autostart

    Здесь:
    Stronghold.qcow2 100G - файл диска, размером 100 гигабайт. Размер и расположение можно менять по своему вкусу.
    --vcpus 2 - число процессоров в гостевой системе,
    --cpuset 2,3 - привязка вирутальных процессоров к физическим,
    --graphics vnc,port=5900,keymap=ru - куда выводится экран установки, можно выводить на текстовую консоль, при одновременном запуске нескольких гостевых систем, нужно использовать разные порты vnc, иначе будет вылетать с ошибкой. Остальное думаю понятно.

    Можно также воспользоваться готовым шаблоном из приведённых, или сделать свой (особенно удобно при большом количестве гостевых установок).

    Windows Server 1 ядро, 4 гига памяти Rapid.xml:

    <domain type='kvm'>
      <name>Rapid</name>
      <uuid>8c2fee85-f1ee-17eb-23ab-7b69c941bd0c</uuid>
      <description>PDC</description>
      <memory unit='KiB'>4194304</memory>
      <currentMemory unit='KiB'>4194304</currentMemory>
      <vcpu placement='static' cpuset='0'>1</vcpu>
      <os>
        <type arch='x86_64' machine='rhel6.3.0'>hvm</type>
        <boot dev='hd'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <cpu mode='custom' match='exact'>
        <model fallback='allow'>cpu64-rhel6</model>
        <vendor>Intel</vendor>
        <feature policy='require' name='vme'/>
        <feature policy='require' name='tm2'/>
        <feature policy='require' name='est'/>
        <feature policy='require' name='monitor'/>
        <feature policy='require' name='osxsave'/>
        <feature policy='require' name='smx'/>
        <feature policy='require' name='ss'/>
        <feature policy='require' name='tsc-deadline'/>
        <feature policy='require' name='dtes64'/>
        <feature policy='require' name='ht'/>
        <feature policy='require' name='ds'/>
        <feature policy='require' name='pbe'/>
        <feature policy='require' name='tm'/>
        <feature policy='require' name='pdcm'/>
        <feature policy='require' name='vmx'/>
        <feature policy='require' name='ds_cpl'/>
        <feature policy='require' name='xtpr'/>
        <feature policy='require' name='acpi'/>
      </cpu>
      <clock offset='localtime'>
        <timer name='rtc' tickpolicy='catchup'/>
      </clock>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='writeback'/>
          <source file='/home/virtual/Rapid.qcow2'/>
          <target dev='hda' bus='ide'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw' cache='writeback'/>
          <source file='/home/ISO/Win2008R2.iso'/>
          <target dev='hdc' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='1' target='0' unit='0'/>
        </disk>
        <controller type='ide' index='0'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-ehci1'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci1'>
          <master startport='0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci2'>
          <master startport='2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci3'>
          <master startport='4'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:3f:7a:35'/>
          <source bridge='bridge0'/>
          <model type='e1000'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <input type='tablet' bus='usb'/>
        <input type='mouse' bus='ps2'/>
        <graphics type='vnc' port='5900' autoport='no' keymap='ru'/>
        <video>
          <model type='vga' vram='9216' heads='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </memballoon>
      </devices>
    </domain>

    Windows Server 2 ядра, 6 гигов памяти, СОМ-порт Gobi.xml:

    <domain type='kvm'>
      <name>Gobi</name>
      <uuid>be88f6da-df5c-86e3-2ef7-0adebc2ee96d</uuid>
      <description>Server Core</description>
      <memory unit='KiB'>6291456</memory>
      <currentMemory unit='KiB'>6291456</currentMemory>
      <vcpu placement='static' cpuset='2-3'>2</vcpu>
      <os>
        <type arch='x86_64' machine='rhel6.3.0'>hvm</type>
        <boot dev='hd'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <clock offset='localtime'>
        <timer name='rtc' tickpolicy='catchup'/>
      </clock>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='writeback'/>
          <source file='/home/virtual/Gobi.qcow2'/>
          <target dev='hda' bus='ide'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/home/ISO/Win2008R2.iso'/>
          <target dev='hdc' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='1' target='0' unit='0'/>
        </disk>
        <controller type='ide' index='0'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-ehci1'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci1'>
          <master startport='0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci2'>
          <master startport='2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci3'>
          <master startport='4'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:10:f5:f9'/>
          <source bridge='bridge0'/>
          <model type='e1000'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <serial type='dev'>
          <source path='/dev/ttyS0'/>
          <target port='0'/>
        </serial>
        <console type='dev'>
          <source path='/dev/ttyS0'/>
          <target type='serial' port='0'/>
        </console>
        <input type='tablet' bus='usb'/>
        <input type='mouse' bus='ps2'/>
        <graphics type='vnc' port='5902' autoport='no' keymap='ru'/>
        <video>
          <model type='vga' vram='9216' heads='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </memballoon>
      </devices>
    </domain>

    CentOS 6.4 1 ядро, 4 гига памяти Proxy.xml

    <domain type='kvm'>
      <name>Proxy</name>
      <uuid>ffe7951d-9975-121f-c7a3-b005b612ddf5</uuid>
      <description>Proxy</description>
      <memory unit='KiB'>4194304</memory>
      <currentMemory unit='KiB'>4194304</currentMemory>
      <vcpu placement='static' cpuset='1'>1</vcpu>
      <os>
        <type arch='x86_64' machine='rhel6.3.0'>hvm</type>
        <boot dev='hd'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <cpu mode='custom' match='exact'>
        <model fallback='allow'>cpu64-rhel6</model>
        <vendor>Intel</vendor>
        <feature policy='require' name='vme'/>
        <feature policy='require' name='tm2'/>
        <feature policy='require' name='est'/>
        <feature policy='require' name='monitor'/>
        <feature policy='require' name='osxsave'/>
        <feature policy='require' name='smx'/>
        <feature policy='require' name='ss'/>
        <feature policy='require' name='tsc-deadline'/>
        <feature policy='require' name='dtes64'/>
        <feature policy='require' name='ht'/>
        <feature policy='require' name='ds'/>
        <feature policy='require' name='pbe'/>
        <feature policy='require' name='tm'/>
        <feature policy='require' name='pdcm'/>
        <feature policy='require' name='vmx'/>
        <feature policy='require' name='ds_cpl'/>
        <feature policy='require' name='xtpr'/>
        <feature policy='require' name='acpi'/>
      </cpu>
      <clock offset='utc'/>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='writeback'/>
          <source file='/home/virtual/Stronghold.qcow2'/>
          <target dev='hda' bus='ide'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='block' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <target dev='hdc' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='1' target='0' unit='0'/>
        </disk>
        <controller type='ide' index='0'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-ehci1'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci1'>
          <master startport='0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci2'>
          <master startport='2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci3'>
          <master startport='4'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:69:66:09'/>
          <source bridge='bridge0'/>
          <model type='e1000'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <serial type='pty'>
          <target port='0'/>
        </serial>
        <console type='pty'>
          <target type='serial' port='0'/>
        </console>
        <input type='mouse' bus='ps2'/>
        <graphics type='vnc' port='5901' autoport='no' keymap='ru'/>
        <video>
          <model type='vga' vram='9216' heads='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </memballoon>
      </devices>
    </domain>

    Здесь важно отметить, что запустив установку по скрипту, она (установка) уйдёт в "фон", и ответить на вопросы мастера установки и нажать кнопочку "Далее" просто так мы не сможем. Что бы не лишать себя этой радости жизни, на своём рабочем компьютере (или любом другом, не сервере) делаем от рута:

    # yum install virt-manager virt-viewer

    YUM вытянет за собой все зависимости, которые потребуются для управления гостевыми системами на нашем удалённом сервере.
    Далее запускаем virt-manager, меню "Правка" -> "Параметры" -> вкладка "Свойства виртуальной машины", отмечаем "Удалённая виртуальная машина", как показано на рисунке.

    Повторюсь ещё раз: virt-manager мы поставили на машине, отличной от сервера.
    "Default storage format" лучше выбрать QCOW2, позже расскажу что это такое.
    Далее нажимаем меню "Файл" -> "Добавить соединение", и появится вот такое окно:

    В строке "Гипервизор", в выпадающем меню выбираем Qemu-KVM. Справедливости ради хочу отметить, что virt-manager может управлять и Xen Server, если кто не хочет ради управления Xen Server ставить "винду".
    Далее тип подключения — я выбрал ssh, но другие варианты тоже есть.
    Имя хоста (IP-адрес нашего сервера, или имя, если занесёно в DNS).
    Имя пользователя — пользователь, от имени которого работает Qemu-KVM, он должен входить в группы libvirt, (которой изначально нет) и в группу qemu, следовательно, группу libvirt создать, а потом ввести в неё пользователя. Если пользовались моим скриптом1 , то он только создаёт группу. Вводить пользователя в группы всё равно нужно вручную коммандами:

    # usermod -G qemu -a vadim
    # usermod -G libvirt -a vadim

    Вместо vadim пишите своего пользователя.

    Ставим галочку "Подключаться автоматически", то есть при запуске virt-manager, и жмём "Подключится". Удалённая система запросит пароль пользователя, которого мы только что добавили в группы. Вводим пароль и вауля, перед нами окно virt-manager-а с нашим сервером и запущенной виртуальной машиной в нём (мы же уже запустили установку, теперь она ждёт наших команд).
    Выделяем мышкой виртуальную машину и жмём кнопку "Открыть". Всё, перед нами обычное окно установки, как если бы мы ставили систему на локальную машину.
    Ставим гостевую систему обычным образом.
    На этом собственно и всё. Ничего сложного. В принципе, новые гостевые системы можно ставить непосредственно из virt-manager, но лично я его использую только, что бы продолжить и завершить установку. Начинаю же с сервера, скриптом2, так как в нём более гибко можно описать параметры и пути установок. А последующую настройку уже делаю по RDP для Windows-машин или по SSH для Linux.

    Так же полезно будет в окне виртуальной машины зайти в раздел "Параметры виртуального оборудования". Там следует сменить предлагаемую "по-умолчанию" сетевую карту на e1000, если конечно ваша сеть и физический сетевой адаптер сервера поддерживает гигабит.
    Так же полезно будет физически привязать виртуальный процессор гостевой машины к физическому процессору сервера. Делается это в разделе Processor -> Pinning, в случае большого количества установок, таким образом можно равномерно распределить нагрузку между физическими ядрами сервера (это можно задать и в начале установки в скрипте2).
    Я специально гонял тесты, перед вводом сервера в боевой строй. Здесь важнно учесть перераспределение нагрузки и роли, которые гости будут исполнять. В конечном варианте я расделил физические ядра и оперативку между гостями таким образом, что бы нагрузка на наих в течении суток (днём и ночью) была более менее равномерная, тоесть не вешал все тяжёлые дневные задачи на одно ядро в одн овремя суток, а равномерно распределяя по суткам и между ядрами (привязка виртуальных ядер к физическим)
    И так, в разделе IDE DISK1 нужно выбрать формат хранилища qcow2. После этого систему следует выключить и произвести конвертацию файла диска из формата RAW (в котором устанавливается система по-умолчанию) в формат QCOW2, что сильно повысит операции файлового ввода-вывода внутри виртуального диска (п окрайней мере так написано в мануалах и других статьях, однако я сам разницу практически не заметил, да и не проводил особых тестов).

    Конвертацию производим командой:

    # qemu-img convert -f raw -O qcow2 -o preallocation=metadata /home/virtual/rapid.img /home/virtual/Rapid.qcow2

    Далее запускаем гостевую систему, либо из virt-manager-а, либо с командной строки сервера, используя

    # virsh start имя_виртуальной_машины

    Получить список установленных гостевых систем можно командой
    # virsh list --all

    Конфиги:
    ...

    #/etc/sysconfig/network-scripts/ifcfg-bridge0
    DEVICE=bridge0
    TYPE=Bridge
    IPADDR=192.168.1.20
    PREFIX=24
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    GATEWAY=192.168.1.1
    DNS1=192.168.1.11
    DNS2=192.168.1.1
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    DOMAIN=firma.local
    USERCTL=no
    BOOTPROTO=static
    ONBOOT=yes

    ...
    #/etc/sysconfig/network-scripts/ifcfg-bridge1
    DEVICE=bridge1
    TYPE=Bridge
    IPADDR=192.168.1.21
    PREFIX=24
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    GATEWAY=192.168.1.1
    DNS1=192.168.1.11
    DNS2=192.168.1.1
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    DOMAIN=firma.local
    USERCTL=no
    BOOTPROTO=static
    ONBOOT=yes

    ...
    #/etc/sysconfig/network-scripts/ifcfg-bond0
    DEVICE=bond0
    TYPE=Bonded
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=no

    ...
    #/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE="eth0"
    BOOTPROTO="static"
    HWADDR="10:bf:48:d5:c7:00"
    BRIDGE=bridge0
    ONBOOT="yes"

    ...
    #/etc/sysconfig/network-scripts/ifcfg-eth1
    DEVICE="eth1"
    BOOTPROTO="static"
    HWADDR="10:bf:48:d5:c7:01"
    BRIDGE=bridge1
    ONBOOT="yes"

    ...
    #/etc/modprobe.d/modprobe.conf
    alias bond0 bonding
    options bonding mode=2 miimon=100 downdelay=200 updelay=200

    ...
    # /etc/sysctl.conf
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.default.accept_redirects = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    kernel.panic = 10
    net.ipv4.tcp_syncookies = 1
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    net.ipv4.ip_local_port_range="16384 65000"
    net.core.rmem_default = 16777216
    net.core.rmem_max = 16777216
    net.core.wmem_default = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 16777216  16777216
    net.ipv4.tcp_wmem = 4096 16777216  16777216
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.icmp_echo_ignore_broadcasts=1
    net.ipv4.conf.all.accept_source_route=0
    net.ipv4.tcp_keepalive_time = 1800
    #net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 200000
    #net.ipv4.ip_conntrack_max = 64000000
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_probes = 2
    net.ipv4.tcp_synack_retries = 3
    net.ipv4.tcp_syn_retries = 3
    net.ipv4.tcp_timestamps=0

    ...
    #/etc/yum.repos.d/webmin.repo
    [Webmin]
    name=Webmin Distribution Neutral
    priority=3
    baseurl=http://download.webmin.com/download/yum/
    enabled=1

    ...
    #/etc/yum.repos.d/rpmforge.repo
    [rpmforge]
    name = RHEL $releasever - RPMforge.net - dag
    baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
    mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
    #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
    enabled = 1
    protect = 0
    priority=3
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
    gpgcheck = 1

    ...
    #/etc/yum.repos.d/CentOS-Base.repo
    [base]
    name=CentOS-$releasever - Base
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
    #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
    gpgcheck=1
    enabled=1
    priority=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
    #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
    gpgcheck=1
    enabled=1
    priority=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
    #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
    gpgcheck=1
    enabled=1
    priority=2
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
    #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    priority=2
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
    #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
    gpgcheck=1
    enabled=0
    priority=2
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    ...
    #/etc/selinux/config
    SELINUXTYPE=targeted
    SELINUX=disabled
    SETLOCALDEFS=0

    ...
    В файле /etc/libvirt/libvirtd.conf достаточно расскоментировать строку unix_sock_group = "libvirt"
    В файле /etc/ssh/sshd_config расскоментировать X11Forwarding yes

    ...
    ...

    Вот собственно и всё!
    Удачи!
    Искренне ваш, Vadimsky

    Похожие материалы:
    Аватар skyb

    не хило описано, самое важное что все в одном месте.
    С праздником бро

    Аватар xlin

    Для увеличении скорости ввода-вывода дисков в разы, нужно использовать virtio для hdd и для карточек сетевых. Скорость увеличивается на порядок.

        <disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='none'/>
          <source file='/var/lib/libvirt/images/win2k8-1.img'/>
          <target dev='vdb' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
        </disk>

        <interface type='bridge'>
          <mac address='52:54:00:62:ab:0f'/>
          <source bridge='bridge1'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

    Дрова для винды (сам ставлю их для win2008 и win2003) тут http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/
    А вот пруф.

    Сеть; http://www.sebastien-han.fr/blog/2012/07/19/make-the-network-of-your-vms-fly-with-virtio-driver/ Что бы не быть голословным.
    Хард: http://openadmins.ru/blog/virtio-ide-benchmark-windows2008srvr2

    Из опыта. На KVM два года работают несколько OC и не кашляют. Сосед на XEN меня больше огорчает =)

    Аватар освоивший

    Сразу видно чем отличается человек не освоивший Xen от человека освоившего Xen...

    Вы не отличаете Citrix Xen Server от собственно самого Xen. А сравнивать гипервизоры с коробочными продуктами без каких-либо тестов: это как попугая сравнивать с удавом в попугаях.

    Сами будете спорить с недоучками о гипервизоре в попугаях.

    Аватар zenon

    Последний комментарий порадовал...

    Добавить комментарий