Proxmox VE 4.x

Allikas: Kuutõrvaja

Sissejuhatus

Proxmox on vabavarale ehitatud serverite virtualiseerimistarkvara, millega on mugav luua virtualiseerimis clustreid ja mis sisaldab lihtsat aga võimekat haldusliidest. Hetkel on versioonis 4 võimalik kasutada KVM põhiseid virtuaalmasinaid ja LXC konteinereid. Proxmoxist ei puudu ka kasutajad, kasutajagrupid, õigused, ega rollid. Proxmox Virtual Environment arendajaks on Proxmox Server Solutions.

Miinustena pole võimalik proxmoxis siduda omavahel mitut erinevast geograafilises lokatsioonis asuvad virtuaalmasinate clustrit ning ka võrkude haldus tuleb teha käsitsi mistõttu paljude vlanide ja eri võrkude puhul on see üsna tülikas. Ka puudub proxmoxis automaatne resursihaldus (ehk liiga suure ühe node koormuse korral ei mängita virtuaalmasinaid ümber). Sellegipoolest on tegemist hea alternatiiviga vmwarele väiksemasse ja keskmise suurusega asutusse. Mis puutub täpsematesse mahtudesse siis 15-20 masinaline cluster koos ligikaudu 200~ virtuaalmasinaga on täiesti tehtav. Suuremate andmekeskuste puhul on ilmselt mõtekas vaadata juba openstacki suunas.

Proxmoxi tasulise versiooni puhul on programmi lähtekood sama, samuti ei pakuta lisafunktsionaalsust. Tasulise versiooni puhul tehakse võimalikuks kasutada tasulist repositooriumi allalaadimisteks (kiirem ja stabiilsem uuendusperiood) ning erinevate pakettide kaudu suurendatakse tehnilise toe piletite maksimaalarvu aastas. Tasuta Proxmoxi kasutajad saavad kasutada tasuta repositooriumi, peavad leppima teateaknaga ja võivad rahulikult oma tehnilise mureküsimuse postitada kogukonna foorumisse ja saada ka sealt vastust. Küll aga ei garanteeri Proxmoxi arendajad sellisel juhul kiiret ning efektiivset lahendust.

Install

Kõige lihtsam tundub endiselt paigaldada puhas debian ja installida sinna peale vajalikud paketid. Nodede masspaigalduseks võib kasutada preseedi. Kui Proxmox teatab "KVM module not loaded. Maybe you need to enable Intel VT / AMD-V support in the BIOS." Siis on tõenäoliselt virtualiseerimise tugi BIOSist keelatud või üldse arvutist puuduv.

Seda mis versioon proxmoxist ja tema abitarkvarast parasjagu paigaldatud on näeb käsuga pveversion -v

Tasub kindlasti jälgida, et paigaldatud ja töötav oleks NTP deemon, kellaagade erinevus võib kergesti veebiliidese segamini ajada. Näiteks võib hakata andma üsnagi obskuurset "veateadet permission denied - invalid ticket (401)" ja veeb hakkab viskama login ekraanile tagasi.

Veebiliides

Pöördudes https://192.168.0.10:8006 aadressile peaks avanema veebiaken kus saab virtuaalseid masinaid luua ja hallata. Veebiliidese administraatori kasutajaks on "root" ja parooliks sama mis süsteemsel root kasutajal.

Veebihaldusliidest on võimalik kasutada kõigi klastri õlgade kaudu, mis tähendab võimalust efektiivseks koormuse jaotamiseks ning suurendab tõrkekindlust, kuna haldus­paneel ei ole jäigalt seotud ühe konkreetse õlaga.

Proxmoxi.jpg

NB! Tasub olla tähelepanelik ketastega. Kõik proxmoxi veebiliidese kaudu lisatud kettaallikad (lvm, rbd, iscsi, nfs) peavad töötama. Piisab täiesti kui ühe ketta allika kohta infot ei saa, et kogu veebiliides hakkaks jukerdama, sellepeale ei taheta ka teiste ketaste infot enam näidata ega ka virtuaalmasinate oma. Mingi tsükkel läheb ilmselt proxmoxi veebiliideses katki ja kõik.

Võrguseadistus

Proxmox kasutab virtuaalmasinate nii omavaheliseks võrku ühendamiseks, kui interneti lülitamiseks linux bridge või openvswitch lahendust. Linuxi bridge on seejuures küll primitiivse aga selle seadistus ja haldamine on lihtsam mistõttu tasuks eelistada väiksemates süsteemides just seda.

Lihtne linuxi bridge

Universaalsemaks võrgulahenduseks on olukord, kus proxmoxi hostil on endal väline IP aadress, et halduseks saaks sinna browseriga ligi ja samas pääseks virtuaalmasinad üle sama interface samast võrgust pärit avalike IP aadressidega välja. Ehk saaks jagada enda osadele virtuaalmasinatele avalikke IP aadresse (neid on alati vaja, proxyd, koormusjaoturid jne).

Linuxi bridge kujutab enda olemuselt primitiivset virtuaalset switchi kuhu on võimalik ühendada virtuaalservereid enda virtuaalsete liidestega või füüsilisi arvuti küljes olevad ethX porte. Nende bridgedega võib samamoodi nagu tavaliste switchidega ehitada ja ühendada erinevaid võrke virtuaalmasinate vahele.

Proxmox net.jpg

Antud näites onmeil on serveril üks võrgukaart ning tahame omistada sellele avaliku IP aadressi (192.168.1.15), lisaks aga ka teha üle selle virtuaalsete serveriteni bridge (silla) millekaudu pääsevad võrku ka kõik serveris resideeruvad virtuaalmasinad.

Sellejaoks avame faili /etc/network/interfaces

auto vmbr0
iface vmbr0 inet static
        address  192.168.1.15
        netmask  255.255.255.0
        gateway  192.168.1.254
        bridge_ports eth0 
        bridge_stp off
        bridge_fd 0

Ja ongi valmis. Server on ligipääsetav ip aadressilt 192.168.0.1 ning edaspidi virtuaalmasinaid luues saame määrata neile võrguseadmeks vmbr0 seadme ja omistada masinatele 192.168.0.0/24 võrgus olevaid aadresse. Kui võrgus on olemas DHCP server saavad nad need juba automaatselt.

Juhul kui masinas on veel teinegi võrgukaart nimega eth1, mis asub eraldi switchi taga saame tekitada täiendava bridge ilma IP aadressita. Selleks lisame interfaces faili järgneva (kasutades võtit manual)

auto vmbr1
iface vmbr1 inet manual
        bridge_ports eth1
        bridge_stp off 
        bridge_fd 0

Peale võrguseadistuse muutmist tuleb teha kas restart või käivitada käsk:

# /etc/init.d/network restart

Käsureal näeb joonisel ja konfis esitatud tulemust

# brctl show
bridge name	bridge id		STP enabled	interfaces
vmbr0		8000.001b21da2b7c	no		eth0
							tap118i0 
							tap121i0 
							tap126i0

Bridgesid saab seejuures tekitada ka töötavas süsteemis nö lennult käsurea vahenditega. Näiteks tekiame uue bridge nimega vmbr300 ja lisame sinna eth2 seadme

# brctl addbr vmbr300
# brctl addif vmbr300 eth2

Bridgest võrguseadme eemaldamiseks

# brctl delif vmbr300 eth1

Vmbr seadme käsureal ümbernimetamine on samuti võimalik, selleks

# ip link set vmbr0 down; ip link set dev vmbr0 name vmbr10;  ip link set vmbr10 up

Linuxi bridge koos vlanide ja erinevate MTU seadistustega

Meil on proxmoxis üks võrgukaart eth1

Vaja oleks sinna seadistada 2 vlani. Ja veel selliselt, et üks oleks mtuga 1500 ja teine mtuga 9000 (et oleks ühenduv iSCSI storage külge). Vlanid on nimedega (id-dega) 1 ja 30. Debianis tuleb selleks avada /etc/network/interfaces ja kirjutada sinna

auto eth1

iface eth1 inet manual
   up ip link set dev eth1 mtu 9000

auto eth1.1
iface eth1.1 inet manual
   up ip link set dev eth1.1 mtu 1500

auto eth1.30
iface eth1.30 inet manual

auto vmbr0
iface vmbr0 inet static
	address  192.168.1.20
	netmask  255.255.0.0
	bridge_ports eth1.1
	bridge_stp off
	bridge_fd 0

# storage 1
auto vmbr1
iface vmbr1 inet static
       address 192.168.2.20
       netmask 255.255.0.0
       bridge_ports eth1.30
       bridge_stp off
       bridge_fd 0

OpenV-Switchile konfigureerimine koos bondiga

Proovitud allpool olevat konfiguratsiooni ka OVS versiooniga 2.3.0, kus see ei töötanud. Kindlalt töötab OVS 2.6.0 (mis tuleb Proxmoxi repositooriumist).

Linuxi sildade puhul on olnud soovitatav teha igale vlanile oma sild. Openvswitchi puhul saab teha ühe suure silla ja sinna proxmoxi veebiliidest tagidega lisada virtuaalmasinatele sobivad vlanid.

OVS konfiguratsioonis on ette nähtud seda, et kasutusel on 2x10G porti, mis on SWITCHIST ka konfitud LACP toetama. Protokoll on 802.3ad - ehk siis failover + tcp balancer, st uplink tuleb 20G masina jaoks. Pordid on eelnevalt udevi reegli abil ümber nimetatud "g10" ja "h10".

Lisaks, veendu, et /etc/modules faili on kirjutatud kaks moodulit: loop ja 8021q

Terminid

  • OVSPort - Füüsiline port masina küljes, mida OVS kasutama hakkab (ainult juhul, kui ei ole kasutusel bond)
  • OVSBond - füüsilistest seadmetest kokku bonditud virtuaalne seade
  • OVSBridge - virtuaalne bridge (nagu switch), mida hatakase ette andma VMidele
  • OVSIntPort - OVSBridge sees olev virtuaalne port. Kasuta AINULT kui sul on vaja füüsilisele masinale sellest võrgust mingi IP anda! Näiteks: kui nodel on vaja sisevõrgu IPd.

Node /etc/network/interfaces näidiskonf

allow-vmbr0 bond0
iface bond0 inet manual
  ovs_bridge vmbr0
  ovs_type OVSBond
  ovs_bonds g10 h10
  pre-up ( ifconfig g10 mtu 9000 && ifconfig h10 mtu 9000 )
  ovs_options bond_mode=balance-tcp lacp=active other_config:lacp-time=fast
  mtu 9000

auto vmbr0
allow-ovs vmbr0
iface vmbr0 inet manual
  ovs_type OVSBridge
  ovs_ports bond0 vlan10

allow-vmbr0 vlan10
iface vlan10 inet static
  address 10.30.0.7
  netmask 255.255.255.0
  ovs_type OVSIntPort
  ovs_options tag=10
  ovs_extra set interface ${IFACE} external-ids:iface-id=$(hostname -s)-${IFACE}-vif
  ovs_bridge vmbr0

NB! vmbr0 sees ovs_ports sektsioonis peavad olema ära defineeritud kõik OVSIntPordid, mida sa seal sees kasutada tahad. iface vlan10 jaoks on vaja ära määrata ainult ovs_bridge, mida ta kasutab.

Mõned käsud ja statistika

ovs-appctl lacp/show bond0
ovs-appctl bond/show bond0

Käsitsi ülaltoodud konfi loomiseks:

ovs-vsctl add-br vmbr0
ovs-vsctl add-bond vmbr0 bond0 g10 h10 bond_mode=balance-tcp lacp=active other_config:lacp-time=fast
ovs-vsctl add-port vmbr0 vlan10 tag=10
ip addr add 10.30.0.7/24 dev vlan10

Proxmoxide vahelise clustri loomine

Proxmoxi täisvõimekus tuleb välja alles mitme masina koos kasutamisel. Proxmoxi cluster võimaldab virutaalmasinaid ilma katkestusteta mööda clustrit migreerida, suudab ühe node katkestuse korral masinad teisele nodele ümber kolida ja lisaks on proxmoxi clustri üheks suureks boonuseks keskse haldusliidese ehk nn "singel point of failure" puudumine.

Proxmoxi klasterfailisüsteem (ehk pmxcfs) on autorite sõnul ainulaadne, hoides kõiki konfiguratsiooni­faile lisaks salvestusseadmetele ka RAM-mälus. Kuna virtuaalmasinate konfiguratsiooni­failid on väga väikese mahuga, siis tõenäoliselt ei võta üks fail rohkem ruumi kui palju on ühe sektori suurus kõvakettal, mis on enamlevinud 512 baiti.

Kõik proxmoxile virtuaalmasinatele olulised konfiguratsioonid on koondatud /etc/pve kausta mis on replikeeritud kõikidele clustri nodedele.

Pvesync.jpg

Clustri loomiseks võib sisestada suvalises nodes

# pvecm create minginimi

Ja ülejäänud noded saab lisada andes käsu pvecm add ja lisades parameetriks node nime kus sai käivitatud clustri loomise käsk või hiljem suvaline node, mis on juba clustrisse ühendatud.

# pvecm add node1
root@jagaja's password: 
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'node2' to cluster.

Staatuse vaatamiseks

# pvecm nodes
Membership information
----------------------
    Nodeid      Votes Name
         5          1 node1
         1          1 node2 (local)
         6          1 node3

Täpsem info

# pvecm status
Quorum information
------------------
Date:             Tue Oct 11 16:32:36 2016
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          5/129076
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
   Nodeid      Votes Name
0x00000005          1 192.168.1.15
0x00000001          1 192.168.1.16 (local)
0x00000006          1 192.168.1.17

Üksiku node storage

Vaikimisi pannakse kõik VMid ja backupid ja ISO imgd millest installitakse ning lxc konteinerite templaadid /var/lib/vz alla. Kasutaja saab sinna minna käsurealt ja wgetida alla nt debiani, ubuntu jms installeri ISO failid, et virtuaalmasinaid installida.

Kui pole plaanis clustrit tekitada vaid kasutada ainult ühte proxmox serverit pole LVMil kasutamisel väga suurt mõtet, eriti kuna lvm ei toeta proxmoxi sees snapshottide tegemist (mis on väga hea asi). Seega võid teha ühe suure /srv paritsiooni ja lasta seadistada veebiliidesest see storage allikaks, kuhu virtuaalmasinad pannakse failikujul - näiteks qcow2 formaadis. Kui tahad natuke täiuslikumat süsteemi, võid proovida ka panna sinna reserveeritud partitsioonile Linuxi-zfsi versiooni ja tekitada virtuaalmasinad sinna.

Jagatud storage

Clustri korral on vaja korraldada kõigile nodedele üheaegselt kättesaadev kettapind. Ilma selleta kaotab cluster suuresti enda mõtte (migreerimine pole võimalik)

Jagatud andmehoidla kasutamine kõigist masinatest on üldiselt kõige kergem ja jõudlusesõbralikum iSCSI/FC abil Näiteks teha nii, et FC/iSCSI storage on jagatud kõigile masinatele korraga. Nt on lõigatud storagest 20TB suurune tükk ja võetud külge kõigile kümnekonnale nodele. Sellele viilakale on tehtud omakorda LVM ja sellel LVMil on kokku nii umbes 200+ virtuaalmasinat.

Proxmox on ise üsna tark, et ta oskab lvmi viilaka kus virtuaalmasin on aktiveerida vaid õigel nodel kus masin parasjagu töötab ja kõigis teistes nodedes samal ajal deaktiveerida. Kui teed virtuaalmasinale migreerimise ühelt nodelt teisele siis peale mäluseisu kopeerimist teeb proxmox lvm viilakale kus masin asub antud nodes deativate ja uues nodes kuhu migreeritakse activate. Nii saavad kõik noded sõbralikult üht sama välja jagatud ketast jagada ja migreeruda mööda clustrit.

LVM grupid

Soovitatav on, et kettal või partitsioonil, kus virtuaalmasinad resideeruvad oleks eelnevalt seadistatud LVM

Using LVM groups provides the best manageability. Logical volumes can easily be created/deleted/moved between physical storage devices. If the base storage for the LVM group is accessible on all Proxmox VE nodes (e.g. an iSCSI LUN) or replicated (with DRBD) then all nodes have access to VM images, and live-migration is possible.

Esiteks paigutad kõigile kolmele masinale FC kaardid ja jagad neile ühe suure kettaviilaka välja, mis tuleb siis kõigile kolmele-viiele masinale külge kui /dev/sdb

Teiseks tekitad ühes suvalises nodes pvecreate/vgcreate sellele /dev/sdb seadmele. Ühtlasi pead vaatama, et lvm2 utiliidid jms on kõigis nodedes olemas

Esimesena loome physical volume (pv):

# pvcreate /dev/sdb1
 Physical volume "/dev/sdb1" successfully created

teiseks loome volume group (vg)

# vgcreate suurketas /dev/sdb1
 Volume group "usb-stick" successfully created

Ja kõige viimasena tuleb lisada LVM grupp webiliidese kaudu storage alamjaotisest proxmoxi masinale. Selleks tuleb logida enda proxmoxi clustrisse (masinad peavad olema klustriks liidetud), võtad storage menüüst, et lisa allikas, valid LVM ja lisad rippmenüüs oleva lvm allika. See tekib automaatselt seejärel kõigisse nodedesse.

NB! LVM ketast luues tasub märkida "Shared" linnuke, et oleks võimalik virtuaalmasinatele online migration-it teha.

Ketastel ei pea olema sama nimi, proxmox leiab nad üles lvm nime järgi milleks nt "ketas" või "suurketas" või mida iganes, reaalselt võib nt olla nii, et /dev/sdb on ühes nodes füüsiline ketas ja lvm on reaalselt /dev/sdh, see ei muuda midagi.

Selleks, et LVMi peal mõnda tekitatud viilakat suurendada

# lvextend -Ay -r -L +50G /dev/system/pve

Antud käsk lisab 50GB lisaruumi pve partitsioonile.

Eksisteerib ka võimalus haakida iSCSI LUNid proxmoxi haldusest külge ja jagada otse virtuaalmasinatele edasi aga see on proxmoxi arendajate poolt mitte soovitatav kui ebakindel lahendus.

iSCSI kasutamine

iSCSI kasutamiseks tuleb installida pakett open-iscsi

# apt-get install open-iscsi

Ja seejärel tuleb mõned teenused käivitada-taaskäivitada

# /etc/init.d/open-iscsi start
# /etc/init.d/pvedaemon restart

Iscsi targeteid saab edaspidi külge haakida juba otse veebiliidesest.

Kui iSCSI server mingil põhjusel enam ei suhtle siis veebiliidese kaudu iscsi kettaid lahti haakida pole võimalik. Sellisel juhul tuleb logida käsureale ja kustutada need manuaalselt failist /etc/pve/storage.cfg

Masina initatori nime näeb failist /etc/iscsi/initiatorname.iscsi

NB! LVMi ja iSCSi puhul ei tööta PVE linked clone funktsionaalsus!

Ceph

Esiteks tuleb tunnistada, et hetkeseisuga on proxmoxil pakutav vaikeceph väga vana, ehk versioon 0.80 kui olemas juba 10.2.2 seega on mõistlik panna uuem ja rohkemate võimaluste-parandustega.

echo deb https://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
apt-get update
apt-get install -y ceph 
ceph -v
ceph version 10.2.3 (ecc23778eb545d8dd55e2e4735b53cc93f92e65b)

Virtuaalmasinate haldus & kasutamine

Virtuaalmasinate tekitamine

Virtuaalmasina loomisel tasub tähele panna järgnevat:

  • VM ID tuleb automaatselt
  • Nimi pane arusaadav ja eristatav."
  • CPU type jäta kindlasti kvm64 (default) muidu erinevate protsessoridega nodede puhul kaob ära migreerimise võimekus.
  • Mälu kasuta ka fikseeritud suuruses
  • Kui virtuaalmasinas (KVM) kasutatav operatsioonisüsteem seda toetab siis tasub kasutada võimalikult palju virtio seamdmeid (võrk, ketas), nendepoolt tekitatud väiksema overheadi tõttu sest siis pole vaja virtuaalserveril emuleerida mingit konkreetset rauda.

Virtuaalmasinate seadistusfailid asuvad kaustas

Seadistusfailid asuvad kaustas /etc/pve/qemu-server/

Näiteks virtuaalmasina 101 konf asub failis /etc/pve/qemu-server/101.conf ja näeb välja järgnev:

name: testikas
bootdisk: ide0
vlan1: rtl8139=42:D5:BD:2C:EC:79
ostype: other
memory: 2024
sockets: 1
ide0: disk1:0.0.0.scsi-14945540000000000ebaf87d4e8aadc8f7c7cbd9b9b75a514

Ketta lisamisel on võimalik lülitada sisse io threads? milleks see on hea? netist sai leidud näide

io=native (vaikimisi) on sobilik blokkseadmetel asetsevatele VMidele, näiteks LVMil asuvatele.
io=threads tasub sisse lülitada failisüsteemis asuvatel suurel failidel asuvatel VMidel

VMiga USB seadme ühendamine

Olgu kohe alguses öeldud, et VM-ile USB andmine kaotab igasuguse võimaluse VMi migreerida. Ka stopped olekus. Lisaks ei ole GUI kaudu võimalik näha, kas VMi küljes on mõni USB seade või mitte. Seda näeb vaid konfi kaudu käsurealt.

Suska füüsiline USB sisse ja anna nodes käsk lsusb -t. Vastus võiks olla midagi sellist:

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
        |__ Port 5: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
*            |__ Port 2: Dev 4, If 0, Class=stor., Driver=usb-storage, 480M*
            |__ Port 3: Dev 5, If 0, Class=HID, Driver=usbhid, 1.5M
            |__ Port 3: Dev 5, If 1, Class=HID, Driver=usbhid, 1.5M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M

Siit tuleb nüüd taga ajada õige seade: Bus 02:Port1:Port 5:Port2

Konfi võiks kirjutada midagi sellist

usb0: host=2-1.5.2

Masinale stop/start ja küljes see peakski olema.

Töötavale VMile usb ühendamine

Kui soov juba töötavale VMile külge anda USB, siis tuleks logida sisse sinna hosti, kus see VM on (ja USB ka). Seejärel kirjuta:

qm monitor VMID 

ja käsk on ikka ülemise näite jaoks

device_add usb-host,id=malupulk,hostbus=2,hostport=1.5.2

See peaks külge andma töötavale VMile USBi. Linuxiga proovisin, töötab. Küll aga muudatus ei säili pärast rebooti. Seega - soe soovitus on panna konfi ja teha masinale stop/start - siis on kindel, et vastav seade alati küljes on.

Nimi on vajalik selleks, et seda pärast küljest ära võtta. Ilma nimeta mina muud varianti ei leidnud kui reboot.

Ära võtmiseks:

qm monitor 254 ja siis device_del malupulk

Migreermine kohalike USB seadmetega

qm migrate vmid target [OPTIONS]

Tuleb anda masinas, kus konkreetne VM on. Näiteks midagi sellist:

qm migrate 254 node5 -force -online

Virtuaalmasina ketta suurendamine

Kui ketast vaja suurendada, siis kõigepealt võta GUI kaudu: Hardware -> HDD ja ülevalt menüüst resize. Increment küsib GB suurust, kui mitu suurendatakse (mitte lõppsuurust)! Suurendad ära, siis kustuta fdiskiga olemasolev partisioon, loo uus täisulatuses ning kirjuta muudatused kettale.

Leidsin ka ühe lohutuse:

> I know 'delete the partition' sounds scary, but it doesn't change the data at all. It just changes the thing that references the container. As long as you DON'T mkfs.ext4 you should be fine.

Seejärel tee:

e2fsck -f /dev/vda1

ja siis:

resize2fs /dev/vda1

Ja tulemuseks on suurenenud partitsioon ja failisüsteem.

VMide suures koguses ümbernimetamine

Probleem: Vaja on kokku ühendada kaks clustrit aga seal olevat virtuaalmasinad omavad samu ID numbreid. Käsitsi nimetamine on üsnagi tülikas sest VMi ID järgi on genereeritud ka LVMi viilaka nimi. Appi tuleb skript: vmrenumber.sh

NB! KVM masinad mida liigutatakse tuleb eelnevalt peatada, muidu tekib kõrvale uus uue IDga KVMi protsess ja failisüsteem võib saada kahjustatud.

#!/bin/bash

if [ ! -e /tmp/renumber ]; then
  echo "no renumbering file"
  exit 1
fi

for i in `cat /tmp/renumber`; do
  old=$i
  new=$(($i+45))
  if [ -e /etc/pve/qemu-server/${new}.conf ]; then
    echo "${new}.conf exists, exiting"
    exit 1
  fi
  if lvs --noheadings -o vg_name,lv_name | grep -q "vm-${new}-disk"; then
    echo "vm-${new}-disk exists, exiting"
    exit 1
  fi

  cp /etc/pve/qemu-server/${old}.conf /etc/pve/qemu-server/${new}.conf
  mv /etc/pve/qemu-server/${old}.conf /etc/pve/qemu-server/${old}.bak
  sed -i "s/\(vm\)\-${old}\-/\1\-${new}\-/" /etc/pve/qemu-server/${new}.conf
  for x in `lvs --noheadings -o vg_name,lv_name --separator "/" | grep "vm-${old}-disk"`; do
    lvchange --deltag pve-vm-$old $x
    lvchange --addtag pve-vm-$new $x
    lvrename $x `echo $x | sed "s/$old/$new/"`
  done
done

Skript loeb numbrid failist /tmp/renumber ja paneb igaühele uueks numbriks +15 (vt. rida 10),mille peab siis kohendama vastavalt kohandama endale. Skript peaks olema piisavalt turvaline selles suhtes, et midagi jäädavalt katki ei keera, vana vm-i konfifail jääb ka alles. Ainuke häda, mis esines oli lvrenamega, mis osadel juhtudel jättis vana symlingi ripakile vms.

Kui seda skripti panna tööle, siis peaksid olema kõik masinad ühe node peal, sest et muidu ei kuvata seal teistes nodedes olevaid ID-sid.

# sh vmrenumber.sh
sed: preserving permissions for `/etc/pve/qemu-server/sed5XL0va': Function not implemented
  Logical volume "vm-100-disk-1" changed
  Logical volume "vm-100-disk-1" changed
  Renamed "vm-100-disk-1" to "vm-145-disk-1" in volume group "virtuaalid"
  Logical volume "vm-100-disk-2" changed
  Logical volume "vm-100-disk-2" changed
  Renamed "vm-100-disk-2" to "vm-145-disk-2" in volume group "virtuaalid"

Virtuaalmasinate migreerimine

KVM kasutab virtuaalmasinate "elusaks migreerimiseks" ehk live-migrationiks pre-copy mehanismi. Täpsemalt toimuvad pre-copy mehanismi rakendumisel järgmised etapid.

  • 1. Warm-up faas, proxmox üritab kopeerida kõik mälulehed (pages) algkohast-sihtkohta, ajal mil virtuaalmasin endiselt töötab.
  • 2. Kui algpunktis asuvas virtuaalmasina mälus toimub mingi muutus, märgitakse vastav mäluleht räpaseks ehk dirty. Kui esimene kopeerimine

on lõppenud, kopeeritakse kõik räpaseks märgitud lehed uuesti. Seda protsessi korratakse vajadusel kuni uuesti kopeeritud mälulehtede kogus on suurem kui algvirtuaali jäänud räpaste mälulehtede oma, et olla kindel, et ainult väga ebaolulised muudatused on jäänud sünkroniseerimata.

  • 3. Kui räpaste lehtede kogus on väiksem kui uuesti kopeeritud lehtede oma lõpetatakse warm-up faaas ja algab stop-and-copy faas. Selle käigus

originaalne virtuaalmasin peatatakse ja allesjäänud räpased lehed kopeeritakse uude sihtpunkti. Virtuaalmasina maasolek võib sellekäigus kestan millisekunditest kuni mõne sekundini.

  • 4. Kui kõik räpased mälulehed on kopeeritud jätkab kvm virtuaalmasina tööd.

Kui on vaja migreerida virtuaalmasina poolt kasutatav ketas või kettad ühelt storagelt teisele võib kasutada move storage nuppu. Aga seda saab teha ka käsurea vahenditega ja massiliselt. Järgnev skiprit tõstab kõik virtuaalmasina kettad vanalt storagelt uuele nimega ketas2

while read inputline
do
 ketas=$(echo $inputline | grep voluum | awk '{print $1}' | awk -F":" '{print $1}')
            if [ -n "$ketas" ]; then
                 qm move_disk $1 $ketas storage2
            fi
done < $1.conf
exit 0

Kasutamine

./liiguta <vm_id>

Upgrade 3.x versioonilt 4-le

# Upgrade to latest clean PVE version
apt-get update && apt-get dist-upgrade

# Remove node from cluster
pvecm delnode NODE_NAME

# Remove PVE
apt-get remove proxmox-ve-2.6.32 pve-manager corosync-pve openais-pve redhat-cluster-pve pve-cluster pve-firmware

# Remove backports
sed -i '/backports/d' /etc/apt/sources.list

# Add pve no-sub repo
echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" >> /etc/apt/sources.list 

# Update distribution in sources and update
sed -i 's/wheezy/jessie/g' /etc/apt/sources.list
sed -i 's/wheezy/jessie/g' /etc/apt/sources.list.d/pve-enterprise.list
apt-get update

# Find and install latest kernel version and firmware package
apt-cache search pve-kernel | sort
apt-get install pve-kernel-4.4.18-1-pve pve-firmware 
 
# Find and install latest kernel headers, matching to the installed pve-kernel
apt-cache search pve-headers | sort
apt-get install pve-headers-4.4.18-1-pve

# Upgrade base system and reboot
apt-get upgrade
apt-get dist-upgrade
shutdown -r now

# Install PVE
apt-get install proxmox-ve

LDAP autentimine

tekitada fail /etc/pve/domains.cfg :

ldap: ZOO
	comment zoo
	server1 192.168.0.2
	user_attr uid
	base_dn CN=kasutajad,DC=sise,DC=zoo,DC=ee
	secure
	server2 192.168.0.3
	default
	bind_dn CN=Proxmox EENet,CN=kasutajad,DC=sise,DC=zoo,DC=ee

pve: pve
	comment Proxmox VE authentication server

pam: pam
	comment Linux PAM standard authentication

Tekitada fail /etc/pve/priv/ldap/ZOO.pw . Faili sisuks peab olema lihtsalt bindi parool.

Veebibrauseris oleva tiitli muutmine

By default on Proxmoxil tiitlis "$nodename - Proxmox Virtual Environment". Seda saab muuta failist: /usr/share/perl5/PVE/ExtJSIndex.pm, kus <title> tagi vahele tuleb soovitud string kirjutada. Kui kasutusel on proksimislahendus (nt HAProxy), siis tuleb seda teha kõikides nodedes.

Fail on 4.4.84 ja suuremast proxmox-ve parkiversioonist: /usr/share/pve-manager/index.html.tpl

Probleemid

Virtuaalmasinate taastamine ilma HA olemasoluta

Kui clustris pole HA seadistatud ja üks clustri õlgadest peaks riknema siis kuidas startida töötavas masinas üles virtuaalmasinad, mis asusid katki läinud serveril?

/etc/pve/nodes kaust on sünkroniseeritud pmxcfs abil ning sisaldab igas clustri masinas kõigi nodede virtuaalide konfiguratsioone. Näiteks clustris, kus on kolm node ja kolm virtuaalserverid näeb selle kausta struktuur välja selline

/etc/pve/nodes/node1/qemu-server
100.conf
/etc/pve/nodes/node2/qemu-server
101.conf
/etc/pve/nodes/node3/qemu-server
102.conf

Kui node1 on seiskunud saab startida vm-100 virtuaalmasina suvalisel teisel srveri logides ühte allesjäänud õlga ja liigutades konfiguratsiooni töötava serveri kausta. Näiteks node2 peale

# mv /etc/pve/nodes/node1/qemu-server/100.conf /etc/pve/nodes/node2/qemu-server/100.conf. 

Peale seda on võimalik startida vm-100 juba läbi veebiliidese. Või siis käsurealt

# qm start 100

Clustri parandus

Kui clustrisse on jäänud liiga vähe nodesid alles siis võib pve kaust minna read-only, selle vastu saab öelda mis on minimaalne töötava clustri nodede arv

pvecm expected 2

Masina klastrist jõuga eemaldamine

Stop service

systemctl stop pvestatd.service
systemctl stop pvedaemon.service
systemctl stop pve-cluster.service
systemctl stop corosync
systemctl stop pve-cluster

Edit through sqlite, check, delete, verify

$ sqlite3 /var/lib/pve-cluster/config.db
sqlite> select * from tree where name = 'corosync.conf';
254327|0|254329|0|1480944811|8|corosync.conf|totem {
version: 2
[...]
sqlite> delete from tree where name = 'corosync.conf';
sqlite> select * from tree where name = 'corosync.conf';
sqlite> .quit

Remove directories

pmxcfs -l
rm /etc/pve/corosync.conf
rm /etc/corosync/*
rm /var/lib/corosync/*
rm -rf /etc/pve/nodes/*

Ja tasuks muidugi nodedest eemaldada ka /etc/pve/priv/authorized_keys

Kunagise klastrinode uude süsteemi lisamisel

Kui süsteem ütleb

authentication key already exists

Siis tuleks anda lisamisel -force võti

pvecm add loomaaed -force

ja võimalik, et vaja on ka

pvecm updatecerts

Corosynci muutmise tagajärjel tekkinud N-pealisus

Corosynci konfiguratsiooni võib olla aeg-ajalt vaja muuta. Näiteks, et vahetada ära corosynci võrk vmt.

Kindlasti on vaja suurendada config_version numbrit.

Kui corosync käib, siis kopeerib ta oma konfiguratsiooni /etc/pve/corosync kaustast, seega mõttekas on seda seal muuta, sest et siis saavad selle endale kõik noded korraga.

Kui aga mingil juhul tekib olukord, kus corosync konfiguratsiooni muutmise tagajärjel on tekkinud N-pealine lohe (klaster), siis peaks saama allolevate käskudega selle korda

systemctl stop corosync
systemctl stop pve-cluster
pmxcfs -l
sed -i 's/config_version:.*$/config_version: 40/' /etc/corosync/corosync.conf
cp /etc/corosync/corosync.conf /etc/pve/
umount /etc/pve
service corosync restart
service pve-cluster restart
service pvedaemon restart
service pveproxy restart

Uuendamisel teenused ei käivitu

Võib juhtuda, et nad on mingil moel sattunud maskitud teenuste alla ja seetõttu uuendamine feilib ja teenused ei käivitu.

Vaata /etc/systemd/system kausta - kas seal on proxmoxiga seotud asjad suunatud /dev/nulli või ei ole. Kui on, siis on **maskitud** - siis pead nad unmaskima. Seejärel käivita uuendus uuesti. :)

 systemctl unmask teenus

Node MTU on muutunud

OpenvSwitchi korral on aeg-ajalt juhtunud, et mingil seletamatul põhjusel muutuvad node võrgu MTUd paigast ära.

for i in $(ovs-vsctl list ports vmbr0);do ip link set mtu 9000 dev $i;done

või siis parandamiseks ühekaupa:

ovs-vsctl set int vmbr0 mtu_request=9000

Lingid

https://documentation.online.net/en/dedicated-server/tutorials/network/rpn-proxmox-openvswitch kahe erinevas lokatsioonis asuva proxmoxi openvswitchi abil kokku tunneldamine.