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”
конфигурационный файл интерфейса-бриджа:
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
Привет, spunky.
Какая версия ОС?
Что в /etc/sysconfig/network-scripts/ifcfg-eth0?
Что говорит route -n до запуска скрипта /etc/sysconfig/network-scripts/route-bridge0?
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-*
з.ы. тут в комментариях форматирование нормальное возможно?
Н-да, по-моему все-правильно и с этими параметрами должно без затруднений подцеплять параметр GATEWAY.
ЗЫ: Форматирования пока нет ;(
Думаю, правильным было бы использовать bridge-скрипты из XEN. Не придётся файлы if-* переписывать.
На счет правильности не соглашусь – на мой взгляд правильно использовать те средства которые предлагает производитель софта.
Способ со скриптами из xen и вправду действенный, каждому рекомендую попробовать как альтернативу, может и удобнее даже получится.
Привет!
У меня KVM на CentOS 6! Установлена ВМ win2008, использую паравиртуализированные драйвера, hhd про брошен как блочное устройство!
Проблема в следующем:
когда проверяю скорость чтения записи с помощью SQLIO скорость чтения записи не более 10-13 мег. причем при запущенном SQLIO на CentOS запущен iotop показывает тоже самое
Привет, Sk.
С какими параметрами ты запускаешь SQLIO? При случайном чтении 4к блоков скорость может быть и ниже 5мб/с.
Какую производительность показывают диски на хостовой KVM-системе? Протестированные например при помощи bonnie++.
Параметры 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 везде такая шляпа
НУ конечно не -kW а -kR
Да забыл файл 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
не чего не изменилось! Это уже наверное бред но все таки хочется разобраться!
А ведь все правильно получается – при случайном чтении/записи скорость всегда намного меньше чем при линейном, здесь какой винт не возьми все-равно так будет. В разных программах реализован разный алгоритм тестирования отсюда и разные результаты на эвересте и 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
Таким образом получается что скорость у тебя нормальная, те вполне соответствует оборудованию.
Только вот у меня есть коллега, у него предприятие по крупнее гораздо и у него 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 что бы время не отставало в вертуалке, так все тоже самое -)))
А да ещё отличается тем что у него рейд 5 на 12 дисках, вот думаю на новогодних праздниках провести тесты, пере кон фигурировать свой основной сервак собрать там рейд 5 на 6 дисках! Где то на просторах инета читал форум там чувак выкидывал результаты скорости дисков в вм и получилось что на 5 рейде быстрее, не знаю с чем это связано, но по сути на 10 должно быть быстрее. Скорее всего все ещё зависит от рейд контроллера, просто вот на моей платформе на рейд надо покупать специально ключ для активации 5 рейда, есть подозрение что он заточен под 5 рейд и будет быстрее работать -))
По тесту видно что у твоего твоего коллеги не плохая iscsi получилась, приближенно таких же показателей при случайном чтении/записи удавалось достичь на 6 штуках SAS 15k 146GB в RAID10 с контроллером HP 410i 1Gb.
Смущает в приведенном тесте скорость линейной записи всего 74Мб, но думаю скорее всего это ограничение сетки в 1Гбит/с.
Что касается RAID5 на 12 дисках – сколько помню работали такие массивы не очень-то быстро, даже я сказал бы медленно. Мои тесты пригодности RAID5 для чего либо, пришли к тому кроме файлосвалки их лучше не где не использовать. Тч для систем виртуализации рекомендую RAID10.
На праздниках соберу, протестирую! Результаты выложу! Думаю получиться хорошая статистика -)
“для обеспечения визуализации”
точно для визуализации?
А как настроить bridge поверх bonding?
С предыдущим вопросом разобрался, теперь другая проблема: не могу подключиться по 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
фаервол отключен.
Все, разобрался … Ключ –vnclisten=0.0.0.0 помог
Как-то не крутится сеть. Настраиваю все внутрях виртуалки, но…
Destination Host Unreachable. Видимо про что-то забыли рассказать?
OldMan: тоже после этой статьи никак не мог понять почему не коннектится к внс, пока не заметил, что вешается на локалхост только.
Вы не поверите, но у меня с бриджом сервер периодически перезагружается.. в логах – ничего. Как будто просто от питания отключили. Но с питанием всё впорядке (бесперебойник). Если удалить bridge0, перезагрузок нет.. я прям в недоумении..
Есть хоть какая-нить идея, как узнать в чем дело?
Спасибо.
Полный пиндык, неделю мучаюсь уже. 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 все равно смущает
Доброго времени суток!
поставил KVM на CentOC 6 по данной инструкции, виртуалка поднялась.
Но есть проблема, при первоначальном заходе на виртуалку(WinXP) сеть есть, то есть я могу пинговать шлюз, но через какое то время пинг пропадает и доступа в сеть нет. И в дальнейшем сеть не появляется.
Подскажите что не так я сделал???
заранее спасибо!!!