ВИРТУАЛИЗАЦИЯТА Е ТЕХНОЛОГИЯ ЗА ЕФЕКТИВНО УПРАВЛЕНИЕ НА СЪРВЪРНИ РЕСУРСИ
Libvirt – Linux Virtualization – Ubuntu 16.04
Виртуализацията като технология значително намалява стойноста на притежаваните сървъри и предоставя възможност за работа с голям брой приложения, които се разполагат на една физическа машина.
http://libvirt.org/
http://www.linux-kvm.org/
http://wiki.qemu.org/
Конфигурираме бридж на мрежовия интерфейс
Ако искаме да виртуализираме с libvirt трябва преди да се запознаем с него да конфигурираме хостинг машината в бридж. За целта Инсталираме:
sudo apt-get install bridge-utils |
И описваме мрежовия конфигурационен файл /etc/network/interfaces според нашата топология:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Bridge between eth0 and eth1 auto br0 iface br0 inet dhcp # For static configuration delete or comment out the above line and uncomment the following: # iface br0 inet static # address 192.168.1.10 # netmask 255.255.255.0 # gateway 192.168.1.1 # dns-nameservers 192.168.1.5 # dns-search example.com bridge_ports eth0 eth1 bridge_stp off bridge_fd 0 bridge_maxwait 0 |
Хардуера ни поддържа ли виртуализация
libvirt библиотеката се използва, за различни технологии за виртуализация. Преди да започнете с libvirt най-добре е да се уверите, че вашият хардуер поддържа необходимите разширения за виртуализация. Въведете следната команда в терминала:
kvm-ok |
Отговора при мен е:
KVM acceleration can be used |
Което значи: KVM (модул за виртуализация в кърнела) ускорението може да се използва.
Инсталация на Libvirt
Инсталация
sudo apt-get install qemu-kvm libvirt-bin |
Потребителя трябва да влезе в групата на libvirt
sudo adduser $USER libvirtd |
Трябва ни само официален iso файл с Ubuntu
Теглим iso с Ubuntu сървър от Интернет за да го използваме за инсталацията на виртуалната машина.
wget -c http://bg.archive.ubuntu.com/releases/16.04.1/ubuntu-16.04.1-server-amd64.iso |
Инсталиране на virtinst
Инсталирането на virtinst е важно за да можем да направим първоначалното инсталиране на iso файла и създаването на image за виртуалната машина с параметрите който са ни нужни.
sudo apt-get install virtinst |
Инсталиране и задаване на параметри
sudo virt-install -n server4 -r 4096 --vcpus=4 \ --disk path=/var/lib/libvirt/images/server4.img,bus=virtio,size=20 -c \ ubuntu-16.04.1-server-amd64.iso --network bridge:br0 \ --graphics vnc,port=5900,listen=0.0.0.0 --noautoconsole -v |
където:
-n server1 името на виртуалната машина която създаваме
-r 4096 памета която ще използва виртуалната машина в мегабайти
–vcpus колко виртуални ядра ще се използват
–disk path= къде ще се намира image файла на виртуалната машина
size=20 пространството което се използва, 20 гигабйта
ubuntu-16.04.1-server-amd64.iso файла който изтеглихме от Интернет
–network bridge:br0 бриджа на хост сървъра който създадохме в началото
–-graphics vnc,port=5900 VNC сървър ни отваря порт за достъп за да инсталираме
listen=0.0.0.0 VNC сървъра слуша на всички интерфейси (ако има такива)
–noautoconsole да не зарежда терминал(без логването от VNC)
-v пълна виртуализация на виртуалната машина
Свързване към виртуалната машина отдалечено
Следващата стъпка е да се свържем отдалечено с VNC клиент към виртуалната машина за да я инсталираме:
вариант 1: virt-viewer
Инсталираме virt-viewer
sudo apt-get install virt-viewer |
И се свързваме с виртуалната машина
samyil@desktop:~$ virt-viewer -c qemu+ssh://192.168.60.17/system server4 |
Вариант 2: Reminna Remote
С програмата Reminna Remote Desktop Client
Вариант 3: virt-manager
С програмата Virtual Machine Manager с която дори могат да се администрират виртуалните машини и да се следи тяхното състояние:
sudo apt-get install virt-manager |
Вариант 4: Windows с VNC Viewer
Хост сървъра с инсталирани виртуални машини
Но нека се върнем при нашия сървър и видим как изглежда с няколко виртуални машини:
Инструмента за администриране на вече инсталираните машини се нарича virsh и е доста интуитивен:
Кой виртуални машини са старирани в момента
samyil@host5:~$ virsh list Id Name State ---------------------------------------------------- 1 server1 running 2 server2 running 3 server3 running 4 odoo1 running 5 odoo2 running 8 server4 running |
Принудително гасене на виртуалната машина
samyil@host5:~$ virsh shutdown server1
Domain server1 is being shutdown |
Стартиране на виртуалната машина
samyil@host5:~$ virsh start server1
Domain server1 started |
Рестартиране на виртуалната машина
samyil@host5:~$ virsh reboot server1
Domain server1 is being rebooted |
Стартиране при рестартиране на Хост сървъра
samyil@host5:~$ virsh autostart server1 Domain server1 marked as autostarted |
Архивиране на състояние
samyil@host5:~$ virsh save server1 server1-backup1.state
Domain server1 saved to server1-backup1.state |
Въстановяване от архив
samyil@host5:~$ virsh restore server1-backup1.state
Domain restored from server1-backup1.state |
Спиране и унищожаване на виртуална машина
samyil@host5:~$ virsh shutdown server4 Domain server4 is being shutdown samyil@host5:~$ virsh destroy server4 Domain server4 destroyed samyil@host5:~$ virsh undefine server4 Domain server4 has been undefined samyil@host5:~$ sudo rm /var/lib/libvirt/images/server4.img |
Редактиране параметрите на виртуална машина с xml
samyil@host5:~$ virsh edit server1 Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.basic 4. /usr/bin/vim.tiny |
virsh ще ни попита с кой от наличните ни едитори в системата искаме да редактираме xml файла с праматетрите на виртуалната машина.
<domain type='kvm'> <name>server1</name> <uuid>83c8a956-7678-4250-87fb-962b02bc68b9</uuid> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>8</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-wily'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>SandyBridge</model> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/bin/kvm-spice</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/server1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hda' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:e0:b7:48'/> <source bridge='br0'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='16384' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain> |
Проверка на параметрите и състоянието на определена виртуална машина
samyil@host5:~$ virsh dominfo server3 Id: 3 Name: server3 UUID: 2f3a3420-b514-4f2e-a6e4-686b03fdcbfa OS Type: hvm State: running CPU(s): 4 CPU time: 29,9s Max memory: 4194304 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: apparmor Security DOI: 0 Security label: libvirt-2f3a3420-b514-4f2e-a6e4-686b03fdcbfa (enforcing) |
Проверка на параметрите на Хостинг сървъра
samyil@host5:~$ virsh nodeinfo CPU model: x86_64 CPU(s): 24 CPU frequency: 2000 MHz CPU socket(s): 1 Core(s) per socket: 6 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 198054876 KiB |
Тъй като нашият хостинг сървър има 24 ядра (2 процесора x 6 ядра с hyper threading = 24 в htop) в определен случай може да имаме нужда да осигурим точно опеделени ядра за виртуалната машина. Това се прави като се редактира xml файла с virsh edit server1 и се опишат нужните ядра с vcpupin. Трябва също да се обърне внимание, че първият процесор не е “1” а е “0” и съответно “24” е “23” тоест последния. В примера по долу описвам с vcpu, че виртуалната машина ще използва 4 ядра и с vcpupin, че те ща са последните от 24-те на физическия хостинг сървър.
<vcpu placement='static'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='23'/> <vcpupin vcpu='1' cpuset='22'/> <vcpupin vcpu='2' cpuset='21'/> <vcpupin vcpu='3' cpuset='20'/> </cputune> |
По принцип изключчането на виртуалните машини от самите тях не е добавено в конфигурациония xml защото почти не се използва. Ако е нужно това може да се добавят следните редове.
features> <pae/> <acpi/> <apic/> <hap/> <privnet/> <hyperv> <relaxed state='on'/> <vapic state='on'/> <spinlocks state='on' retries='4096'/> <vpindex state='on'/> <runtime state='on'/> <synic state='on'/> <reset state='on'/> <vendor_id state='on' value='KVM Hv'/> </hyperv> <kvm> <hidden state='on'/> </kvm> <pvspinlock state='on'/> <gic version='2'/> </features> |
Базов мониторинг на хост сървъра
sudo apt install virt-top | virt-top |
Libvirt – Linux Virtualization – Ubuntu 16.04
Никога ме съм вярвал, че ще опра до такова ръководство, но благодаря на човека написал го, подредено, кратко и систематизирано. Във фирмата гледат и са чудят какво е това – безплатно и работи по добре от платеното – хаха 🙂
Аз го ползвам от години, един се омаза обаче след токов удар, с триста зора го подкарах пак 🙁