Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
1
04:58, 10 января 2016

Установка и базовая настройка oVirt 3.6 на CentOS 7 x64

Blog post image

Пост про установку системы виртуализации oVirt на CentOS 7.1.

Кратко о oVirt - это система управления виртуализацией основанная на KVM. Позволяет управлять виртуальными машинами через веб интерфейс используя библиотеку libvirt. Активно поддерживается компанией Red Hat.  Аналог такой системы, всем известный vSphere от VMware.

Как и другие системы управления виртуализацией, эта система предлагает следующее:

- Живая миграция

- Балансировка нагрузки между гипервизорами

- Высокая доступность

- и т.д.

По права: В oVirt есть подробное разделение доступа для пользователей, плюс есть три разных веб портала, для разных видов доступа.

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

Для суперюзеров портал выглядит иначе, они могут создавать виртуальные машины и манипулировать ими, но не видят хостов, сетей и СХД. Все в пределах выделенных админами квот. Как раз получается self - сервис как в облаках.

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

Тестовая лаборатория в моем случае была построена на одном физическом компьютере с установленной на него ОС CentOS 7 x64 + гипервизор KVM. И далее после этого, на этом хосте были созданы 4-е гостевые системы:

1. oVirt Engine (аналог vCenter)

2. Гипервизор KVM №1

3. Гипервизор KVM №2.

4. СХД - NFS, iSCSI

Тестовое СХД можно сделать на физическом хосте, и пункт номер 4 - уже станет не нужен. А также не нужен отдельный хост для oVirt Engine, он умеет работать как ВМ, этот режим работы называется - Hosted Engine. Если у вас куча хостов гипервизоров, то желательно держать oVirt Engine на железном сервере отдельно, а если у вас мало хостов до 100, то не зачем тратить сервер, запускайте его как ВМ. Правда я его сделал отдельным, и это оказалось правильным решением - опытный специалист виртуализатор посоветовал в любом случае все равно ставить oVirt Engine отдельно на железный сервер.

При установке в режиме Hosted Engine (Engine внутри ВМ), главное чтобы (hosted) кластер состоял из нескольких нод (хостов с гипервизорами). Тогда они будут мониторить Engine и друг друга, при падении хоста с Engine, он перезапустится на другой ноде.

У вас есть компьютер с 8Гб ОЗУ? Тогда быстрым способом загрузить KVM будет в установке CentOS 7 на флешку или переносной жесткий диск. И далее загрузка ПК с этого носителя. Это был мой способ, желательно помимо флешки иметь SSD, где должны создаваться и работать ВМ, разумеется потребуется настроить TRIM.

Получится примерно вот такая схема работы:

Blog post image

На ОС где был запущен KVM были отключены selinux, iptables и networkmanager.

КРАТКОЕ СОДЕРЖАНИЕ

1. Настройка DNS сервера и общего хранилище NFS и iSCSI

2. Сколько серверов потребуется для oVirt

3. Установка репозитория oVirt на менеджере и гипервизорах

4. Установка oVirt

5. Подключение NFS и iSCSI стораджа

6. Настройка Power Managment - Fencing

7. Тестируем кластерные фичи

7.1. Живая миграция

7.2. High Availability

7.3. Балансировка нагрузки

8. Конвертирование физической машины в виртуальную

9. Резервное копирование

10. Ссылки

Начнем с поднятия DNS службы.

1. Настройка DNS сервера и общего хранилище NFS и iSCSI

Настройка DNS сервера - здесь настроим имена хостов, доменную часть берем свою, я взял asia.local.

По идее, надобность в настройке DNS сервера - маленькая. Дело в том, что для тестового запуска, хватит банального прописывания хостов в файле /etc/hosts

Blog post image

Устанавливаем Bind:

# yum install bind –y

Редактируем файл /etc/named.conf

# vi /etc/named.conf

 
//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS// server as a caching only nameserver (as a localhost DNS resolver only).//// See /usr/share/doc/bind*/sample/ for example named configuration files.//options {        listen-on port 53 { 10.0.10.20; 127.0.0.1; };        listen-on-v6 port 53 { ::1; };        directory       "/var/named";        dump-file       "/var/named/data/cache_dump.db";        statistics-file "/var/named/data/named_stats.txt";        memstatistics-file "/var/named/data/named_mem_stats.txt";        allow-query     { localhost; any; };        /*          - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.         - If you are building a RECURSIVE (caching) DNS server, you need to enable            recursion.          - If your recursive DNS server has a public IP address, you MUST enable access            control to limit queries to your legitimate users. Failing to do so will           cause your server to become part of large scale DNS amplification            attacks. Implementing BCP38 within your network would greatly           reduce such attack surface         */        recursion yes;        dnssec-enable no;        dnssec-validation no;        /* Path to ISC DLV key */        bindkeys-file "/etc/named.iscdlv.key";        managed-keys-directory "/var/named/dynamic";        pid-file "/run/named/named.pid";        session-keyfile "/run/named/session.key";};zone "asia.local" {        type master;        file "asia.local.fwd";        allow-update {none;};        allow-transfer {none;};};zone "10.0.10.in-addr.arpa" {        type master;        file "asia.local.rev";        allow-update {none;};};logging {        channel default_debug {                file "data/named.run";                severity dynamic;        };};zone "." IN {        type hint;        file "named.ca";};include "/etc/named.rfc1912.zones";include "/etc/named.root.key";
 

Создаем файл прямой и обратной зоны.

# vi /var/named/asia.local.fwd

 
$TTL 86400
@   IN  SOA     ns1.asi.local. root.asia.local. (
2014120801 ;Serial ВАЖНО !!! серийный номер должен меняться в большую строну при каждом изменении, иначе slave сервера не обновят данные
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
; Указываем два name сервера
   IN      NS    ns1.asia.local.
; Определяем IP адреса name серверов
ns1                 IN  A    10.0.10.20

; Define hostname -> IP нашего сервера для этого домена
ovirt-en1                   IN  A    10.0.10.30
ovirt-kvm1        IN  A    10.0.10.10
ovirt-kvm2        IN  A    10.0.10.11
dstore1      IN  A    10.0.10.20
#dstore2      IN  A    10.0.10.21
 

Обратная зона:

# vi /var/named/asia.local.rev

 
$ORIGIN 10.0.10.in-addr.arpa.
$TTL 3D

@      SOA             ns1.asia.local.     admin.asia.local. (13 4h 1h 1w 1h)
@      IN      NS      ns1.asia.local.
30     IN      PTR     ovirt-en1.asia.local.
10     IN      PTR     ovirt-kvm1.asia.local.
11     IN      PTR     ovirt-kvm2.asia.local.
20     IN      PTR     ns1.asia.local.
 

На этом настройка DNS сервера завершена.

НАСТРОЙКА ХРАНИЛИЩЕ ДАННЫХ iSCSI

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

Начнем сразу с установки LIO:

# yum install targetcli -y

# PYTHONPATH=../scripts/targetcli

# systemctl enable target

# systemctl start target

По идее лучше сделать LVM раздел и потом его уже отдавать:

# pvcreate /dev/sdb

# vgcreate lvg1 /dev/sdb

# lvcreate -n vmstore -L39G lvgroup1

У меня здесь диск 40Гб.

Очищаем текущею конфигурацию

# targetcli clearconfig confirm=true

Запускаем конфигуратор LIO:

# targetcli

Отдаем раздел LVM для нужд LIO:

/> cd /backstores/block

/> create hdd_block1 /dev/mapper/lvgroup1-vmstore

или

/> create hdd_block1 /dev/mapper/lvgroup1-vmstore set vpd_unit_serial=12345"

Или другой вариант, если у вас текущий раздел LVM большой:

/> cd /backstores/fileio

/> create vmstore /opt/guestimages.img 30G

Отключаем авторизацию на поиск LUN:

/> cd /iscsi

/iscsi> set discovery_auth enable=0

Создаем WWN:

/iscsi> create iqn.2016-01.com.company:t1

Создаем единственный LUN, наберите "cd iqn" и нажмите TAB:

/iscsi> cd iqn.2016-01.com.company:t1

/iscsi> cd tpg1

Ставим логин "usr" и пароль "pwd"  на доступ к LUN:

/iscsi> set attribute authentication=1 Лучше 0

/iscsi> set attribute generate_node_acls=1 Лучше 0

/iscsi> set auth userid=usr

/iscsi> set auth password=pwd

/iscsi> set parameter AuthMethod=CHAP    # или пусто - None

Создаем LUN из диска:

/iscsi> cd luns

/iscsi> create /backstores/block/hdd_block1

Created LUN 0.

или

/iscsi> create /backstores/fileio/vmstore

/iscsi> cd ..

Создаем ACL:

/iscsi> cd acls

/iscsi> create iqn.2016-01.com.company:t1

Created Node ACL for iqn.1991-05.com.microsoft:node01
Created mapped LUN 0.

/iscsi> cd ..

Создаем portal:

/iscsi> cd portals

/iscsi>  create

/iscsi> cd /

Сохраняем конфиг

/> saveconfig

/> exit

НАСТРОЙКА ХРАНИЛИЩЕ ДАННЫХ NFS

Здесь отдадим два каталога для нужд виртуализации:

  • /nfs/iso   -  для установочных ISO образов
  • /nfs/guestimages   -  для некоторых виртуальных машин

Устанавливаем NFS:

# yum install nfs-utils -y

# systemctl enable rpcbind

# systemctl enable nfs-server

# systemctl start rpcbind

# systemctl start nfs-server

Отдадим два каталога:

  • /nfs/iso
  • /nfs/guestimages

# mkdir -p /nfs/iso && mdkdir /nfs/guestimages

Первый каталог будет содержать установочные ISO образы.

Второй каталог для некоторых гостевых виртуальных машин.

# vi /etc/exports

/nfs/iso *(rw,no_root_squash)
/nfs/guestimages *(rw,no_root_squash)

# exportfs -r

Таким же способом ставим второй сервер СХД. При настройке задаем IP адрес 10.0.10.21 и имя хоста dstore2. Роль DNS поднимать не стоит.

ИТОГО:

  • Настроено хранилище данных iSCSI и NFS
  • Настроен DNS сервер

2. Сколько серверов потребуется для oVirt

Минимум потребуется четыре сервера:

1. Хост с менеджером управления oVirt

2. Два хоста с гипервизором с поддержкой fencing

3. Общее хранилище iSCSI (FC, NFS)

Итого 4-ре сервера.

3. Установка репозитория oVirt на менеджере и гипервизорах

Прописываем репозиторий на хостах - oVirt и двух гипервизорах:

# yum -y update

# yum install http://plain.resources.ovirt.org/pub/yum-repo/ovirt-release36.rpm -y

4. Хосты

На хостах прописать IP адреса 10.0.10.10 и 10.0.10.11, например:

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
GATEWAY=10.0.10.1
IPADDR=10.0.10.10               # Для второго хоста 10.0.10.11 
NETMASK=255.255.255.0
BROADCAST=10.0.10.255
DNS1=10.0.10.20

Настройка хостнейма для 1 и 2 хоста:

# hostnamectl set-hostname ovirt-kvm1.asia.local

# hostnamectl set-hostname ovirt-kvm2.asia.local

Не помешает отключить IPv6:

# echo "install ipv6 /bin/true" >> /etc/modprobe.d/disableipv6.conf

5. Установка oVirt

oVirt Engine 3.6 устанавливается на CentOS x64 7.1 minimal командой engine_install, после чего добавляются хосты с гипервизорами в веб интерфейсе - Web_UI.

Настройка сети (пример):

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
GATEWAY=10.0.10.1
IPADDR=10.0.10.30
NETMASK=255.255.255.0
BROADCAST=10.0.10.255
DNS1=10.0.10.30

Настройка хостнейма:

# hostnamectl set-hostname ovirt-en1.asia.local

Установка oVirt Engine (веб интерфейс и система управления - manager), ставится только на одном хосте:

# yum -y install ovirt-engine

# engine-setup

И далее мастер установки задает вопросы:

Blog post image

Отключаем на время firewalld и selinux:

# systemctl disable firewalld

# systemctl stop firewalld

# vi /etc/selinux/config

SELINUX=peRmissive

# setenforce 0

Страница администрирования (administration portal) находится по адресу: https://ovirt-en1.asia.local/

(можно https://ovirt-en1.asia.local/webadmin/или https://ovirt-en1.asia.local/ovirt-engine/)

Логин и пароль для входа - admin / ваш пароль который задавали при установке.

Blog post image Blog post image Blog post image

Теперь в oVirt обязательно требуется добавить хосты, по умолчанию создается пустой Datacenter и Cluster (Default), в последний добавляются хосты KVM. После этой операции добавляются стораджы и привязываются к одному из хостов.

Поэтому добавляем хосты, идем в Data Center -> Cluster -> Hosts -> New:

Blog post image

Щелкаем Data Center -> Cluster -> Hosts -> New

Blog post image

Здесь прописываем имя хоста гипервизора ovirt-kvm1.asia.local.

Проделайте это же указав имя второго хоста ovirt-kvm2.asia.local.

Blog post image

После чего, видим зеленные стрелочки возле добавленных хостов.

5. Подключение NFS и iSCSI стораджа

Во время установки менеджера нам было предложено создать локальный NFS сторадж для ISO образов.

Он прописался в файле /etc/exports.d/ovirt-engine-iso-domain.exports

У меня один раз там оказался мусор, какие-то непонятные символы, хотя по умолчанию данный файл должен содержать всего одну строку:

/var/lib/exports/iso    *(rw)

Проверить правильность текущего NFS стораджа можно командой:

# exportfs

Должно выйти сообщение которое содержит каталог ISO:

/var/lib/exports/iso                <world>

Если за место каталога видите ошибку, смотрите инструкцию внизу.

Поэтому, если вдруг у вас там непонятно что, создавайте NFS DATA сторадж по стандартной инструкции:

Удалим содержимое файла /etc/exports.d/ovirt-engine-iso-domain.exports

# :> /etc/exports.d/ovirt-engine-iso-domain.exports

Эта команда стерла все содержимое файл. Теперь стандартно прописываем наши каталоги, для этого откроем файл /etc/exportfs и отредактируем его до такого вида:

# vi /etc/exportfs

/var/lib/exports/iso    *(rw,no_root_squash)
/var/lib/exports/data   *(rw,no_root_squash)

Так как каталог /var/lib/exports/data пока еще не создан, создадим его:

# mkdir /var/lib/exports/data

# chown vdsm:kvm /var/lib/exports/data

Также не помешает удалить содержимое каталога ISO - /var/lib/exports/iso/:

# rm -rf /var/lib/exports/iso/*

Теперь осталось перезапустить NFS сервер:

# systemctl restart nfs-server

И посмотреть есть ли наши шаренные каталоги:

# exportfs

/var/lib/exports/iso
<world>
/var/lib/exports/data
<world>

Осталось подключить наши стораджы в самом oVirt:

Blog post image

Идем в Storage -> New Domain и далее прописываем последовательно сперва DATA сторадж-домен для виртуальных машин, а потом ISO сторадж для образов ISO. В System -> Storage - удалить стандартный ISO domain и пересоздать его.

Получится примерно так:

Blog post image

Здесь видны наши два NFS стораджа.

Добавляем iSCSI сторадж:

Устанавливаем дополнительные утилиты по работе с iSCSI:

# yum install iscsi-initiator-utils -y

Далее появится файлик с вымышленным номером "iqn"  - /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1994-05.com.redhat:d93c1b34f23

В нем видим уникальный тестовый номер (логин), он создается от фонаря утилитой iscsi-iniciator. Это строчка как бы логин для авторизации на хранилище данных. Мы должны заменить этот логин нашим - "iqn.2016-01.com.company:t1", который создали во время настройки iSCSI хранилище.

В итоге, потребуется в обязательном порядке прописать номер "iqn.2016-01.com.company:t1" в файле  "/etc/iscsi/initiatorname.iscsi" на всех хостах участвующих в кластере oVirt, Node 1 и Node 2. После чего рестартуйте демон клиентского инициатора iscsd чтобы он перечитал новый IQN:

# systemctl restart iscsid

Нажимаем New Domain:

Blog post image Blog post image Blog post image

Конфиг таргета:

# targetcli ls /
o- / .................................................................... [...]
o- backstores ....................................................... [...]
| o- block ...................................... [Storage Objects: 1]
| | o- hdd_block1  [/dev/mapper/lvgroup1-vmstore (39.0GiB) write-thru activated]
| o- fileio ...................................... [Storage Objects: 0]
| o- pscsi ...................................... [Storage Objects: 0]
| o- ramdisk .................................. [Storage Objects: 0]
o- iscsi .................................................... [Targets: 1]
| o- iqn.1994-05.com.redhat:913f4624da3 ........ [TPGs: 1]
|   o- tpg1 ................................................... [gen-acls, tpg-auth, 1-way auth]
|     o- acls .................................................. [ACLs: 1]
|     | o- iqn.1994-05.com.redhat:913f4624da3 ..... [auth via tpg, Mapped LUNs: 1]
|     |   o- mapped_lun0 ................................... [lun0 block/hdd_block1 (rw)]
|     o- luns ................................................... [LUNs: 1]
|     | o- lun0 ................. [block/hdd_block1 (/dev/mapper/lvgroup1-vmstore)]
|     o- portals ................................................ [Portals: 1]
|       o- 0.0.0.0:3260 ....................................... [OK]
o- loopback .....................................................[Targets: 0]

2. Установка репозитория oVirt на гипервизорах

# yum install http://plain.resources.ovirt.org/pub/yum-repo/ovirt-release36.rpm -y

3. Загрузка ISO образов

# wget http://tinycorelinux.net/6.x/x86/release/TinyCore-current.iso

# ovirt-iso-uploader upload --iso-domain=ISO TinyCore-current.iso --force

# wget http://distro.ibiblio.org/puppylinux/puppy-slacko-6.3.0/32/slacko-6.3.0.iso

# ovirt-iso-uploader upload --iso-domain=ISO slacko-6.3.0.iso --force

Если у вас много ISO образов, удобней их качать прямо в каталог ISO:

/var/lib/exports/iso/b89c8dd6-310d-4054-a506-ce4c0c737a4b/images/11111111-1111-1111-1111-111111111111

При создании ISO NFS хранилище, внутри каталога создаются служебные файлы и каталоги самим oVirt. В каталоге images создается подкаталог с цифрами, вы можете прямо туда загружать ваши ISO образы.

4. Установка гостевых систем

Blog post image

Идем в System -> Data Centers -> Default

Вкладка Virtual Machines -> New VM

Blog post image

Заполняем поля:

  • Operation system - Linux
  • Name - TinyLinux (без пробелов)
  • nic1 - ovirtmgmt/ovirtmgmt

Далее щелкаем кнопку Create для создания виртуального диска:

Blog post image

Заполняем поля:

  • Задаем объем диска - 1 Гб
  • Выбираем хранилище (Storage Domain) где будет создана ВМ.  Я выбрал iSCSI хранилище.
  • Выбираем тип виртуального диска - Тонкий диск (Thin provision)
  • Нажимаем ОК
Blog post image

На картинке внизу есть кнопка Show Advanced Options. После ее нажатия появляется расширенное меню, где можно указать конфигурацию железа для ВМ - кол-во ОЗУ, ядер CPU и другие опции.

Нажимаем ОК

Blog post image

Теперь осталось запустить нашу ВМ с загрузочным ISO образом. Для этого есть кнопка Run Once (запустить однажды). Щелкаем ее, и указываем ISO образ для загрузки.

Blog post image

Полная картинка

Здесь ставим галку Attach CD и в списке выбираем ISO образ Tiny Linux. Нажимаем ОК.

После нажатия ОК запускается ВМ Tiny Linux.

Просмотр работы виртуальных машин

Первый способ:

Для того чтобы видеть как работают виртуальные машины в oVirt, потребуется программа Virt-Viewer, которая показывает ход работы ВМ по протоколу Spice:

https://virt-manager.org/download/sources/virt-viewer/virt-viewer-x64-3.1.msi

Скачайте virt-viewer и установите его.

Blog post image

Щелкаем значок зеленного мониторчика как на картинке.

Blog post image

После чего вам будет предложено скачать файл "console.vv" и сразу же открыть его через Virt-Viewer.

Нажимаем ОК.

Blog post image

Полная картинка

И видим как работаешь наш Tiny Linux. Чтобы перейти в полно экранный режим, нажмите Shift + F12.

Для переключения мыши нажмите Shift+F11.

Второй способ:

Для этого надо экспортировать сертификат из браузера:

Blog post image

Полная картинка

Далее импортируем этот сертификат, при импорте указываем "Доверенные корневые центры сертификации":

Blog post image

Полная картинка

Меняем Spice клиент на Spice html5 viewer:

Blog post image

Полная картинка

Теперь можно увидеть экран ВМ прямо в браузере:

Blog post image

6. Настройка Power Managment - Fencing

Для тестирования кластера высокой доступности High Availability (HA), потребуется настроить Power Managment (управление питанием), а именно Fencing. Что такое Fencing - это автоматический перезапуск (типа отключили питание/включили питание) хоста гипервизора, в случае если связь с ним потеряна. Требуется для предотвращения записи данных с упавшего хоста. То есть это нужно, чтобы два хоста параллельно не смогли записывать данные в одну и ту же виртуальную машину. Если такой сценарий произойдет - данные виртуальной машины превратятся в тыкву.

Перезапуском управляет oVirt Engine. Допустим хост KVM Node 1 сгорел и перестал отвечать, в этом случае, oVirt Engine посылает команду на хост KVM Node 2, чтобы тот произвел Fence (перезагрузку) хоста который не отвечает - KVM node 1. Если остался всего один хост KVM, то перезагрузка не будет работать - логично. После операции Fence, идет перезапуск виртуальных машин на работающем хосте -  KVM node 2. А вы в это время идете и смотрите, почему хост KVM Node 1 перестал работать (завис и т.д.).

В основном в качестве Fencing используют:

Вот полный список устройств через которые можно запустить fencing в oVirt: apc, apc_snmp, bladecenter, cisco_ucs, drac5, eps, ilo, ilo2, ilo3, ilo4, ipmilan, rsa, rsb, wti и zzz

Так как у меня нет управляемого PDU и серверов с iLO, DRAC, IPMI и т.д., был взят эмулятор фенсинга, который написан очень классным спецом - Евгением Деревянкиным, кстати посмотрите его видео на youtube, он выложил целый цикл занимательного видео по oVirt. Даже иностранцы смотрят его ролики, хотя язык изложения русский. Вот видите, как хороший материал может привлекать обширную аудиторию.

Эмулятор фенсинга работает только в Linux с KVM, но думаю его можно переписать(ох, зачем я этого написал), чтобы он работал в Windows(VirtualBox или Workstation).

Устанавливаем Fake Fencing:

# yum install git make python-libvirt -y

# git clone https://github.com/jekader/fake_ilo.git

# cd fake_ilo

# make

# cd /etc/fake_ilo

# chkconfig --level 35 fake_ilo on
Создаем сертификаты для работы Fake Ilo:
# openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -nodes -days 9999
Запускаем в ручном режиме Fake iLO
# /usr/bin/ilo.py
Будет просто мигать курсов, это означает что он готов к работе.
Теперь можно даже перезагрузить хост гипервизора через него :)
Созданные сертификаты потребуется скопировать на node 1 и node 2 чтобы проверить как идет коннект:
# scp server.* root@10.0.10.10:/opt
# scp server.* root@10.0.10.11:/opt
И на нодах можно проверить как идет соединения по сертификату:
# cd /opt
# openssl s_client -host 10.0.10.100 -port 1234 -cert server.crt -key server.key
Хотя на самом деле эти сертификаты не нужны на нодах.

Создаем systemd юнит для запуска и останова Fake Fencing:

# vi /etc/systemd/system/fakelio.service

[Unit]
Description= Fakeilo
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/var/run/fakeilo.pid
ExecStartPre=/usr/bin/kill $(ps aux | grep '[p]ython /usr/bin/ilo.py' | awk '{print $2}')
ExecStart=/usr/bin/ilo.py
ExecStop=/usr/bin/kill $(ps aux | grep '[p]ython /usr/bin/ilo.py' | awk '{print $2}')
[Install]
WantedBy=multi-user.target
Установим зависимости:
# yum install fence-agents -y
Проверка работы iLO с хостов KVM
Статус хоста гипервизора:
#  fence_ilo --ssl-insecure -a 10.0.10.100 -u 1234 -l ovirt-kvm2 -p ovirt-kvm2 -o status
Перезагрузка хоста node2 - kvm:
#  fence_ilo --ssl-insecure -a 10.0.10.100 -u 1234 -l ovirt-kvm2 -p ovirt-kvm2 -o reboot
 

Включаем Power Managment у хостов c KVM:

Blog post image

Нажимаем Edit сперва на первом хосте и на втором, включаем Power Managment:

Blog post image

Щелкаем плюсик и добавляем Fence Agent - наш Fake Ilo.

Blog post image

На этом все!

Обязательно ставьте опцию - "ssl_insecure=1"

На первом хосте указываете ovirt-kvm2 node, на втором ovirt-kvm1 node. То есть первый хост перезагружает второй, и на оборот, второй хост перезагружает первый.

7. Тестируем кластерные фичи

В этом разделе посмотрим как работают кластерные фичи oVirt. Возможно это не все возможности данного программного обеспечения, которые я могу знать.

7.1. Живая миграция

Живая миграция - это перенос виртуальной машины с одного физического сервера на другой без прекращения работы виртуальной машины и остановки сервисов.

Для живой миграции не нужен Fencing, это самый простой кластер, который можно настроить за 5 минут. У вас не отнимет много времени настройка такого типа кластера, чтобы обеспечить простейшею отказоустойчивость у себя в компании. Когда мы добавили два хоста в oVirt, нам сразу стали доступны функции живой миграции. Как это работает:  Допустим некая виртуальная машина работает на хосте ovirt-kvm1, в один прекрасный день на этом хосте начал барахлить жесткий диск, вы читаете его S.M.A.R.T. отчет,  диагноз - диск потихоньку покрывается бедами. И вот вы видя это, предпринимаете шаги: мигруруете ВМ которая работала на этом хосте на другой сервер ovirt-kvm2. Далее после чего, переводите хост в режим обслуживания и выключаете его для процедуры замены диска. При этом пользователи которые работали с данной ВМ, даже не заметят того, что один из серверов перестал работать. А вы в это время будете спокойны что все ИТ системы работают.

Для миграции ВМ, просто выделите нужную ВМ и нажмите Migrate. Если у вас всего два хоста, то будет автоматически выбран второй хост в качестве цели миграции. Таким простым способом происходит кочевание виртуальных машин с хоста на хост. Это операция делается в ручном режиме, то есть нужны руки администратора.

Blog post image

Выделяем машину и нажимаем Migrate

Blog post image

Текущая ВМ работает на хосте ovirt-kvm2.asia.local, автоматически предложен хост для миграции - ovirt-kvm1.asia.local.

Нажимаем OK.

Blog post image

Видим что ВМ смигрировала на ноду KVM Node 1.

7.2. High Availability

Высокая доступность (High Availability) - это метод проектирования системы, позволяющий достигать высокий уровень доступности системы в течение какого-либо промежутка времени (Wikipedia).

HA - это группа серверов с установленными на них гипервизорами которые хранят данные ВМ (виртуальных машин) в общем хранилище данных. Допустим что один хост (сервер) с гипервизором перестал работать  -  отказало железо [сгорела мат. плата]. Работающая на нем виртуальная машина, например с Windows, в итоге при таком случае, автоматически перезапустится на другом хосте. Простой от такой операции равен 30 секундному таймауту + времени загрузки виртуальной машины Windows. Это все происходит в автоматическом режиме. Упавший хост со сгоревшей мат. платой ремонтируется, и вводится опять в кластер. Само собой, юзеры могут позвонить и поднять шум, за время запуска их виртуальной машины. Это операция требует минимального простоя (downtime). Таймаут в 30 секунд требуется для защиты от случайных случаев перезапуска, то есть oVirt Engine может ошибиться если сразу инициирует процесс перезапуска ВМ, бывает что хост гипервизора на секунды 3-10 по каким либо причинам может отвалится. Чтобы попросту не гонять ВМ между гипервизорами, необходимо удостоверится что хост точно упал, вот для этого и нужен этот таймаут.

Как обычно, для работы HA требуется выполнить следующие условия:

- Кластер с как минимум двумя хостами

- Общее хранилище данных (СХД)

- Настроенный Power Managment (Fencing)

- Желательно чтобы железо серверов было одинаковым (модель процессора, кол-во ОЗУ и т.д.)

Включаем HA на нужной ВМ:

Blog post image

Идем в System -> Virtual Mchines -> выделяем ВМ -> Нажимаем Edit

Blog post image

Заходим в Advanced Options -> High Availability -> Ставим галку -> Нажимаем ОК

Все теперь HA включена.

7.3. Балансировка нагрузки

С помощью Optaplanner, вы можете распределять нагрузку между хостами гипервизоров. Например, допустим есть два хоста ovirt-kvm1 и ovirt-kvm2. На первом хосте, работает две ВМ (виртуальные машины), а второй хост свободен - на нем не работает ни одной ВМ. Разумеется ресурсы хоста ovirt-kvm1 расходуются и он нагружен. Анализируя данную ситуацию, балансировщик нагрузки может распределят ресурсы равномерно между гипервизорами, например, он может инициировать процесс живой миграции одной из ВМ хоста ovirt-kvm1 на простаивающий хост ovirt-kvm2. Тем самым проводя балансировку нагрузки между хостами гипервизоров.

Заходим в свойства кластера Default и далее в Scheduling Policy:

Blog post image

Здесь выбираем политику работы балансировщика:

  • Select Policy (выбор политики) - Evenly Distributed (равномерное распределение)
  • Properties (свойства политики):
  • === CpuOverCommitDurationMinutes - Продолжительность потребления процессора в минутах для активации алгоритма выбора - 2 минуты
  • === HighUtilization - Предельное использования процессора = 80
  • === MaxFreeMemoryForOverUtilization - Максимальное свободная память для использования политики = 80

Или вариант для энергосбережения:

Blog post image

8. Конвертирование физической машины в виртуальную

Есть специальная утилита virt-p2v которая может перевести ваш физический ПК в виртуальный.

А также, это программа позволит перетянуть другие ВМ с гипервизоров ESXi, Hyper-V на ваш oVirt.

9. Резервное копирование

Есть два варианта, первый это использовать oVirtBackup или второй - Acronis Backup Advanced 11.5 for rhev/kvm

Для oVirt Engine есть команда engine-backup которая делает резервную копию Engine, а также команда engine-restore - восстанавливает Engine из сделанной копии. Всегда создавайте копии Engine, он является узким местом в кластере.

10. Ссылки:

1. Сборник грабелек ovirt 3.2

2. Ovirt и его странности

3. Установка_системы_управления_виртуализацией_Ovirt_3.5_в_доменной_среде_IPA_на_базе_RELS_6.6

4. Впечатления от oVirt

5. Инструкция по быстрой установки

6. Балансировка нагрузки

7. Видео балансировка нагрузки

8. Optaplanner

9. Цикл видео от Евгения Деревянкина

10. Fake iLO Fencing от Евгения Деревянкина

11. Smart VM sheduling

12. Yanic Bronheim - oVirt Overview - Open-Source Product For Virtualization Management

13. Установка и настройка oVirt в CentOS 6

14. Deep Drive  Sheduler

15. FAQ SSL

1
7632
8