В этой записке описана установка и базовая настройка гипервизора KVM на CentOS 6.7 x64.
Цель установки: получить сервер виртуализации, на котором будут крутится две гостевые системы Windows и Linux.
С помощью виртуализации, один мощный физический сервер, может запускать виртуальные сервера (гостевые системы) разного рода назначения, например:
- Доменный контроллер
- Почтовый сервер
- Шлюз в интернет
- Файловый сервер для общих папок
- Программная АТС
- СЭД
- Система учета 1С
- и т. д.
Виртуализация имеет следующие преимущества:
- Экономия электроэнергии
- Легкое резервное копирование виртуальных машин
- Простое восстановление виртуальной машины из резервной копии
- Консолидация - управление всеми виртуальными серверами сидя только за одним физическим
- Высокая доступность и отказоустойчивость - если у вас есть в наличии 4 или 5 серверов
При настройке KVM для нормальной работы и более лучшей производительности требуется использовать:
- Планировщик "deadline" на хосте где запущен KVM и "noop" в гостевых ОС.
- LVM тома для хранения виртуальных машин
- Специальные драйвера "virtio" в гостевых системах для жесткого диска и сетевой платы
- Рейд массив или ISCSI устройство с быстрыми HDD или SSD с большим IOPS
- Демон ntp для точного времени
- ОС семейства Red Hat.
Краткое содержание:
1. Установка CentOS 6.7 x64 и создание программного рейд массива
1.2. Выбор режима установки
1.3. Проверка установочного диска на чтение
1.4. Первое окно установки
1.5. Выбор языка интерфейса установщика
1.6. Выбор раскладки клавиатуры
1.7. Выбор типа дискового устройства
1.8. Задание имени хоста
1.9. Выбор часового пояса
1.10. Задание пароля учетной записи Супер Администратора - root
1.11. Выбор предпочитаемого типа установки
1.12. Окно для создания разделов на дисках
1.13. Создание разделов на системном жестком диске 80 Гбайт
1.14. Создание программного рейд массива из двух дисков 250Гб
1.15. Выбор жесткого диска и установка CentOS
2. Настройка сетевого адаптера сервера
2.1. Отключение selinux и iptables
3. Установка KVM
3.1. Подготовка хранилище для виртуальных машин
3.2. Настройка сети
3.3. Настройка сетевого моста
3.4. Создание гостевых виртуальных машин
3.5. Доступ к созданным виртуальным машинам через VNC
3.6. Графическое управление машинами через Virtual Machine Manager
3.7. Резервное копирование образов виртуальных машин
3.8. Восстановление виртуальной машины из резервной копии
Все начинается с банальной установки операционной системы, это можно было пропустить, но так как при установке ОС делается программный массив, я не стал обделять вниманием этот важный этап. Важно, чтобы виртуальные гостевые машины работали в рейд массиве. Это ускоряет работу из за быстрого считывания данных с одновременно двух работающих жестких дисков, а также позволяет защитить данные в случае поломки одного из дисков в массиве.
Конфигурация сервера на который будет установлена ОС:
CPU Phenom II X4 955\RAM 4Gb\HDD1 80Gb\HDD2 250Gb\HDD3 250Gb
Как видим, у нас процессор поддерживает аппаратную виртуализацию. Конечно памяти мало, желательно чтобы ее было примерно 32Гб или 16Гб, а может даже больше. Ну и конечно лучше ставить ОЗУ с ECC, это может избавить Вас от не понятных глюков. По процессору, желательно чтобы был "камень" многоядерный (4 и более) и высокочастотный. Например наша 1С все еще использует одно ядро, и на ее работу влияет частота процессора, поэтому CPU должен быть с частотой 3 гГц и выше.
По дисковой подсистеме, если у вас маленькая компания, сойдут обычные жесткие диски большого объема 2 или 4 Тб, можно купить так называемые серверные версии (Western Digital WD RE, Hitachi Ultrastar или Seagate Constellation ES). Хотя в моем сервере работают обычные Samsung с оборотами 7200/мин. На резвость работы влияет ключевой параметр жестких и твердотельных дисков под названием IOPS, то есть количество операций ввода/вывода в секунду которые дисковое устройство может обработать.
Лучше конечно же использовать iSCSI устройство под хранилище виртуальных машин, которое связывают с сервером гипервизором посредством 10 Гбитного сетевого соединения, разумеется это все стоит не малых денег, поэтому данный вариант не рассматривается в записке. Хотя возможно в будущем будет новая записка описывающая систему виртуализации с использованием 4-х или 5-и серверов. Такое решение предлагает отказоустойчивость вкупе с высокой доступностью, такой вариант подойдет для крупной компании, чего не скажешь о текущем standalone (автономном) KVM сервере о котором идет речь в записке. По этой записке был поднят один реальный сервер, который по сей день трудится в компании с численностью сотрудников 10 человек. Иногда у меня появляется страшная мысль на счет этого сервера: А вдруг сервер сгорит?
Чтобы не приходило такое счастье в ваш мозг: не жалейте денег, делайте все по уму, раз решили внедрить виртуализацию у себя в компании. Хотя бы посмотрите на систему виртуализации oVirt или Proxmox, и начните правильно организовывать виртуальные машины.
Поэтому, чтобы ваши нервы были целы и не было лишних опасений, лучше настроить отказоустойчивость этого самого элемента (сервера). Для организации такой системы, вам потребуется как минимум 4 сервера или лучше даже 5 (можно больше). Рассмотрим пример с 4 серверами, кратко напишу про схему работы системы виртуализации в таком случае:
- Выделим два сервера под хранилище данных (СХД). На каждом таком сервере должны быть установлены по два жестких диска для рейд массива уровня 1 - зеркалирования. Далее через DRBD или GlusterFS надо связать эти два сервера СХД чтобы они реплицировали данные зеркального массива между собой. Для обеспечения высокой доступности на эти сервера необходимо установить HeartBeat, чтобы он автоматически выбирал master или slave СХД в случае не доступности одного или другого. На таких серверах нужно создать LVM тома под каждую виртуальную машину - гостя.
- Выделим два сервера под виртуализацию для гипервизоров KVM. Это уже получается 4 сервера, для настройки отказоустойчивости за место HeartBeat здесь можно применить Pacemaker, чтобы он автоматически активировал нужный сервер виртуализации KVM при недоступности одного из двух.
Чтобы не настраивать в ручную такие сервисы как DRBD, HeatBeat и Pacemaker, существует готовая система виртуализации по имени oVirt. Рекомендую ознакомиться с данной системой.
1. Установка CentOS 6.7 x64 и создание программного рейд массива
Прежде чем приступить установите на ваш сервер операционную систему CentOS 6 x32, образ ISO этой операционной системы вы можете найти на следующих ресурсах:
http://mirror.yandex.ru/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso
http://mirror.neolabs.kz/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso
Запишите на DVD диск скачанный ISO образ и потом вставьте его в DVD привод вашего сервера. Запустите Ваш сервер, ниже я написал про установку CentOS.
1.2. Выбор режима установки
В этом окошке, выберите первый пункт- "Установка или обновление существующей системы"
1.3. Проверка установочного диска на чтение
Здесь установщик предлагает нам проверить читаемость DVD диска. Уверенно нажимаем кнопку "Skip"
1.4. Первое окно установки
Здесь жмем кнопку "Next" (Далее)
1.5. Выбор языка интерфейса установщика
Здесь нам предлагают выбрать язык установщика, по умолчанию стоит английский, оставим все как есть.
1.6. Выбор раскладки клавиатуры
Раскладка клавиатуры, выбираем U.S. English или Russian, кому как удобно.
1.7. Выбор типа дискового устройства
Здесь нам задают вопрос: на какой тип дискового устройства производится установка.
Мы устанавливаем систему на обычный SATA диск, поэтому выберем "Basic Storage Device", в противном случае выберите "Specialized Storage Device" если у вас SCSI контроллер или другое устройство.
Здесь нас предупреждают что жесткий диск в порту SATA 0 возможно содержит данные.
Так как у нас сервер новый, мы уверены что на диске 80Gb нету данных, поэтому щелкаем - Yes, discard any data
1.8. Задание имени хоста
Здесь мы задаем имя хоста (компьютера), нажмите "Next" чтобы продолжить.
1.9. Выбор часового пояса
Настройки часового пояса, выберите ваш часовой пояс и нажмите "Next"
1.10. Задание пароля учетной записи Супер Администратора - root
Пароль супер пользователя (Администратора), введите в этом окне Ваш пароль два раза и запомните его.
1.11. Выбор предпочитаемого типа установки
Здесь установщик предлагает создать разделы и с их последующим форматированием.
По умолчанию предлагается режим "Replace Existing Linux System (s)". То есть удалить текущие Linux разделы и установить.
Нас это не устраивает, поэтому выбираем - Create Custom Layout
1.12. Окно для создания разделов на дисках
В этом окошке можно создавать разделы, в нем мы создадим рейд массив.
У нас 3 жестких диска:
- На первом жестком диске с объемом 80 Гбайт (sda)- установим операционную систему, он у нас будет системным.
- Из двух пустых HDD 250Гб (sdb и sdc)- создадим программный рейд массив, куда и будут устанавливаться гостевые виртуальные машины.
1.13. Создание разделов на системном жестком диске 80 Гбайт
Жесткий диск 80 Гбайт (имя в системе - sda) разделим на разделы:
/ - корневой раздел, обычно под этот раздел выделяют 20 Гбайт, в нем хранятся системные файлы
/home - этот раздел содержит пользовательские данные, внутри него находятся папки “Desktop” (Рабочий стол), “Documents” (Документы) и т.д. Советую вам выделить 10 Гбайт дискового места под него, в случае если туда не копировать видео/аудио файлы.
/swap - этот раздел содержит в себе файл подкачки. При объеме ОЗУ 1 Гбайт, размер раздела должен быть 2 Гб. Если на сервере 2 Гб ОЗУ, то соответственно под раздел Swap можно отдать 4 Гбайт дискового места
/var - главный и важный раздел, в этот раздел пишутся логи, в нем находятся базы данных MySQL и закаченные RPM пакеты и т.д. Этот раздел активно используется установленными программами. Исходя из этого, выделяем под этот раздел все оставшееся место на диске.
Нажимаем кнопку - Create (Создать)
Выбираем - Standart Partition
Нажимаем кнопку - Create
Здесь:
- В Mount Point выбираем корневой раздел - /
- В File System Type ставим ext4
- Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
- В Size (MB) ставим 20000.
- В Additional Size Options - Fixed size
- Нажимаем ОК
Вот такими простыми движениями мы создали корневой раздел / с дисковым местом в 20 Гб. Посмотрите на картинке возле созданного раздела появилась "галка".
Давайте аналогичным образом создадим раздел /home
Нажимаем кнопку - Create
Нажимаем опять кнопку - Create
Здесь:
- В Mount Point выбираем домашний раздел - /home
- В File System Type ставим ext4
- Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
- В Size (MB) ставим 10000.
- В Additional Size Options - Fixed size
- Нажимаем ОК
Возле созданного раздела /home появилась "галка".
Раздел /swap практически также создается:
Нажимаем кнопку для создания раздела - Create
Нажимаем опять кнопку - Create
Здесь:
- Mount Point - не трогаем
- В File System Type ставим swap
- Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
- В Size (MB) ставим 2000.
- В Additional Size Options - Fixed size
- Нажимаем ОК
Раздел swap - создан! Возле него появилась "галка".
Теперь осталось создать раздел /var
Нажимаем :), кнопку Create
Опять этот Create...
Нажимаем.
Здесь:
- В Mount Point выбираем раздел - /var
- В File System Type ставим ext4
- Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
- Size (MB) - не трогаем.
- В Additional Size Options - Fill to maximum allowable size (все доступное место).
- Нажимаем ОК
Тем самым мы создали раздел /var и дали ему все оставшееся место на диске 80Гб. А это примерно 51 232Мб (51 Гбайт).
Итоговое окно должно примерно быть таким:
Диск sda полностью готов для установки на него операционной системы CentOS.
Но, осталась создать программный рейд массив. Поэтому не выходите с окна создания разделов (не нажимайте кнопку Next).
1.14. Создание программного рейд массива из двух дисков 250Гб
Лучше конечно создавать LVM разделы (тома). Но, думаю пока сойдут классические разделы на файловой системе ext4.
В окне создания разделов нажимаем кнопку - Create
Выделите - RAID Partition
И нажмите - Create
Здесь делаем:
- Mount Point - не активный (не трогаем его)
- В File System Type стоит уже - software RAID (не трогаем)
- Ставим галку в Allowable Drives на диске sdb, как на картинке.
- Size (MB) - не трогаем.
- Обязательно в Additional Size Options ставим Fill to maximum allowable size (все доступное место).
- Нажимаем ОК
Получится вот такое окно.
Повторяем такие же действия для жесткого диска sdc:
В окне создания разделов нажимаем кнопку - Create
Выделите - RAID Partition
И нажмите - Create
Здесь ставим:
- Mount Point - не активный (не трогаем его)
- В File System Type стоит уже - software RAID (не трогаем)
- Ставим галку в Allowable Drives на диске sdc, как на картинке.
- Size (MB) - не трогаем.
- Обязательно в Additional Size Options ставим Fill to maximum allowable size (все доступное место).
- Нажимаем ОК
Итоговое окошко:
Два жестких диска с типом файловой системы - software RAID.
Для нормальной работы этого мало, требуется эти два диска объединить в массив.
Как обычно, нажимаем кнопку - Create
Выбираем - RAID Device.
Здесь ставим:
- Mount Point - не трогаем (точку монтирования зададим потом сами).
- В File System Type - должно стоят ext4
- RAID Device - md0
- RAID Level - RAID1
- RAID Members - sdb1, sdc
- Нажимаем ОК
Итоговое окно с уже готовым рейд массивом:
1.15. Выбор жесткого диска и установка CentOS
Здесь выделяем диска sda как на картинке и нажимаем кнопку NEXT.
Нажимаем - Format
Нажимаем - Write changes to disk
Здесь настройки загрузчика ОС. Нам пишут что он будет установлен на диск sda, нам это и нужно.
Так как, именно sda диск у нас системный.
Нажимаем NEXT.
Здесь нам предлагают установить CentOS с минимальным набором программного обеспечения. Нас это устраивает.
Нажимаем NEXT.
Процесс установки CentOS.
В этом окне вас поздравляют и говорят что установка завершена.
Нажимаем Reboot для перезагрузки.
2. Настройка сетевого адаптера сервера
Вводим логин Супер Администратора - root, и его пароль который мы задавали во время установки CentOS.
Все, мы вошли по администратором в установленную систему.
Наш сервер имеет всего один сетевой адаптер, после установки CentOS, настройки этого адаптера хранятся в файле "/etc/sysconfig/network-scripts/ifcfg-eth0".
По умолчанию этот файл содержит следующие настройки
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="yes"
ONBOOT="no"
Следует дописать в этот файл дополнительные настройки, подправим содержимое этого файла, открываем его в текстовом редакторе vi:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
Чтобы внести текст в файл, нажмите клавишу "INS" -это активирует режим редактирования, переведет вас с режима просмотра в режим редактирования. После чего вводите новые данные. Обычно после нажатия "INS", текст вставляется комбинацией "SHIFT"+"INS".
По окончанию ввода текста, нажмите кнопку "ESC" и потом нажмите одновременно кнопки "SHIFT+z+z" или введите ":w!" и потом нажмите "ENTER" - это делается для сохранения файла и выхода с редактора. Выход без сохранения файла "q!" и "ENTER".
Поиск файла в редакторе vi делается путем нажатия кнопки "/", далее вводится текст который нужно найти.
DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="no"
ONBOOT="yes"
GATEWAY=192.168.1.250
IPADDR=192.168.1.2
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
Здесь мы дописали IP адрес нашего сервера/компьютера, его подсеть и шлюз в Интернет.
Перезапустим сетевую службу:
# service network restart
nameserver 192.168.1.250 //Первичный DNS
2.1. Отключение selinux и iptables
В моем примере я не использую SELINUX и цепочку iptables - RH-INPUT. Поэтому желательно их отключить.
Отключение SELINUX:
# vi /etc/selinux/config
SELINUX=disabled
# setenforce 0
Отключение IPTABLES:
Также отключите встроенную цепочку Iptables под названием RH-INPUT:
# setup
Далее в окошке выбираем -> FireWall Configuration -> Firewall Enabled -> Убрать звездочку -> OK
Если не срабатывает команда "setup", установите следующие пакеты:
# yum install system-config-firewall-tui setuptool
3. Установка KVM
До установки KVM необходимо проверить поддержку аппаратной виртуализации процессора:
# egrep '(vmx|svm)' /proc/cpuinfo
Если вы видите вывод любового текста, значит поддержка присутствует. Иногда бывает данную возможность процессора отключают в BIOS, поэтому желательно проверить включена ли данная функция.
# yum install kvm libvirt virt-install virt-viewer -y
# service libvirtd start
Проверка, должен выйти вывод (любой):
# lsmod | grep kvm
kvm_amd 85256 0
kvm 225824 2 ksm,kvm_amd
Если есть вывод, значить аппаратная виртуализация включена!
3.1. Подготовка хранилище для виртуальных машин
Обычно хранилищем выступает рейд массив из нескольких жестких дисков.
Так как у нас нет аппаратного рейд контроллера, сделан программный рейд массив уровня 1 (зеркалирования).
Во время установки операционной системы мы создали массив, но не подключили его. Давайте подключим и настроим хранение виртуальных машин на нем.
Проверяем состояние массива:
# cat /proc/mdstat
Personalities : [raid1]
md127 : active (auto-read-only) raid1 sdc1[1] sdb1[0]
262102848 blocks super 1.1 [2/2] [UU]
resync=PENDING
bitmap: 1/2 pages [4KB], 65536KB chunk
unused devices: <none>
Видим что в массиве два диска sdc1 и sdb1, все хорошо. Только вот имя массива md127, а не md0 как было при установке.
Чтобы устранить это, надо записать информацию о рейд дисках в конфигурационный файл утилиты mdadm, которая отвечает за рейд массив:
ARRAY /dev/md/localhost.localdomain:0 level=raid1 num-devices=2 metadata=1.1 name=localhost.localdomain:0 UUID=a063296e:41c3c5ee:9b40c76e:5ec12e6ddevices=/dev/sdb1,/dev/sdc1
# mdadm --detail --scan --verbose > /etc/mdadm.conf
Теперь перезагружаемся:
# reboot
И проверяем софт рейд:
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
262102848 blocks super 1.1 [2/2] [UU]
bitmap: 0/2 pages [0KB], 65536KB chunk
unused devices: <none>
Видим что массив переименовался в md0. Обратите внимание на две буквы в квадратных скобках [UU]. Если здесь всего одна буква U, но два диска, значит диски в массиве не синхронизируются между собой или в массиве всего один диск. Две буквы UU означают что массив полноценный.
Примонтируем массив:
# mkdir /mnt/vm_images
# mount /dev/md0 /mnt/vm_images
# chmod 700 /mnt/vm_images
И посмотрим на свободное место:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 1.1G 18G 6% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda2 9.7G 150M 9.0G 2% /home
/dev/sda5 50G 318M 47G 1% /var
/dev/md0 247G 188M 234G 1% /mnt/vm_images
Видим что в массиве md0 234 Гб свободно.
Настроим автоматическое монтирование массива во время загрузки:
Открываем файл и в конец добавляем строчку:
# vi /etc/fstab
/dev/md0 /mnt/vm_images ext4 defaults 1 2
Можно еще сделать более лучше, монтировать в rc.local, чтобы система не упала если произойдет какой нибудь глюк с HDD:
# chmod +x /etc/rc.d/rc.local
# vi /etc/rc.d/rc.local
/bin/mount -t ext4 /dev/md0 /mnt/vm_images
Указываем где хранить виртуальные машины:
# virsh pool-define-as vm_images_dir dir - - - - "/mnt/vm_images"
Pool vm_images_dir defined
Проверяем наш пул:
# virsh pool-list --all
Name State Autostart
-----------------------------------------
vm_images_dir inactive no
Видим что хранилище не готово (не активно). Активируем его командами:
# virsh pool-build vm_images_dir
Pool vm_images_dir built
Стартуем хранилище:
# virsh pool-start vm_images_dir
Pool vm_images_dir started
И добавляем автозагрузку пула:
# virsh pool-autostart vm_images_dir
Pool vm_images_dir marked as autostarted
Проверяем:
# virsh pool-list --all
Name State Autostart
-----------------------------------------
vm_images_dir active yes
Стоит Active и Yes, так должно быть.
Итоговая проверка:
# virsh pool-info vm_images_dir
Name: vm_images_dir
UUID: 76057ae7-3f5d-dbb9-0929-ac570695e3e5
State: running
Persistent: yes
Autostart: yes
Capacity: 246.04 GiB
Allocation: 187.09 MiB
Available: 245.86 GiB
Если вдруг у вас появилось хранилище по умолчанию default, его можно удалить:
# virsh pool-destroy default
Pool default destroyed
# virsh pool-undefine default
Pool default has been undefined
Настройка хранилище LVM
Если хотите использовать в качестве хранилище LVM группу, сохраните все образы машин и конфигурации и приступите к инструкции:
# virsh pool-destroy vm_images_dir
Pool vm_images_dir destroyed
# virsh pool-undefine vm_images_dir
Pool vm_images_dir has been undefined
Создайте группу томом LVM на софтовом массиве:
# fdisk /dev/md0
> нажмите - n (создание нового раздела)
> нажмите - p (создание первичного раздела)
> нажмите - 1 (номер раздела)
> нажмите - Enter (First Cylinder)
> нажмите - Enter (Last Cylinder)
> нажмите - t (чтобы задать тип раздела)
> нажмите - 8e (чтобы указать LVM)
> нажмите - w (чтобы сохранить настройки)
Для проверки введите:
# fdisk -l /dev/md0
Disk /dev/md0: 268.4 GB, 268393316352 bytes
255 heads, 63 sectors/track, 32630 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00020349
Device Boot Start End Blocks Id System
/dev/md0p1 1 32630 262100443+ 8e Linux LVM
# partprobe /dev/md0
Создаем группу томов:
# vgcreate guest_images_lvm /dev/md0p1
No physical volume label read from /dev/md0p1
Physical volume /dev/md0p1 not found
Physical volume "/dev/md0p1" successfully created
Volume group "guest_images_lvm" successfully created
Далее следует добавить новое хранилище через virt-manager:
Переходим в Connection Details
Щелкаем пиктограмму плюсика, чтобы запустить мастера для добавления хранилище.
Ставим name - guest_images_lvm
Тип - Type: logical: LVM Volume Group
Здесь Source Path указываем - /dev/md0
И нажимаем кнопку Finish.
Все теперь можно указывать LVM разделы для гостевых систем:
3.2. Настройка сетевого моста
Чтобы гостевые виртуальные машины могли общаться по сети, нужно настроить сетевой адаптер в режиме моста.
У хоста гипервизора IP адрес 192.168.1.2/255.255.255.0
# yum install bridge-utils -y
Создаем файл интерфейса моста br0
# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="static"
IPADDR="192.168.1.2"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
MTU="1500"
NETMASK="255.255.255.0"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="no"
NAME="System br0"
Приводим настройки интерфейса eth0 к виду:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:95:7A:C6
TYPE=Ethernet
UUID=ec86f87d-070e-4fd9-b570-8d7783de2772
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE=br0
# service libvirtd reload
Проверяем какие интерфейсы есть:
# brctl show
bridge name bridge id STP enabled interfacesbr0 8000.bcaec5c0ea24 no eth0vnet0vnet1vnet2virbr0 8000.525400e5664c yes virbr0-nic
Удаляем интерфейс virbr0, он позволяет по умолчанию создавать виртуальные машины с сетевым адаптером который может обращаться к основной сети через NAT. Обычно такой доступ создается еще в гипервизоре Virtual Box. Нам такого доступа не надо, поэтому удаляем этот интерфейс:
# virsh net-list
Name State Autostart Persistent
--------------------------------------------------
default active yes yes
# virsh net-destroy default
Network default destroyed
# virsh net-undefine default
Network default has been undefined
Этими командами мы удалили адаптер по умолчанию который предлагал нам доступ по NAT.
3.4. Создание гостевых виртуальных машин
Создадим для примера две машины, одну CentOS 6.4 x32, а другую Windows XP x32.
Поместим установочные образы операционных систем CentOS и Windows XP в каталог /iso сервера KVM. У меня файлы образов имеют имя:
- CentOS-6.4-i386-bin-DVD1.iso
- win_xp_sp3.iso
Создание Windows виртуальной машины:
Чтобы создавать Windows виртуальные потребуется закачать iso образ virtio:
# wget -P /iso/ http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-81.iso
Создание машин в командной строке производится через команду virt-install.
Все, теперь можно приступать к созданию Windows виртуальной гостевой машины, теперь чтобы создать виртуальную машину с windows xp, надо ввести команду:
# virt-install --connect qemu:///system --arch=i386 \
-n VM_windowsxp1 -r 1024 --vcpus=1 \
--disk pool=vm_images_dir,size=50,bus=virtio,cache=none \
-c /iso/win_xp_sp3.iso --graphics vnc,listen=0.0.0.0,keymap=ru,password=WinPassword \
--noautoconsole --os-type windows --os-variant winxp \
--network=bridge:br0,model=e1000 --disk path=/iso/virtio-win-0.1-81.iso,device=cdrom,perms=ro
Основные параметры тут:
-n - задаем имя создаваемой машины, в примере это VM_windowsxp1
--arch - говорит об архитектуре процессора и битности ОС. Здесь в основном ставят x86_64 - для 64 разрядных ОС или i386 - для 32 разрядных ОС. А бывают случаи когда указывают arm - то есть risc процессор для Android операционной системы. Нам разумеется этого не надо.
-r - это количество RAM для гостевой машины, у нас в примере это 1024 Мбайт.
--vcpus - это количество ядер для создаваемой виртуальной машины.
--disk pool - указывает какое хранилище использовать для хранение машины. Здесь у нас используется рейд массив из двух дисков 250 Гб. Так как имя хранилищя vm_images_dir, указывает на рейд массив.
size - указывает объем места которое будет отобрано у хранилищя для создаваемой машины, в примере это 50 Гб.
-c - это образ который будет загружен при первом старте виртуальной машины, у нас там стоит образ Windows XP SP3 (win_xp_sp3.iso).
--graphics - подразумевает графический доступ к виртуальной машине через VNC Viewer, по примеру указано что соединение к машине может быть инициировано с любого хоста (0.0.0.0). А также мы указали пароль доступа password=WinPassword, чтобы кто попало не смог зайти на виртуальную машину через VNC.
--os-type - этот параметр говорит гипервизору о типе устанавливаемой машине, у нас на примере стоит windows, если будет создаватся CentOS6, там должно быть rhel6.
--os-variant - точно указывает какая ОС будет работать и устанавливаться. На примере это winxp (windows xp). Если у вас Windows 2008, то тогда укажите --os-variant win2k8
--network=bridge:br0 - говорит что надо использовать созданный мостовое соединение которое мы создали.
--disk path=/iso/virtio-win-0.1-81.iso - загружает вирт. CD ROM
Конфигурационый файл созданной машины находится в каталоге /etc/libvirt/qemu/.
Если вы неправильно ввели параметры, поменять их можно введя команду:
# virsh edit VM_windowsxp1
Создание Linux CentOS виртуальной машины:
# virt-install -n CentOSx32_2 --ram 1024 \
--arch=i386 \
--vcpus=1 --cpu host --check-cpu \
--extra-args="vnc sshd=1 sshpw=secret ip=static reboot=b selinux=0" \
--os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on \
--disk pool=vm_images_dir,size=50,bus=virtio \
--network=bridge:br0,model=virtio \
--graphics vnc,listen=0.0.0.0,keymap=ru,password=LinuxPassword \
--noautoconsole --watchdog default,action=reset --virt-type=kvm \
--autostart --location /media/CentOS-6.4-i386-bin-DVD1.iso
или
# virt-install -n CentOSx32_2 --ram 1024 \
--arch=i386 \
--vcpus=1 --cpu host --check-cpu \
--extra-args="vnc sshd=1 sshpw=secret ip=static reboot=b selinux=0" \
--os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on \
--disk pool=vm_images_dir,size=50,bus=virtio \
--network=bridge:br0,model=virtio \
--graphics vnc,listen=0.0.0.0,keymap=ru,password=LinuxPassword \
--noautoconsole --watchdog default,action=reset --virt-type=qemu \
--autostart --location /media/CentOS-6.4-i386-bin-DVD1.iso
Если у вас процессор не поддерживает аппаратную виртуализацию в --virt-type ставится qemu (программная виртуализация - медленная), иначе лучше выбрать kvm (аппаратную виртуализацию).
Конфигурационый файл созданной машины находится в каталоге /etc/libvirt/qemu/.
Его имя CentOSx32_2.xml, не редактируйте этот файл в ручную через текстовые редакторы. Для редактирования параметров виртуальных машин используйте virsh edit <имя машины>, например "virsh-edit CentOSx32_2". Откроется специальный текстовый редактор, где можно поменять интересующие вас параметры.
Имеющиеся виртуальные машины можно посмотреть через команду:
# virsh list --all
Здесь у нас должно быть две позиции с Windows и CentOS.
3.5. Доступ к созданным виртуальным машинам через VNC
После создания Windows машины, на нее можно будет зайти через VNC Viewer. IP адрес для соединения берите реального хоста вашего гипервизора, у меня это 192.168.1.2. А также не забудьте указать порт соединения, по умолчанию первая созданная машина имеет порт с номером - 0. Но лучше задавать порт самим, в конфигурационном файле машине оставлять вот такие настройки:
<graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0' passwd='My.Password.Here'><listen type='address' address='0.0.0.0'/></graphics>
В этом примере задан порт 5914.
Здесь я ввел IP адрес машины на которой установлен KVM и порт 0. Это позволит увидеть установку Windows XP.
После соединения у вас запросят пароль который мы задавали во время создания машины - WinPassword
После ввода будет окошко где можно видеть установку Windows XP.
Аналогично для созданной машины Linux CentOS
Здесь я поменял порт с 0 на 1.
Запросят пароль LinuxPassword:
После чего можно видеть установку CentOS:
После установки гостевых операционных систем Windows и CentOS, вам потребуется настроить их сетевые адаптеры, чтобы можно было работать с ними по сети. Для Windows гостя, чтобы настроить адаптер надо зайти в главное меню ПУСК -> Панель управления -> Сетевые подключения -> Выбрать сетевой адаптер и прописать IP адрес - 192.168.1.3. В CentOS настройка выглядит иначе, здесь нужно открыть файл ifcfg-*** в каталоге /etc/sysconfig/network-scripts/ и там уже прописать статический IP адрес, например 192.168.1.4. Не забудьте что сервер с гипервизором KVM имеет IP адрес 192.168.1.2
3.6. Графическое управление машинами через Virtual machine manager
Для тех кому сложно работать с виртуальными машинами в командной строке, существует удобная программа под названием virt-manager. Все основные и часто используемые операции по управлению машинами легко производит в графическом интерфейсе Virtual machine manager (virt-manager). Это облегчает работу системного администратора и экономит его время. В основном вы будете работать именно в этой программе, так как это удобно, работа в Virtual machine manager подобна работы в простом VirtualBox.
Но, есть и минусы у Virtual Machine Manager, опытные админы иногда создают сложные конфигурации виртуальных машин. Которые нельзя создать в графическом окне Virtual Machine Manager. Поэтому иногда потребуется создавать машины в командной строке, хотя это требуется очень редко.
Графическое управление будет запущено на Windows 7. Для графического управления нам понадобятся:
1. Putty
2. Xming
3. virt-manager
SSH клиент Putty для Windows можно скачать по ссылке http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
Xming (порт сервера X11 для Windows) можно скачать по ссылке: http://sourceforge.net/projects/xming/files/latest/download
Установка virt-manager на KVM сервер
# yum install virt-manager xorg-x11-xauth liberation-sans-fonts -y
Также надо включить параметры в sshd.conf
# vi /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
# service sshd restart
После установки putty, потребуется ее настройка.
Настройка Putty.
После установки Putty находится в меню ПУСК.
Заходим в Connection ->SSH -> X11
И видим картинку, ставим галку на против пункта- Enable X11 forwarding
Теперь можно создать подключение к KVM серверу, для этого надо зайти в самое верхнее меню - Session
Теперь подключение к серверу KVM - сохранено. Его будет видно в категории Session под названием KVM Server.
Установка Xming
Запустите файл Xming-6-9-0-31-setup.exe и нажимайте Далее->Далее -> Готово.
После чего в главном меню ПУСК появится значок Xming:
Его надо щелкнуть, после чего появится в трее значек с "X". Это говорит что он запущен.
Запуск virt-manager
Последовательность запуска virt-manager следующая:
- Сперва запускаете Xming (Меню ПУСК->Xming)
- Далее запускаете putty с параметром - Enable X11 forwarding
- После входа через Putty, в консоле пишете команду - virt-manager
В графическом окне virt-manager можно:
- Создавать гостевые виртуальные машины
- Копировать уже созданные машины
- Останавливать или запускать имеющиеся машины
- Менять параметры конфигурации виртуальных машин (кол-во RAM, CPU и т.д.)
- Производить миграцию с одно гипервизора на другой.
- Смотреть текущею работу машин
Последний пункт например выглядит так:
То есть я смотрю на работу гостевой машины через virt-manager, а не через VNC.
3.7. Резервное копирование образов виртуальных машин
Чтобы сохранить копию виртуальной гостевой машины, надо сохранить два файла:
- Файл образа жесткого диска виртуальной гостевой машины
- Конфигурационный файл виртуальной машины
Образы жестких дисков виртуальных машин лежат в хранилище /mnt/vm_images/
А конфигурационные файлы лежат в каталоге /etc/libvirt/qemu/
В первом каталоге лежать два образа жестких дисков машины Windows и CentOS: vm_windowsxp1.img и CentOSx32_2.img
Во втором каталоге лежат два конфигурационных файла виртуальных машин Windows и CentOS: vm_windowsxp1.xml и CentOSx32_2.xml
Допустим мы хотим cделать копию виртуальной машины Windows XP, алгоритм резервного копирования будет таков:
1. Останавливаем виртуальную машину командой: virsh suspend VM_windowsxp1
2. Сохраняем конфигурационный файл машины Windows в каталог "/mnt/backups/" командой: virsh dumpxml VM_windowsxp1
3. Сохраняем образ виртуальной машины Windows в "/mnt/backups/" командой: qemu-img convert -O raw vm_windowsxp1.img |gzip -1 -c /mnt/guestimages/vm_windowsxp1.img > /mnt/backups/vm_windowsxp1.$(date +%Y%m%d-%H%M%S).gz
4. Все! Теперь у нас имеется копия виртуальной машины в каталоге "/mnt/backups/"
Это если у вас дисковые образы, в случае LVM разделов, делается чуть по другому:
Внизу очень простой скрипт, который делает все тоже самое, если есть идеи как сделать еще лучше, предлагайте.
- Создаем очень простой скрипт /etc/sysconfig/arc.sh
# vi /etc/sysconfig/arc.sh
#!/bin/sh
# Описываем переменные
# Название виртуальной машины, можно узнать введя - virsh list --all
VM1_name=VM_windowsxp1
# Имя файла образа жесткого диска, можно узнать введя команду - ls /mnt/guestimages
VM1_image_file=vm_windowsxp1.img
# Имя конфигурационного файла можно узнать введя команду - ls /etc/libvirt/qemu/
VM1_config=vm_windowsxp1.xml
# Хранилище виртуальных машин
VM1_image_path=/mnt/guestimages
# Путь к каталогу конфигурационных файлов виртуальных машин
VM1_config_path=/etc/libvirt/qemu
# Каталог куда будем заливать нашу копию виртуальной машины, у меня это жесткий диск 2Тб
VM1_backup_dir=/mnt/backups
# End variables
# Начинаем архивацию виртуальной машины
echo Suspending $VM1_name
virsh suspend $VM1_name
echo Saving config of guest $VM1_name
virsh dumpxml $VM1_name > /mnt/backups/$VM1_config
echo Saving image file $VM1_name
qemu-img convert -O raw $VM1_image_file |gzip -1 -c $VM1_image_path\/$VM1_image_file > $VM1_backup_dir/vm_windowsxp1.$(date +%Y%m%d-%H%M%S).gz
echo Resume $VM1_name
virsh resume $VM1_name
exit $?
Этот же файл без комментариев:
#!/bin/sh
VM1_name=VM_windowsxp1
VM1_image_file=vm_windowsxp1.img
VM1_config=vm_windowsxp1.xml
VM1_image_path=/mnt/guestimages
VM1_config_path=/etc/libvirt/qemu
VM1_backup_dir=/mnt/backups
echo Suspending $VM1_name
virsh suspend $VM1_name
echo Saving config of guest $VM1_name
virsh dumpxml $VM1_name > /mnt/backups/$VM1_config
echo Saving image file $VM1_name
gzip -1 -c $VM1_image_path\/$VM1_image_file > $VM1_backup_dir/vm_windowsxp1.$(date +%Y%m%d-%H%M%S).gz
echo Resume $VM1_name
virsh resume $VM1_name
exit $?
Дайте права на запуск скрипта:
# chmod +x /etc/sysconfig/arc.sh
Что делает этот скрипт: сперва он останавливает виртуальную машину, далее копирует конфигурационный файл машины в каталог /mnt/backups/.
После чего идет сохранение образа жесткого диска в каталог /mnt/backups/.
Обратите внимание на команду запуска архиватора - "gzip -1 -c", здесь мы задали параметр для самого быстрого сжатия. При таком сжатии, мой образ размером в 20 Гбайт сжимается за время ~9 мин. Итоговый размер машины в архиве ~8,8 Гбайт. После работы скрипта появится архив с датой.
3.8. Восстановление виртуальной машины из резервной копии
Если вдруг у вас поломается виртуальная машина, и нужно будет срочно восстановить работу, введите команду распаковки архива:
# gunzip <имя резервной копии архива VM.gz>
После чего поместите образ виртуальной машины в ваше хранилище.
Далее введите команду определения конфигурации:
# virsh define <имя файла конфигурации VM.xml>
После этих операций запустите гостевую виртуальную машину и поместите ее в автозапуск:
# virsh start <имя ВМ>
# virsh autostart <имя ВМ>
Но опять таки, можно восстановить виртуальную машину из простого скрипта:
#!/bin/sh
VM1_name=VM_windowsxp1
VM1_image_file=vm_windowsxp1.img
VM1_config=vm_windowsxp1.xml
VM1_image_path=/mnt/guestimages
VM1_config_path=/etc/libvirt/qemu
VM1_backup_dir=/mnt/backups
echo Restoring configuration $VM1_name
virsh define $VM1_backup_dir\/$VM1_config
echo Restoring guest image file $VM1_name
gunzip -c $VM1_backup_dir/vm_windowsxp1.$(date +%Y%m%d-%H%M%S).gz > $VM1_image_path\/$VM1_image_file
echo Starting $VM1_name
virsh start $VM1_name
exit $?
Чтобы скрипт заработал, надо вписать имя архива копии виртуальной машины.
4. Заключение
Мы установили и настроили сервер вирутализации для поддержки двух гостевых систем Windows и Linux. Данный сервер работает на открытом ПО, за которое не надо платить денег. Управление сервером виртуализации производиться через графическое окно программы "Virtual Manager", это позволяет просто и понятно работать с виртаульными машинами. Были затронуты такие важные аспекты как резервное копирование и восстановление копии гостевой системы. Описанная инструкция не претендует на роль исчерпывающего руководство по развертыванию гипервизора KVM.