KVM – это одно из программных решений для обеспечения визуализации в среде Linux. С недавнего времени RedHat отказался от разавития сразу нескольких систем виртуализации Xen и KVM, и начиная с ветки RHEL/CentOS 6 основной системой стала KVM. Главным требованием KVM является наличие поддержки процессором аппаратной визуализации. А модули KVM есть только для архитектуры x86_64.

1. Установка

В первую очередь проверяем поддержку аппаратной виртуализации:

[root@kvmsrv ~]# egrep '(svm|vmx)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority

Если команда ничего не вывела, значит процессор не поддерживает аппаратную виртуализацию и kvm не будет работать, если же мы получили вывод подобный приведенному выше, значит можно приступать к установке. Устанавливаем компоненты и запускаем сервис libvirt:

[root@kvmsrv ~]# yum install kvm libvirt virt-manager
[root@kvmsrv ~]# service libvirtd start
Starting libvirtd daemon:                                  [  OK  ]

Проверяем подгрузились ли необходимые модули KVM – у нас должно получиться два модуля первый kvm, второй kvm_intel или kvm_amd для соответствующего типа процессора.

[root@kvmsrv ~]# lsmod | grep kvm
kvm_intel              45674  0
kvm                   291811  1 kvm_intel

В некоторых случаях не смотря на наличие поддержки аппаратной виртуализации процессором приходится дополнительно включать поддержку виртуализации в BIOS или перепрошивать BIOS последней версией.

2. Настройка сети

Первое что нужно сделать это настроить сетевой мост с основным интефейсом и удалить сеть Default. Сетевой мост позволит компьютерам находящимся в физической сети легко общаться с виртуальным сервером, как будто он находится в той же сети, а виртуальному серверу точно также легко и прозрачно общаться с компьютерами физической сети.

2.1. Настройка моста bridge0

Для примера предположим у нас на сервере виртуализации есть всего один интерфейс eth0 с IP-адресом 192.168.2.50, а конфигурационный файл интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 выглядит следующим образом.

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="1C:6F:65:53:77:D5"
IPADDR=192.168.2.50
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
ONBOOT="yes"

Приводим файл /etc/sysconfig/network-scripts/ifcfg-eth0 к сделующему виду.

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="1C:6F:65:53:77:D5"
BRIDGE=bridge0
ONBOOT="yes"

Создаем /etc/sysconfig/network-scripts/ifcfg-bridge0 и заполняем.

DEVICE="bridge0"
TYPE=Bridge
BOOTPROTO="static"
IPADDR=192.168.2.50
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
ONBOOT="yes"

Перезапускаем сервис network

[root@kvmsrv network-scripts]# service network restart
Shutting down interface eth0:  bridge bridge0 does not exist!
[  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Bringing up interface bridge0:                             [  OK  ]

При желании эту процедуру можно проделать удаленно, например через ssh – в этом случае перезапуск сервиса network вызовет двух-секундную задержку, после чего соединение восстановиться без переподключения. Проверяем созданный мост:

[root@kvmsrv ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
bridge0         8000.1c6f655377d5       no              eth0
virbr0          8000.000000000000       yes

2.2. Удаляем virbr0 (сеть Default)

Сеть Default cоздается при установке и выбирается по умолчанию для сетевого интерфейса виртуальной машины во время установки через virt-install или графический Virtual Manager. Для доступа виртуальных машин к основной сети используется NAT. Скажем так: для хостинга пары-тройки виртуальных машин в локальной сети удобнее использовать мост с основным интерфейсом (bridge0); а для более сложной сетевой структуры (например Linux-роутер с DMZ) логичнее будет настроить виртуальную сеть с нуля.

Просматриваем список виртуальных сетей.

[root@kvmsrv ~]# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes

Отключаем сеть Default

[root@kvmsrv ~]# virsh net-destroy default
Network default destroyed

Удаляем сеть Default

[root@kvmsrv ~]# virsh net-undefine default
Network default has been undefined

Готово.

3. Установка и управление виртуальными машинами.

Для установки и управления виртуальными машинами есть очень удобная программа Virtual Machine Manager (Virt-Manager) для графической среды. Она имеет достаточно понятный интерфейс разобраться в котором без проблем сможет любой среднестатистический системный администратор. Управлять и создавать виртуальные машины также можно и при помощи консоли, это будет немного сложнее, но зато больше возможностей для тонкой настройки.

3.1. Установка виртуальных машин.

Для примета попробуем установить CentOS 6.0:

[root@kvmsrv ~]# virt-install -n vm01 -r 2048 -l http://mirror.yandex.ru/centos/6.0/os/x86_64 -f /vmstore/vm01.img -s 10 --network bridge=bridge0 --vnc

Параметры запуска:

-n - имя виртуальной машины
-r - объем оперативной памяти
-l - расположение файлов для сетевой установки
-f - путь к файлу-контейнеру содержащему диск виртуальной машины
-s - размер файла-котейнера в гигабайтах
--network bridge - подключить виртуальный сетевой интерфейс к сетевому мосту
--vnc - использовать VNC-дисплей

Для продолжения установки нам потребуется подключиться к экрану виртуальной машины через VNC. Для этого проверяем какой порт был выбран для подключения, он может варьироваться начиная от 5900 и далее.

[root@kvmsrv ~]# virsh dumpxml vm01 | grep vnc
<graphics type='vnc' port='5900' autoport='yes' keymap='en-us'/>

Подключаемся по порту 5900 и завершаем установку.

3.2. Управление машинами

Главный консольный инструмент управления виртуальными машинами – программа virsh. Первое что мы можем сделать это просмотреть список всех виртуальных машин и их состояние:

[root@kvmsrv ~]# virsh list --all
Id Name                 State
----------------------------------
- vm01                 shut off

Запускаем виртуальную машину vm01:

[root@kvmsrv ~]# virsh start vm01
Domain vm01 started

Останавливаем – равносильно выключению компьютера из розетки

[root@kvmsrv ~]# virsh destroy vm01
Domain vm01 destroyed

Параметры виртуальных машин можно менять редактируя xml файлы. Один вариант, сохранить конфигурацию в xml-формате.

[root@kvmsrv ~]# virsh dumpxml vm01 > vm01.xml

Отредактировать любимым редактором vm01.xml и загрузить его обратно:

[root@kvmsrv ~]# virsh define vm01.xml
Domain vm01 defined from vm01.xml

Другой – воспользоваться функцией virsh edit, она автоматом откроет редактор настроенный в системе по умолчанию, а по окончании редактирования сохранит конфигурацию.

[root@kvmsrv ~]# virsh edit vm01

В большинстве систем редактором по умолчанию установлен vim, если он вам не нравится его вполне можно заменить например на mcedit или nano:

[root@kvmsrv ~]# echo "export EDITOR=mcedit" >> .bash_profile

Для применения параметров нужно перелогиниться.

 

24 Коммент. : “Настройка KVM в CentOS 6”

  1. spunky пишет:

    конфигурационный файл интерфейса-бриджа:
    DEVICE=»bridge0″
    TYPE=Bridge
    BOOTPROTO=»static»
    IPADDR=192.168.2.50
    NETMASK=255.255.255.0
    GATEWAY=192.168.2.1
    ONBOOT=»yes»

    у меня по какой-то причине не срабатывает опция GATEWAY, так что пользуюсь скриптом
    /etc/sysconfig/network-scripts/route-bridge0

    default via 192.168.2.1

  2. Alsigned пишет:

    Привет, spunky.

    Какая версия ОС?
    Что в /etc/sysconfig/network-scripts/ifcfg-eth0?
    Что говорит route -n до запуска скрипта /etc/sysconfig/network-scripts/route-bridge0?

  3. spunky пишет:

    CentOS6
    [/etc/sysconfig/network-scripts/ifcfg-eth0]
    DEVICE=eth0
    BOOTPROTO=none
    ONBOOT=yes
    BRIDGE=wan
    USERCTL=no

    [/etc/sysconfig/network-scripts/ifcfg-wan]
    DEVICE=wan
    TYPE=Bridge
    BOOTPROTO=static
    ONBOOT=yes
    NETWORK=188.94.172.255
    NETMASK=255.255.255.0
    IPADDR=188.94.172.200
    USERCTL=no

    [/etc/sysconfig/network-scripts/route-wan]
    default via 188.94.172.254

    Если в ifcfg-wan прописать GATEWAY=188.94.172.254 (и убрать route-wan), то машина запускается без маршрута по умолчанию. Проверял и на физических интерфейсах (не в бриджах), и на влан-ах, директива GATEWAY из ifcfg-* не срабатывает. Маршруты (в том числе и ДГ) добавляются только через route-* и rule-*

    з.ы. тут в комментариях форматирование нормальное возможно?

  4. Alsigned пишет:

    Н-да, по-моему все-правильно и с этими параметрами должно без затруднений подцеплять параметр GATEWAY.

    ЗЫ: Форматирования пока нет ;(

  5. Юрий пишет:

    Думаю, правильным было бы использовать bridge-скрипты из XEN. Не придётся файлы if-* переписывать.

  6. Alsigned пишет:

    На счет правильности не соглашусь – на мой взгляд правильно использовать те средства которые предлагает производитель софта.

    Способ со скриптами из xen и вправду действенный, каждому рекомендую попробовать как альтернативу, может и удобнее даже получится. ;)

  7. Sk пишет:

    Привет!
    У меня KVM на CentOS 6! Установлена ВМ win2008, использую паравиртуализированные драйвера, hhd про брошен как блочное устройство!
    Проблема в следующем:
    когда проверяю скорость чтения записи с помощью SQLIO скорость чтения записи не более 10-13 мег. причем при запущенном SQLIO на CentOS запущен iotop показывает тоже самое

  8. Alsigned пишет:

    Привет, Sk.

    С какими параметрами ты запускаешь SQLIO? При случайном чтении 4к блоков скорость может быть и ниже 5мб/с.

    Какую производительность показывают диски на хостовой KVM-системе? Протестированные например при помощи bonnie++.

  9. Sk пишет:

    Параметры SQLIO
    sqlio -kW -s60 -frandom -o8 -b64 -LS -Fparam.txt > test1.txt
    timeout /T 10

    sqlio -kW -s60 -frandom -o8 -b64 -LS -Fparam.txt >> test1.txt
    timeout /T 60

    При таком вот раскладе IOPS 180 и 11 MBs

    Причем если этим же SQLIO при таких же параметра но только линейное чтение то вполне адекватные показание и график виртуал менеджера показывает 100-110 MBs
    Уже делал тесты IOmeter и HPtunpro везде такая шляпа

  10. Sk пишет:

    НУ конечно не -kW а -kR

  11. Sk пишет:

    Да забыл файл param.txt содержит следующие c:\testfile.dat 2 0×0 10240
    ВМ -windows xp
    диск virtio LVM
    Причем запустил тесты на эверест там адекватные тесты получается что:
    Линейное чтение блок 64 кб 113 Мб/с CPU 39%
    Случайное чтение 111 Мб/с CPU 41%

    SQLIO –
    Линейное чтение запись 112 MB/s
    Случайное чтение запись 13 Мb/s
    при этом sqlio не грузит проц вообще ни как!

    На хосте проверял при помощи dd так как пока нету времени разбираться с предложенной утилитой!
    Заполнение LVM посекторно происходит на скорость 119 мб/с то есть получается опять же линейная запись! Да все происходит на обыкновенном WD 7200 1TB
    В принципе для линейной скорости показатели хорошие, где кроется
    загвоздка рандомной скорости уже все голову сломал! При чём есть ещё один хост квм только уже с аппаратным рейдом 10 на scsi 7200
    с прослойкой LVM там такая же песня -))))
    Думал проблема в LVM установил в img тут вобще уменя пострашному тупит, ладно установил ещё один HDD на хост на него установил свежий CentOS установил все чето надо для KVM , побил WD 1Tb на разделы не форматирую, пробросил на прямую в ВМ /dev/sdb1 virtio
    не чего не изменилось! Это уже наверное бред но все таки хочется разобраться!

  12. Alsigned пишет:

    А ведь все правильно получается – при случайном чтении/записи скорость всегда намного меньше чем при линейном, здесь какой винт не возьми все-равно так будет. В разных программах реализован разный алгоритм тестирования отсюда и разные результаты на эвересте и SQLIO.

    Провожу точно такое же тестирование на разных трех винтах, реальная ос Windows 7 x64, камень Core i5:
    sqlio -kW -s60 -frandom -o8 -b64 -LS -Fparam.txt
    SATA HP GB0750EAMYB – 16.58 Мб/с
    SATA WD WD75000AALX – 16.36 Мб/с
    SSD SSDSA2M160G2GC – 55.76 Мб/c

    Таким образом получается что скорость у тебя нормальная, те вполне соответствует оборудованию.

  13. Sk пишет:

    Только вот у меня есть коллега, у него предприятие по крупнее гораздо и у него 12 виртуалок и под них специально а отдельной итоловской платформе сделан iSCSI хранилище, и вот какие интересны показания SQLIO он мне прислал:

    c:\SQLIO>sqlio -kW -s60 -frandom -o8 -b64 -LS -Fparam.txt
    sqlio v1.5.SG
    using system counter for latency timings, 3579545 counts per second
    parameter file used: param.txt
    file c:\testfile.dat with 4 threads (0-3) using mask 0×0 (0)
    4 threads writing for 60 secs to file c:\testfile.dat
    using 64KB random IOs
    enabling multiple I/Os per thread with 8 outstanding
    size of file c:\testfile.dat needs to be: 10737418240 bytes
    current file size: 0 bytes
    need to expand by: 10737418240 bytes
    expanding c:\testfile.dat … done.
    using specified size: 10240 MB for file: c:\testfile.dat
    initialization done
    CUMULATIVE DATA:
    throughput metrics:
    IOs/sec: 1120.64
    MBs/sec: 70.04
    latency metrics:
    Min_Latency(ms): 1
    Avg_Latency(ms): 28
    Max_Latency(ms): 12533
    histogram:
    ms: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
    %: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 85 6 1 0 0 0 1

    c:\SQLIO>sqlio -kW -s60 -frandom -o8 -b128 -LS -Fparam.txt
    sqlio v1.5.SG
    using system counter for latency timings, 3579545 counts per second
    parameter file used: param.txt
    file c:\testfile.dat with 4 threads (0-3) using mask 0×0 (0)
    4 threads writing for 60 secs to file c:\testfile.dat
    using 128KB random IOs
    enabling multiple I/Os per thread with 8 outstanding
    using specified size: 10240 MB for file: c:\testfile.dat
    initialization done
    CUMULATIVE DATA:
    throughput metrics:
    IOs/sec: 593.81
    MBs/sec: 74.22
    latency metrics:
    Min_Latency(ms): 3
    Avg_Latency(ms): 53
    Max_Latency(ms): 12042
    histogram:
    ms: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
    %: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100

    c:\SQLIO>sqlio -kW -s60 -fsequential -o8 -b64 -LS -Fparam.txt
    sqlio v1.5.SG
    using system counter for latency timings, 3579545 counts per second
    parameter file used: param.txt
    file c:\testfile.dat with 4 threads (0-3) using mask 0×0 (0)
    4 threads writing for 60 secs to file c:\testfile.dat
    using 64KB sequential IOs
    enabling multiple I/Os per thread with 8 outstanding
    using specified size: 10240 MB for file: c:\testfile.dat
    initialization done
    CUMULATIVE DATA:
    throughput metrics:
    IOs/sec: 1181.47
    MBs/sec: 73.84
    latency metrics:
    Min_Latency(ms): 1
    Avg_Latency(ms): 26
    Max_Latency(ms): 1003
    histogram:
    ms: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+
    %: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 18 12 8 7 10 7 35

    Параметры один в один, собственно почему я этим и озадачился -)))
    Пробовал тоже вставлять прослойку iSCSI показания теже только естественно на проц нагрузка возрастает! Я го долго мучал он мне прислал мануал который сам написал и ставил по нему в принципе нечего сверх естественного единственное добавлен ntp и sntp что бы время не отставало в вертуалке, так все тоже самое -)))

  14. Sk пишет:

    А да ещё отличается тем что у него рейд 5 на 12 дисках, вот думаю на новогодних праздниках провести тесты, пере кон фигурировать свой основной сервак собрать там рейд 5 на 6 дисках! Где то на просторах инета читал форум там чувак выкидывал результаты скорости дисков в вм и получилось что на 5 рейде быстрее, не знаю с чем это связано, но по сути на 10 должно быть быстрее. Скорее всего все ещё зависит от рейд контроллера, просто вот на моей платформе на рейд надо покупать специально ключ для активации 5 рейда, есть подозрение что он заточен под 5 рейд и будет быстрее работать -))

  15. Alsigned пишет:

    По тесту видно что у твоего твоего коллеги не плохая iscsi получилась, приближенно таких же показателей при случайном чтении/записи удавалось достичь на 6 штуках SAS 15k 146GB в RAID10 с контроллером HP 410i 1Gb.

    Смущает в приведенном тесте скорость линейной записи всего 74Мб, но думаю скорее всего это ограничение сетки в 1Гбит/с.

    Что касается RAID5 на 12 дисках – сколько помню работали такие массивы не очень-то быстро, даже я сказал бы медленно. Мои тесты пригодности RAID5 для чего либо, пришли к тому кроме файлосвалки их лучше не где не использовать. Тч для систем виртуализации рекомендую RAID10.

  16. Sk пишет:

    На праздниках соберу, протестирую! Результаты выложу! Думаю получиться хорошая статистика -)

  17. keltanas пишет:

    «для обеспечения визуализации»
    точно для визуализации?

  18. Oldman пишет:

    А как настроить bridge поверх bonding?

  19. Oldman пишет:

    С предыдущим вопросом разобрался, теперь другая проблема: не могу подключиться по VNC. Выдает ошибку Connection failed – End of Stream
    вывод при добавлении ВМ
    virt-install -n Win7 -r 2048 -f /home/common/virt/win7.img -s 40 -c /home/common/public/W7AIO.x86.120317.RU-CtrlSoft.iso –accelerate –os-type=windows –os-variant=vista -v –vnc -w bridge:bridge0

    Starting install…
    Creating domain… | 0 B 00:00
    Не удалось открыть дисплей:
    Run ‘virt-viewer –help’ to see a full list of available command line options
    Domain installation still in progress. Waiting for installation to complete.

    вывод virsh dumpxml Win7 | grep vnc

    вывод virsh list –all
    ID Имя Статус
    ———————————-
    6 Win7 работает

    вывод netstat -nlp
    tcp 0 0 127.0.0.1:5900 0.0.0.0:* LIST

    фаервол отключен.

  20. Oldman пишет:

    Все, разобрался … Ключ –vnclisten=0.0.0.0 помог :)

  21. Роман пишет:

    Как-то не крутится сеть. Настраиваю все внутрях виртуалки, но…
    Destination Host Unreachable. Видимо про что-то забыли рассказать?

    OldMan: тоже после этой статьи никак не мог понять почему не коннектится к внс, пока не заметил, что вешается на локалхост только.

  22. Макс пишет:

    Вы не поверите, но у меня с бриджом сервер периодически перезагружается.. в логах – ничего. Как будто просто от питания отключили. Но с питанием всё впорядке (бесперебойник). Если удалить bridge0, перезагрузок нет.. я прям в недоумении..
    Есть хоть какая-нить идея, как узнать в чем дело?
    Спасибо.

  23. Роман пишет:

    Полный пиндык, неделю мучаюсь уже. Centos6.2, все устанавливается и тп, но из виртуалки виден только ip хост машины и все. На другом сервере с Centos6.0 сделал все то же самое – работает без проблем. То ли политика дата-центра сетевая где-то глючит, то ли в новых версиях софта что-то не то, то ли сетевуха тупит.
    Относительно последнего варианта – ведь на хосте же работает сеть через этот мост, могут быть именно с мостом железные проблемы? Уже не знаю куда копать, докопал до:

    lspci -vv

    03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
    Subsystem: Hewlett-Packard Company NC373i Integrated Multifunction Gigabit Server Adapter
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
    Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- SERR- <PERR- INTx-
    Latency: 64 (16000ns min), Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 30
    Region 0: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
    [virtual] Expansion ROM at d0100000 [disabled] [size=2K]
    Capabilities: [40] PCI-X non-bridge device
    Command: DPERE- ERO- RBC=512 OST=8
    Status: Dev=03:00.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=512 DMOST=8 DMCRS=32 RSCEM- 266MHz- 533MHz-
    Capabilities: [48] Power Management version 2
    Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot+,D3cold+)
    Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
    Capabilities: [50] Vital Product Data
    Product Name: HP NC373i Multifunction Gigabit Server Adapter
    Read-only fields:
    [PN] Part number: N/A
    [EC] Engineering changes: N/A
    [SN] Serial number: 0123456789
    [MN] Manufacture ID: 31 30 33 43
    [RV] Reserved: checksum good, 37 byte(s) reserved
    End
    Capabilities: [58] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Address: 00000000feeff00c Data: 41b1
    Kernel driver in use: bnx2
    Kernel modules: bnx2

    смущает строка
    PCI-X non-bridge device
    не знаю про что это, но non-bridge все равно смущает

  24. ZAS пишет:

    Доброго времени суток!
    поставил KVM на CentOC 6 по данной инструкции, виртуалка поднялась.
    Но есть проблема, при первоначальном заходе на виртуалку(WinXP) сеть есть, то есть я могу пинговать шлюз, но через какое то время пинг пропадает и доступа в сеть нет. И в дальнейшем сеть не появляется.
    Подскажите что не так я сделал???
    заранее спасибо!!!

Оставить комментарий