Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
3
03:49, 06 июля 2014

Установка и настройка KVM на CentOS 6.7 x64

Blog post image

В этой записке описана установка и базовая настройка гипервизора KVM на CentOS 6.7 x64.

Цель установки: получить сервер виртуализации, на котором будут крутится две гостевые системы Windows и Linux.

С помощью виртуализации, один мощный физический сервер, может запускать виртуальные сервера (гостевые системы) разного рода назначения, например:

  1. Доменный контроллер
  2. Почтовый сервер
  3. Шлюз в интернет
  4. Файловый сервер для общих папок
  5. Программная АТС
  6. СЭД
  7. Система учета 1С
  8. и т. д.

Виртуализация имеет следующие преимущества:

  • Экономия электроэнергии
  • Легкое резервное копирование виртуальных машин
  • Простое восстановление виртуальной машины из резервной копии
  • Консолидация - управление всеми виртуальными серверами сидя только за одним физическим
  • Высокая доступность и отказоустойчивость - если у вас есть в наличии 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. Выбор режима установки

Blog post image

В этом окошке, выберите первый пункт- "Установка или обновление существующей системы"

 

1.3. Проверка установочного диска на чтение

Blog post image

Здесь установщик предлагает нам проверить читаемость DVD диска. Уверенно нажимаем кнопку "Skip"

 

1.4. Первое окно установки

Blog post image

Здесь жмем кнопку "Next" (Далее)

 

1.5. Выбор языка интерфейса установщика

Blog post image

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

1.6. Выбор раскладки клавиатуры

Blog post image

Раскладка клавиатуры, выбираем U.S. English или Russian, кому как удобно.

1.7.  Выбор типа дискового устройства

Blog post image

Здесь нам задают вопрос: на какой тип дискового устройства производится установка.

Мы устанавливаем систему на обычный SATA диск, поэтому выберем "Basic Storage Device", в противном случае выберите "Specialized Storage Device" если у вас SCSI контроллер или другое устройство.

Blog post image

Здесь нас предупреждают что жесткий диск в порту SATA 0 возможно содержит данные.

Так как у нас сервер новый, мы уверены что на диске 80Gb нету данных, поэтому щелкаем - Yes, discard any data

1.8. Задание имени хоста

Blog post image

Здесь мы задаем имя хоста (компьютера), нажмите "Next" чтобы продолжить.

1.9. Выбор часового пояса

Blog post image

Настройки часового пояса, выберите ваш часовой пояс и нажмите "Next"

1.10. Задание пароля учетной записи Супер Администратора - root

Blog post image

Пароль супер пользователя (Администратора), введите в этом окне Ваш пароль два раза и запомните его.

1.11. Выбор предпочитаемого типа установки

Blog post image

Здесь установщик предлагает создать разделы и с их последующим форматированием.

По умолчанию предлагается режим "Replace Existing Linux System (s)". То есть удалить текущие Linux разделы и установить.

Нас это  не устраивает, поэтому выбираем - Create Custom Layout

1.12. Окно для создания разделов на дисках

Blog post image

В этом окошке можно создавать разделы, в нем мы создадим рейд массив.

У нас 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 пакеты  и т.д. Этот раздел активно используется установленными программами. Исходя из этого, выделяем под этот раздел все оставшееся место на диске.

Blog post image

Нажимаем кнопку - Create (Создать)

Blog post image

Выбираем - Standart Partition

Нажимаем кнопку - Create

Blog post image

Здесь:

  • В Mount Point выбираем корневой раздел - /
  • В File System Type ставим ext4
  • Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
  • В Size (MB) ставим 20000.
  • В Additional Size Options - Fixed size
  • Нажимаем ОК

Blog post image

Вот такими простыми движениями мы создали корневой раздел / с дисковым местом в 20 Гб. Посмотрите на картинке возле созданного раздела появилась "галка".

Давайте аналогичным образом создадим раздел /home

Blog post image

Нажимаем кнопку - Create

Blog post image

Нажимаем опять кнопку - Create

Blog post image

Здесь:

  • В Mount Point выбираем домашний раздел - /home
  • В File System Type ставим ext4
  • Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
  • В Size (MB) ставим 10000.
  • В Additional Size Options - Fixed size
  • Нажимаем ОК

Blog post image

Возле созданного раздела /home появилась "галка".

Раздел /swap практически также создается:

Нажимаем кнопку для создания раздела - Create

Blog post image

Нажимаем опять кнопку - Create

Blog post image

Здесь:

  • Mount Point - не трогаем
  • В File System Type ставим swap
  • Убираем галки в Allowable Drives с дисков sdb и sdc, как на картинке.
  • В Size (MB) ставим 2000.
  • В Additional Size Options - Fixed size
  • Нажимаем ОК

Blog post image

Раздел swap - создан! Возле него появилась "галка".

Теперь осталось создать раздел /var

Нажимаем :), кнопку Create

Blog post image

Опять этот Create...

Нажимаем.

Blog post image

Здесь:

  • В 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 Гбайт).

Итоговое окно должно примерно быть таким:

Blog post image

Диск sda полностью готов для установки на него операционной системы CentOS.

Но, осталась создать программный рейд массив. Поэтому не выходите с окна создания разделов (не нажимайте кнопку Next).

1.14. Создание программного рейд массива из двух дисков 250Гб

Лучше конечно создавать LVM разделы (тома). Но, думаю пока сойдут классические разделы на файловой системе ext4.

Blog post image

В окне создания разделов нажимаем кнопку - Create

Blog post image

Выделите - RAID Partition

И нажмите - Create

Blog post image

Здесь делаем:

  • Mount Point - не активный (не трогаем его)
  • В File System Type стоит уже - software RAID (не трогаем)
  • Ставим галку в Allowable Drives на диске sdb, как на картинке.
  • Size (MB) - не трогаем.
  • Обязательно в Additional Size Options ставим Fill to maximum allowable size (все доступное место).
  • Нажимаем ОК

Blog post image

Получится вот такое окно.

Повторяем такие же действия для жесткого диска sdc:

Blog post image

В окне создания разделов нажимаем кнопку - Create

Blog post image

Выделите - RAID Partition

И нажмите - Create

Blog post image

Здесь ставим:

  • Mount Point - не активный (не трогаем его)
  • В File System Type стоит уже - software RAID (не трогаем)
  • Ставим галку в Allowable Drives на диске sdc, как на картинке.
  • Size (MB) - не трогаем.
  • Обязательно в Additional Size Options ставим Fill to maximum allowable size (все доступное место).
  • Нажимаем ОК

Итоговое окошко:

Blog post image

Два жестких диска с типом файловой системы - software RAID.

Для нормальной работы этого мало, требуется эти два диска объединить в массив.

 

Blog post image

Как обычно, нажимаем кнопку - Create

Blog post image

Выбираем - RAID Device.

Blog post image

Здесь ставим:

  • Mount Point - не трогаем (точку монтирования зададим потом сами).
  • В File System Type - должно стоят ext4
  • RAID Device - md0
  • RAID Level - RAID1
  • RAID Members - sdb1, sdc
  • Нажимаем ОК

Итоговое окно с уже готовым рейд массивом:

Blog post image

 

1.15. Выбор жесткого диска и установка CentOS

Blog post image

Здесь выделяем диска sda как на картинке и нажимаем кнопку NEXT.

Blog post image

Нажимаем - Format

Blog post image

Нажимаем - Write changes to disk

Blog post image

Здесь настройки загрузчика ОС. Нам пишут что он будет установлен на диск sda, нам это и нужно.

Так как, именно sda диск у нас системный.

Нажимаем NEXT.

Blog post image

Здесь нам предлагают установить CentOS с минимальным набором программного обеспечения. Нас это устраивает.

Нажимаем NEXT.

Blog post image

Процесс установки CentOS.

Blog post image

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

Нажимаем Reboot для перезагрузки.

 

2. Настройка сетевого адаптера сервера

Blog post image

Вводим логин Супер Администратора - 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

Вписываем адреса DNS серверов:
# vi /etc/resolv.conf
nameserver 192.168.1.250     //Первичный DNS
Здесь IP адреса:
192.168.1.250 - это IP адрес нашего роутера
Перезапустим сетевую службу, чтобы внесенные нами изменения вступили в силу:
# service network restart
Проверьте, ваш сервер должен иметь выход Интернет:
# ping google.ru
Обновите систему:
# yum update -y
 

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, которая отвечает за рейд массив:

# mdadm --detail --scan --verbose
ARRAY /dev/md/localhost.localdomain:0 level=raid1 num-devices=2 metadata=1.1 name=localhost.localdomain:0 UUID=a063296e:41c3c5ee:9b40c76e:5ec12e6d
devices=/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:

Blog post image

Переходим в Connection Details

Blog post image

Щелкаем пиктограмму плюсика, чтобы запустить мастера для добавления хранилище.

Blog post image

Ставим name - guest_images_lvm

Тип - Type: logical: LVM Volume Group

Blog post image

Здесь Source Path указываем - /dev/md0

И нажимаем кнопку Finish.

Все теперь можно указывать LVM разделы для гостевых систем:

Blog post image

Blog post image

 

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

Что мы сделали? Мы создали интерфейс моста br0 и записали туда настройки нашего настоящего интерфейса удалив их с него.

# service libvirtd reload

Проверяем какие интерфейсы есть:

# brctl show

bridge name     bridge id               STP enabled     interfaces
br0             8000.bcaec5c0ea24       no              eth0
vnet0
vnet1
vnet2
virbr0          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.

Помимо VNC, можно использовать Spice.
Для соединения с виртуальными машинами потребуется любой VNC Viewer - Tight VNC, RealVNC или UltraVNC.
Blog post image

Здесь я ввел IP адрес машины на которой установлен KVM и порт 0. Это позволит увидеть установку Windows XP.

После соединения у вас запросят пароль который мы задавали во время создания машины - WinPassword

Blog post image

После ввода будет окошко где можно видеть установку Windows XP.

Blog post image

Аналогично для созданной машины Linux CentOS

Blog post image

Здесь я поменял порт с 0 на 1.

Запросят пароль LinuxPassword:

Blog post image

После чего можно видеть установку CentOS:

Blog post image

Blog post image

После установки гостевых операционных систем 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 находится в меню ПУСК.

Blog post image

Заходим в Connection ->SSH -> X11

И видим картинку, ставим галку на против пункта- Enable X11 forwarding

Blog post image

Теперь можно создать подключение к KVM серверу, для этого надо зайти в самое верхнее меню - Session

Blog post image

Теперь подключение к серверу KVM - сохранено. Его будет видно в категории Session под названием KVM Server.

Установка Xming

Запустите файл Xming-6-9-0-31-setup.exe и нажимайте Далее->Далее -> Готово.

После чего в главном меню ПУСК появится значок Xming:

Blog post image

Его надо щелкнуть, после чего появится в трее значек с "X". Это говорит что он запущен.

Запуск virt-manager

Последовательность запуска virt-manager следующая:

  • Сперва запускаете Xming (Меню ПУСК->Xming)
  • Далее запускаете putty с параметром - Enable X11 forwarding
  • После входа через Putty, в консоле пишете команду - virt-manager

Blog post image

 

В графическом окне virt-manager можно:

  • Создавать гостевые виртуальные  машины
  • Копировать уже созданные машины
  • Останавливать или запускать имеющиеся машины
  • Менять параметры конфигурации виртуальных машин (кол-во RAM, CPU и т.д.)
  • Производить миграцию с одно гипервизора на другой.
  • Смотреть текущею работу машин

Последний пункт например выглядит так:

Blog post image

То есть я смотрю на работу гостевой машины через 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 разделов, делается чуть по другому:

1. Остановить ВМ
2. Смонтировать разделы ВМ в удобные места
3. Зархивировать архиватором tar эти смонтированные разделы
4. Размонтировать разделы
5. Запустить виртуалку
 

Внизу очень простой скрипт, который делает все тоже самое, если есть идеи как сделать еще лучше, предлагайте.

  • Создаем очень простой скрипт /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.

3
3801
0