VPS Qemu
Šiame straipsnyje aprašoma kaip įdiegti bei valdyti Qemu paremta Linux hipervisoriaus virtualizacija Debian GNU/Linux distribucijoje. Informacija taikytina ir kitoms panašioms distribucijoms bei sistemoms.
Diegimas
apt-get install qemu-kvm libvirt-bin virtinst
Tinklo konfigūravimas
Bridge tipo fizinis tinklas (Išoriniai ip)
apt install resolvconf bridge-utils
Standartinis /etc/network/interfaces maždaug atrodo taip:
allow-hotplug eth0 iface eth0 inet dhcp
Užkomentuodami pastarąsias eilutes, pridedame teksto:
iface eth0 manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
Išsaugome failą, tuomet atsidarome /etc/sysctl.conf ir įrašome šias eilutes (išjungiame nenaudojamą ipv6 bridžinimą):
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
Išsaugome ir paleidžiame:
/sbin/sysctl -p /etc/sysctl.conf
Tuomet reikia pridėti šias eilutes į /etc/rc.local (būtų gerai rankomis dar prieš exit eilutę, jeigu pastaroji yra):
echo "iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu" >> /etc/rc.local
Galų gale kuriant VPS galima bus panaudoti parametrą, pvz.: --bridge=br0,model=rtl8139,mac=54:52:01:94:92:96 Arba, tinklo konfigūracijos XML apačioje.
<interface type='bridge'>
<mac address='52:54:00:00:99:c5'/>
<source bridge='br0'/>
</interface>
Dabar mums reikia kreiptis į ISP arba Hostingo provaiderį, kad kiekvienam papildomam ip adresui priskirtų po atskirą MAC adresą, kai gausime sąrašą galime konfigūruoti virtualių mašinų ip adresus, pvz.:
iface eth0 inet static address PAP_IL_DOM_AS_IP netmask 255.255.255.0 gateway GATEWAY_KAIP_IR_HYPERVISORIUJE dns-nameservers 1.1.1.1 8.8.8.8
Perkrauname ir žiūrime koks bus rezultatas, visada galima pasitelkti tcpdump ir stebėti vnet0 kaip eina paketai.
NAT'intas bridžintas virtualus tinklas
Sukuriam failą vps_tinklas.xml kurio viduje turim turėti:
<network> <name>tinklas</name> <bridge name="virbr10" /> <forward mode="nat"/> <ip address="10.0.0.1" netmask="255.255.255.0"> <dhcp> <range start="10.0.0.2" end="10.0.0.254" /> </dhcp> </ip> </network>
Sukuriam šį tinklą per virsh
# net-create --file /pathas/iki/failo/vps_tinklas.xml # net-start tinklas # net-autostart tinklas
Priskiriame tinklą kokiam nors vps'ui, atsidarę jo konfigą:
<interface type='network'>
<mac address='52:54:00:b9:cc:31'/>
<source network='tinklas'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Tinklas pagal nutylėjimą
# virsh net-start default # virsh net-autostart default
Paleidimas
/etc/init.d/libvirtd start
Virtualių VPS mašinų valdymas
Įeiname į virsh VPS valdymo komandinę konsolę parašę "virsh". Arba šias komandas vykdome iš shell'o darašius priekyje virsh, pvz.: virsh destroy vps_pavadinimas.
Sukūrimas
create_vps skriptas su komentarais, kuriuos būtinai perskaitykite ir pagal tai keiskite jo konfigūraciją.
#!/bin/sh truncate --size=50192M /srv/vps/windows.img # Virtualus 50GB diskas (truncate reiškia, kad jis bus sukurtas ne pilnos 50GB talpos, o pagal VPS užimtą vietą) virt-install --force -r 1596 -n Win10 \ # nurodome 1596MB Ram ir pavadinimą Win10 --os-type=windows \ # Nurodome OS tipą -f /srv/vps/windows.img \ # Nurodome HDD atvaizdą --network network:tinklas \ # Nurodome tinko tipą (APIE TINKLO KONFIGŪRACIJĄ APRAŠYTA VIRŠUJE) --cdrom /srv/vps/win10.iso \ # Nurodome ISO failą iš kurio diegsime operacijų sistemą --graphics vnc,password=slaptazodis,listen=0.0.0.0,port=5913 # Nurodome VNC serverio portą bei slaptažodį echo "VPS Sukurtas"
Galimos problemos su win7/8/10 diegimu senesnėse libvirt versijose todėl reiktų keletos pakeitimų skripte:
virt-install --force -r 1596 --vcpus=2 -n Win7 \ --os-type=windows --noapic --noreboot \ -f /srv/vps/windows.img \ --network network:tinklas \ --cdrom /srv/vps/windows7.iso \ --graphics vnc,password=slaptazodis,listen=0.0.0.0,port=5913
Valdymas
# virsh list # virsh start vps_pavadinimas # vncdisplay vps_pavadinimas # parodo kaip sukonfigūruotas VNC serveris # nodeinfo # informacija apie VPS # list # parodo visus veikiančius VPS # setmem <vps_pavadinimas> 16G --config # suteikti daugiau darbinės atminties (tik išjungtam hostui)
CPU priskyrimai
Konfiguracijos koregavimas
Jeigu norint pakeisti viena ar kita parametra, pvz.: prideti cpu branduoliu arba prideti ram, pakeisti aparatine iranga, reikia atsidaryti guest'o konfiga su komanda:
# virsh edit <vps_pavadinimas>
Didinam cpu resursus (statiniai cpu)
<vcpu placement=’static’>8</vcpu>
Keiciam cpu loginius resursus bei cpu modeli ir t.t.
<cpu> <model>power8</model> <topology sockets=’1’ cores=’2’ threads=’4’/> </cpu>
Po viso sito, virsh shutdown <vps_pavadinimas>, virsh start <vps_pavadinimas>
Krovimas is CDROM
virsh edit <virtualas>
Pridedam sias eilutes tarp <os> </os>
<boot dev='cdrom'/> <boot dev='hd'/> <bootmenu enable='yes'/>
Virtualaus disko prapletimas
Prieš ką nors darydami pirmiausia išjungiame virtualią mašiną Pažiūrime info:
virt-filesystems --long -h --all -a olddisk
Praplečiame diską papildomais 5GB
truncate -r olddisk newdisk truncate -s +5G newdisk
Particijų dydžių keitimas tiesiogiai virtualiame hdd (PASTABA! particija yra sename disko imidže)
virt-resize --expand /dev/sda2 olddisk newdisk
Įjungiame mašiną
Virtualaus disko konvertavimas i cow2 format
qemu-img convert -f raw -O qcow2 /path/to/your/hdd/vm01.img /path/to/your/hdd/vm01.qcow2
Po to nepamirstame pakeisti disko tipo:
virsh edit <vm>
Virtualių diskų managinimas
apt-get install libguestfs-tools guestfish -a vps.img
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
><fs> run
100% [###########################################################################################################################################################################################################] 00:00
><fs>
><fs> list-filesystems
/dev/sda1: ext4
/dev/sda2: ext4
><fs> fsck ext4 /dev/sda1
Virtualių diskų pridėjimas
Sukuriame diską:
truncate --size=30192M /srv/vps/30additional.img
Sukuriame konfiga /srv/vps/NewStorage.xml
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/srv/vps/30additional.img'/>
<target dev='hdd' bus='virtio'/>
</disk>
Prijungiame:
virsh attach-device Win10 NewStorage.xml
Jeigu norime prijungti diską ne vienam kartui tuomet pridedame parametrą "--persistent"
virsh attach-device --persistent Win10 NewStorage.xml
Jeigu tai windows Guest OS būtina papildomai įdiegti draiverius: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso viostor ir vioscsi Tuomet per disk manager initializuojame naują diską su pasirinkta failų sistema ir galime naudoti.
Pašalinimas
Komandos skirtos išjungti ir pašalinti virtualų hostą:
# destroy vps_pavadinimas # undefine vps_pavadinimas
Atvaizdu akturimas
Apie netyčia arba tyčia ištrintų image atvaizdų atkūrimą, skaitykite photorec puslapyje.
Migracija
Nukopijuojame hdd .img ar .qcow2 disko atvaizdus i naujaji serveri. Tuomet padarome vm'u konfiguraciju dump'us
virsh dumpxml <VPS> > manovps.xml virsh net-dumpxml <tinklas> > netxml.xml
Kitoje masinoje rasome
virsh define manovps.xml virsh net-define netxml.xml virsh net-start <netname> virsh net-autostart <netname>
Live Migracija
Nukopijuojame vm hdd image:
scp {volume-file} {user}@{host}:{path}
Atliekame live migracija:
virsh migrate --live --copy-storage-all {vm-name} qemu+ssh://{host}/system
Ex.:
administrator@jungle:~$ scp test-vm/tmpZFu5C7.qcow2 forest.cnx.rice.edu:/homes/administrator/test-vm/tmpZFu5C7.qcow2 administrator@jungle:~$ virsh migrate --live --copy-storage-all test-vm qemu+ssh://forest.cnx.rice.edu/system