IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Web: http://www.proxmox.com/
Desenvolupadors: [| developers]
Tipus: Virtualització server
Sistema operatiu: Unix-like i Microsoft Windows
Creadors:


NOTA: Proxmox no és només el nom d'un entorn de virtualització, consulteu la web http://www.proxmox.com/. De fet pròpiament a l'entorn de virtualització se l'anomena Proxmox Virtual Environment. Proxmox té altres productes com proxmox-mail-gateway però aquest article només fa referència a l'entorn de virtualització

És un entorn de virtualització enfocat a entorns empresarials (servidors). És gratuït i de codi lliure amb llicència GPLv2 . Està desenvolupat i mantingut per Proxmox Server Solutions GmbH una empresa alemanya que ofereix subscripcions de pagament a plans de suport.

És un sistema operatiu complert amb un conjunt d'utilitats per a gestionar els sistemes virtualitzats. El sistema amfitrió està basat amb Debian i utilitza un nucli optimitzat per a la virtualització. La gestió es pot fer localment des de la consola d'ordres o de forma remota per mitjà d'un entorn web o per consola d'ordres amb SSH.

Contingut

Introducció a Proxmox. Característiques i funcionalitats

Principals característiques de Proxmox

  • Entorn de gestió web que proporciona totes les avantatges de treballar amb una aplicació web (multiplataforma, ubiquitat, etc.). L'entorn web de la versió 2.0 està basat en el Framework JavaScript (Ext JS 4) i té múltiples avantatges i funcionalitats avançades.
  • Suporta KVM i OpenVZ. Virtualització complerta i amb contenidors.
  • Instal·lació senzilla.
  • Gestió de còpies de seguretat dels sistemes hoste des de l'entorn web. Es poden programar les còpies de seguretat.
  • Clustering. Es poden gestionar múltiples servidors Proxmox des de una sola interfície de gestió web centralitzada. Consulteu Cluster . El cluster pot ser un cluster en Alta disponibilitat. Consulteu Cluster en Alta disponibilitat
  • Possibilitat de migració i còpies de seguretat en calent. Consulteu Migració en calent i Backup en calent
  • Existeixen Plantilles OpenVZ amb aplicacions virtuals.
  • Disposa d'una API de programació web RESTful. S'utilitza el model REST i el format de dades primari és JSON (tota la API està definida formalment utilitzant un Schema JSON. Això facilita la integració de sistemes de tercers i la creació d'entorns de virtualització a mida.

Recursos:

Comparació amb altres sistemes

Podeu trobar una taula a:

http://www.proxmox.com/products/proxmox-ve/comparison

Tecnologies de Virtualització

Proxmox suporta les següents tecnologies de virtualització

  • Virtualització amb contenidors OpenVZ: virtualització a nivell de sistema operatiu.
  • Virtualització KVM: virtualització complerta.

KVM

Vegeu també KVM

Kernel-based Virtual Machine o Màquina Virtual basada amb el nucli és una solució de virtualització completa, de programari lliure, per a Linux. Està formada per un mòdul per al nucli kvm.ko com a hipervisor i una versió modificada de Qemu per a virtualitzar el maquinari. El component KVM per al nucli està inclosa de sèrie en Linux des de la versió 2.6.20.

El fet de que el suport a KVM estigui integrat en les versions oficials del nucli Linux i a més també és el sistema de virtualització preferit per distribucions com ara Ubuntu o RedHat, fan que KVM sigui una tecnologia a considerar a curt i mitjà termini per fer virtualització nativa amb Linux.

Permet virtualitzar qualsevol tipus de sistema operatiu com Linux, FreeBSD, Windows...

OpenVZ

Consulteu openVZ.

Video Tutorials

Requeriments

Requeriments Hardware

Recomanat per a un sistema en explotació:

Mínima per a testejar:

  • CPU: 64bit (Intel EMT64 o AMD64)
  • Intel VT/AMD-V capable CPU/Mainboard (for KVM Full Virtualization support)
  • 1 GB RAM
  • Disc Dur
  • Una targeta de xarxa

Es pot instal·lar Proxmox a sistemes Virtuals com Virtual Box però no funcionarà KVM. Els contenidors OpenVZ funcionen correctament.

Recursos

System Requeriments

System Requeriments a la wiki de Proxmox

Requeriments de KVM

Per utilitzar màquines Virtuals KVM cal complir amb els requeriments de KVM. Consulteu Requeriments de KVM

(Veure kvm-ok)

Instal·lació

Es possible fer dos tipus d'instal·lacions:

  • Bare Metal utilitzant una imatge ISO: A la web de Proxmox es pot obtenir una imatge ISO que permet instal·lar Proxmox des de CD de la mateixa forma que s'instal·laria uns distribució Linux com Ubuntu o Debian. De fet Proxmox està basat en Debian. Auqesta és la opció recomanada.
  • Instal·lació com a paquet Debian: també existeix la possibilitat de modificar una distribució Debian existent per instal·ar Proxmox.

Es pot obtenir més informació sobre les descarregues possibles a:

http://pve.proxmox.com/wiki/Downloads

Recursos:


Instal·lació de Proxmox 2.0

En aquest apartat us mostrem l'insta·lació pas a pas de la versió 2.0 de Proxmox:

Instalacio proxmox2-0 02.png

  • L'enllaç ens portarà a la següent web:

Instalacio proxmox2-0 03.png

  • Una vegada descarregat comprovarem el md5 de la ISO descarregada amb la següent comanda:
md5sum proxmox-ve_2.0-ff6cd700-24.iso
  • El resulta a de ser igual al md5 que posa a la web:

Instalacio proxmox2-0 04.png

  • Quan engeguem l'ordinador ens sortirà la següent finestra en la qual polsarem "Enter" per començar l'instal·lació.

Instalacio proxmox2-0 01.png


Proxmox 1.x

Captures de l'instal·lació

  • En aquesta primera pantalla ens demana acceptar la llicencia d'us de proxmox. L'acceptem i continuem.
Borjamedina proxmox01.png
  • En aquesta pantalla ens detecta el disc i la seva mida, també algunes consideracions a nivell de hardware
Borjamedina proxmox02.png
  • Aquí ens demana, la zona del nostre horari, el nostre territori i el tipus de teclat.
Borjamedina proxmox03.png
  • En aquesta pantalla introduïm el nostre password de superusuari per dos vegades i el correu de l'administrador del sistema.
Borjamedina proxmox04.png
  • Aquí la configuració de la xarxa i el domini al qual el volem associar.
Borjamedina proxmox05.png
  • Aquí ja esta instal·lant:
Borjamedina proxmox06.png
  • Ja acabat l'instal·lació, fem un restart
Borjamedina proxmox07.png
  • Ara per identificar-nos hem de ficar l'usuari root i la paraula de pas que hem ficat durant l'instal·lació.
Borjamedina proxmox08.png


Limitar la mida de la instal·lació del sistema base

La instal·lació per defecte ocupa tot el disc dur. Es pot passar una opció del kernel per limitar la mida de la instal·lació:

boot: linux maxroot=20 swapsize=4

NOTA: Tot i ocupar tot el disc dur, la partició es crea amb LVM i per tant es pot redimensionar la partició

Tasques habituals postinstal·lació

NOTA: Aquestes tasques estan escrites a gust de l'autor de l'article però poden ser útils per a altres usuaris. En tot cas no són imprescindibles per al correcte funcionament de Proxmox.

# apt-get update && apt-get --yes dist-upgrade 
# apt-get install molly-guard joe traceroute ipcalc whois byobu vim tcpdump nmap dnstracer ethtool subversion
# reboot

Una qüestió important (o més aviat crítica si es vol crear un cluster) pot ser tenir sincronitzada correctament l'hora del sistema amb NTP.

Instal·lació de sudo

Pot ser una bona pràctica si ha d'haver-hi diversos admins amb accés SSH al servidor Proxmox instal·lar sudo

# apt-get install sudo

Ara per a crear més usuaris cal executar:

# adduser sergi
...
# usermod -a -G sergi,sudo sergi

Accés a Proxmox

Accés Web

Per accedir a Proxmox cal posar la URL:

http://ADREÇA_IP_SERVIDOR_PROXMOX

Us canviarà automàticament a https:

https://ADREÇA_IP_SERVIDOR_PROXMOX:8006

IMPORTANT: El certificat SSL és autosignat i per tant haureu de posar excepcions i/o ignorar els errors que us donarà el vostre navegador web

Accés per SSH

Per defecte Proxmox instal·la un servidor SSH amb la configuració per defecte. Podeu accedir doncs via SSH amb:

$ ssh root@ADRECA_IP_PROXMOX

NOTA: Pot ser interessant instal·lar molly-guard per evitar apagar per error el servidor des de una sessió remota SSH

Eines

Gestor web

TODO

Proxmox VE is simple to use. There is no need to install a separate management tool or any additional management node with huge databases.

No SPOF

If you operate already a cluster you can connect to ANY node to manage the whole cluster. There is no single master any more.

Based on the leading JavaScript Framework (Ext JS 4), the central Web-based management empowers the admin to control all functionalities.

   Fast search-driven interface, capable of handling thousands of VM´s
   Secure VNC console, supporting SSL
   Wizard based creation of virtual servers and containers
   Seamless integration and management of Proxmox VE 2.0 Cluster
   Support subscription management
   Role based permission management for all objects (VM´s and CT´s, storages, etc.)
   Support for multiple authentication sources (e.g. local, MS ADS, LDAP, ...)
   AJAX technologies for dynamic updates of resources
   Based on Ext JS 4.x JavaScript framework.

Cluster-wide Task and Cluster logs

The GUI shows all running tasks from the whole cluster but also the history and the syslog of each node.

This includes running backup or restore jobs, live-migration or HA triggered activities

Consola

Serveix per interactuar amb les màquines virtuals com si fossin una màquina física utilitzant el teclat i el ratolí. Utilitza una connexió VNC que emula un terminal VT100.

  • Servidor: arranca un proces de vncterm. No és un vnc estandard, l'ha desenvolupat Proxmox. Emula un terminal VT100 que pot ser visualitzat remotament amb vncviewer i que no requereix que estigui X11 instal·lat.
  • Utilitza els ports tcp del 5900 al 6000.
  • Client: Al navegador carrega un applet Java que fa de visor vnc.

Visor Extern

A més del applet Java que incopora Proxmox, és pot utilitzar qualsevol client VNC.

Només per maquines KVM.

Connexió d'un sol ús
nc -l -p 5900 -c "qm vncproxy VMID PASSWORD"
Connexió permanent
echo “5900 stream tcp nowait root /usr/sbin/qm qm vncproxy 101 contrasenya” >> /etc/inetd.conf
/etc/init.d/openbsd-inetd restart
  • 5900: és el port.
  • '101: el id de màquina virtual.
  • contrasenya: és la paraula de pas del VNC. No te res a veure amb la del sistema hoste ni amfitrió.

Monitor

Permet visualitzar i modificar diversos paràmetres de les maquines virtuals. També permet interactuar amb elles. Completa les funcionalitats de la Consola.

Sendkey

Permet enviar combinacions de tecles que normalment captura el sistema operatiu sobre el qual s'executa la consola, com ara alt+f2 o crtl+alt+sup

sendkey alt-f2

Configuració

/etc/pve

Aquesta és la carpeta principal de configuració de Proxmox. Cal tenir en compte que és una carpeta que no es troba físicament en el disc dur. S'utilitza fuse com a sistema de fitxers. A més es tracta d'un sistema de fitxers distribuït que utilitza Proxmox Cluster file system (aka pmxcfs), de forma que en cas de treballar amb Cluster, tots els nodes de Proxmox tenen el mateix contingut de forma automàtica i sincronitzada a la carpeta [/etc/pve]

IMPORTANT: Compte! Cal tenir en compte que hi ha fitxers ocults a la carpeta:

# ls -la
total 9
drwxr-x---  2 root www-data    0 Jan  1  1970 .
drwxr-xr-x 84 root root     4096 May 24 18:10 ..
-rw-r-----  1 root www-data    0 May 24 18:16 a
-rw-r-----  1 root www-data  451 May  3 14:37 authkey.pub
-rw-r-----  1 root www-data  289 May 24 16:30 cluster.conf
-rw-r-----  1 root www-data  338 May 24 16:30 cluster.conf.old
-r--r-----  1 root www-data 2755 Jan  1  1970 .clusterlog
-rw-r-----  1 root www-data   13 May  3 14:35 datacenter.cfg
-rw-r-----  1 root www-data    2 Jan  1  1970 .debug
lrwxr-x---  1 root www-data    0 Jan  1  1970 local -> nodes/virt03
-r--r-----  1 root www-data  255 Jan  1  1970 .members
-rw-r-----  1 root www-data  255 Jan  1  1970 .members~
drwxr-x---  2 root www-data    0 May  3 14:37 nodes
lrwxr-x---  1 root www-data    0 Jan  1  1970 openvz -> nodes/virt03/openvz
drwx------  2 root www-data    0 May  3 14:37 priv
-rw-r-----  1 root www-data 1533 May  3 14:37 pve-root-ca.pem
-rw-r-----  1 root www-data 1679 May  3 14:37 pve-www.key
lrwxr-x---  1 root www-data    0 Jan  1  1970 qemu-server -> nodes/virt03/qemu-server
-r--r-----  1 root www-data 1347 Jan  1  1970 .rrd
-rw-r-----  1 root www-data  333 May  5 14:20 user.cfg
-r--r-----  1 root www-data  282 Jan  1  1970 .version
-r--r-----  1 root www-data  559 Jan  1  1970 .vmlist
-rw-r-----  1 root www-data  119 May  3 14:37 vzdump.cron

Recursos:

Fitxers principals

/etc/pve/cluster.conf

cluster.conf => corosync/cman cluster configuration file

/etc/pve/storage.cfg

Al fitxer /etc/pve/storage.cfg es guarda la configuració dels Proxmox Storages. Consulteu l'apartat:

Proxmox#Storage
storage.cfg   => PVE storage configuration
/etc/pve/user.cfg

Al fitxer /etc/pve/user.cfg es guarda la configuració dels usuaris de Proxmox. Consulteu l'apartat:

Proxmox#Gesti.C3.B3_d.27usuaris
user.cfg      => PVE access control configuration (users/groups/...)
/etc/pve/domains.cfg

Al fitxer /etc/pve/domains.cfg es guarda la configuració dels reialmes d'autenticació. Consulteu:

Proxmox#Sistemes_d.27autenticaci.C3.B3_.28Authentication_Realms.29
domains.cfg   => PVE Authentication domains
/etc/pve/authkey.pub

El fitxer /etc/pve/authkey.pub conté la:

authkey.pub   => Clau pública (public key) utilitzada per sistema de tiquets.
Carpeta /etc/pve/priv

La carpeta /etc/pve/priv té continguts privats i només és accessible per a l'usuari root:

/etc/pvepriv/shadow.cfg  => shadow password file
/etc/pve/priv/authkey.key => private key used by ticket system
Carpeta /etc/pve/nodes

A la carpeta /etc/pve/nodes es troba la configuració específica de cada node:

/etc/pve/nodes/${NAME}/pve-ssl.pem                 => public ssl key fo apache
/etc/pve/nodes/${NAME}/priv/pve-ssl.key            => private ssl key
/etc/pve/nodes/${NAME}/qemu-server/${VMID}.conf    => VM configuration data for KVM VMs
/etc/pve/nodes/${NAME}/openvz/${VMID}.conf         => VM configuratin data for OpenVZ containers

Enllaços simbòlics

/etc/pve/local => nodes/${LOCALNAME}
/etc/pve/qemu-server => nodes/${LOCALNAME}/qemu-server/
/etc/pve/openvz => nodes/${LOCALNAME}/openvz/


Fitxers especials d'estat per a depurar (JSON)

/etc/pve/.version    => file versions (to detect file modifications)
/etc/pve/.members    => Info about cluster members
/etc/pve/.vmlist     => List of all VMs
/etc/pve/.clusterlog => Cluster log (last 50 entries)
/etc/pve/.rrd        => RRD data (most recent entries)

Vegeu també JSON. pEr activar/desactivar la depuració:

# enable verbose syslog messages
echo "1" > /etc/pve/.debug

# disable verbose syslog messages
echo "0" >/etc/pve/.debug

Pràctica

Software Raid

No esta suportat oficialment. La millor opció, si es vol utilitzar, es instal·lar una Debian i després instal·lar Proxmox VE des de el seu repositori.

Plantilles OpenVZ

Imatges ISO

Crear MV KVM

Formats d'imatges

  • qcow2
  • raw: no suporta expansió dinàmica.
  • vmdk

Crear MV OpenVZ

Gestió d'usuaris

La versió de Proxmox 2.0 permet l'administració de Proxmox basada en roles i es pot controlar l'accés a recursos de forma granular.

Els rols possibles són:

  • Administrator: Té tots els privilegis
  • NoAccess: sense cap privilegi (s'utilitza per a prohibir l'accés)
  • PVEAdmin: pot fer la majora de tasques, però no té els privilegis per modificar la configuració del sistema
  • PVEAuditor: accés de només lectura

Permisos:

Són els que permeten controlar la forma en que s'accedeix als objectes. Està formats per tres parts:

path, user, role 

és molt similar a una ACL. Cada permís especifica un subect (usuari o grup) i un rol ( conjunt de privilegis) per a un path específic.

Per línia de comandes:

pveum

Recursos:

Sistemes d'autenticació (Authentication Realms)

Es poden utilitzar múltiples sistemes d'autenticació (Authentication Realms)

Proxmox VE guardar tots els atributs dels usuaris al fitxer /etc/pve/user.cfg. Cada usuari ha de tenir una entrada a aquest fitxer menys la paraula de pas que es troba a cada sistema d'aunteticació (local Linux o Linux PAM, Ldap, etc)

Afegir un usuari Linux PAM

Primer cal crear l'usuari amb adduser:

$ sudo adduser sergi

Configureu els grups:

$ sudo usermod -a -G sergi,sudo sergi

I afegiu l'usuari a la interfície gràfica de Proxmox.

NOTA: Si esteu a un cluster caldrà crear l'usuari a cada node

pveum

Crear un grup d'administradors

One of the most wanted features was the ability to define a group of users with full administartor rights (without using the root account).

Define the group:

# pveum groupadd admin -comment "System Administrators"

Then add the permission:

# pveum aclmod / -group admin -role Administrator

You can finally add users to the new 'admin' group:

# pveum usermod testuser@pve -group admin

Crear un grup d'auditors

You can give read only access to users by assigning the 'PVEAuditor' role to users or groups.

Example1: Allow user 'joe@pve' to see everything

# pveum aclmod / -user joe@pve -role PVEAuditor

Example1: Allow user 'joe@pve' to see all virtual machines

# pveum aclmod /vms -user joe@pve -role PVEAuditor

Delegar la gestió d'usuaris

If you want to delegate user managenent to user 'joe@pve' you can do that with:

# pveum aclmod /access -user joe@pve -role PVEUserAdmin

User 'joe@pve' can now add and remove users, change passwords and other user attributes. This is a very powerful role, and you most likely want to limit that to selected realms and groups. The following example allows 'joe@pve' to modify users within realm 'pve' if they are members of group 'customers':

# pveum aclmod /access/realm/pve -user joe@pve -role PVEUserAdmin
# pveum aclmod /access/groups/customers -user joe@pve -role PVEUserAdmin

Note: The user is able to add other users, but only if they are members of group 'customers' and within realm 'pve'.

Fitxers

/etc/pve/user.cfg

Un usuari Proxmox té dos parts:

<userid>@<realm>

Al fer el Login per la interfície web es pot escollir el reialme d'autenticació.

Exemple:

$ sudo cat /etc/pve/user.cfg
user:tobe@pam:1:0:Alberto:Cortina:alberto@ejemplo.com::
user:javier@pam:1:0:Javier:Escapante:javier@ejemplo.com::
user:sergio@pam:1:0:Sergio:Tork Farden:farden@ejemplo.com::
user:root@pam:1:0:::farden@ejemplo.com::

group:admin:tobe@pam,javier@pam,sergio@pam:Administradors del sistema: 


acl:1:/:@admin:Administrator:

Com podeu veure es guarda la següent informació:

   first name
   last name
   email address
   expiration date
   flag to enable/disable account
   comment

Storage

Reduir volums LVM

local

El storage per defecte que es genera s'anomena local i es troba físicament a la carpeta:

/var/lib/vz

Cal tenir en compte però que està dins d'un LV de LVM:

$ mount | grep data
/dev/mapper/pve-data on /var/lib/vz type ext3 (rw)

NOTA: Al crear storage locals es poden crear en particions normals, en diferents sistemes de fitxers ([[ext3], [ext4]], etc...), en LVM muntats, etc...

Configuració de LVM per defecte a Proxmox

Proxmox no permet fer la gestió de LVM per la web, cal utilitzar la línia de comandes per als primers passos utilitzant les ordres de LVM: lvdisplay,vgdisplay, pvdisplay, vgcreate, etc.

Cal tenir en compte que Proxmox per defecte ja s'instal·la amb uns volums LVM disponibles:

Volum group lògic de LVM per defecte: pve

Aquest VG té per defecte el nom pve (Proxmox Virtual Environment)

$ sudo vgdisplay
 --- Volume group ---
 VG Name               pve
 System ID             
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  4
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                3
 Open LV               3
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               465,26 GiB
 PE Size               4,00 MiB
 Total PE              119106
 Alloc PE / Size       115012 / 449,27 GiB
 Free  PE / Size       4094 / 15,99 GiB
 VG UUID               kB2Eqb-IZ7o-KkvO-Xwng-Np7B-hcgI-Zooc5I

I dins d'aquest VG hi ha els següents volums lògics LV:

$ sudo lvdisplay
 --- Logical volume ---
 LV Path                /dev/pve/swap
 LV Name                swap
 VG Name                pve
 LV UUID                mgXaS6-qcTD-v4pi-i4ZE-fNgr-YrRJ-Anh1D0
 LV Write Access        read/write
 LV Creation host, time proxmox, 2012-05-03 14:31:47 +0200
 LV Status              available
 # open                 1
 LV Size                4,00 GiB
 Current LE             1024
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:1
  
 --- Logical volume ---
 LV Path                /dev/pve/root
 LV Name                root
 VG Name                pve
 LV UUID                Z8jo0k-po9V-gkhw-p91K-GZ79-0nMw-Rn65Cq
 LV Write Access        read/write
 LV Creation host, time proxmox, 2012-05-03 14:31:48 +0200
 LV Status              available
 # open                 1
 LV Size                96,00 GiB
 Current LE             24576
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:0
  
 --- Logical volume ---
 LV Path                /dev/pve/data
 LV Name                data
 VG Name                pve
 LV UUID                N9ao6A-ly0v-0HYo-Ps5J-OCSc-1vOS-JSR2zf
 LV Write Access        read/write
 LV Creation host, time proxmox, 2012-05-03 14:31:48 +0200
 LV Status              available
 # open                 1
 LV Size                349,27 GiB
 Current LE             89412
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:2

Com podeu veure teniu:

  • /dev/pve/root: Aquest LV conté el sistema operatiu Proxmox en si
  • /dev/pve/swap: Aquest LV conté la swap del sistema. La mida dependrà de les característiques del sistema peròn en molts casos el límit serà 4Gb
  • /dev/pve/data: Aquest LV està dedicat per a l'storage anomenat local (carpeta /var/lib/vz)

Podeu comprovar-ho amb:

$ mount | grep root
/dev/mapper/pve-root on / type ext3 (rw,errors=remount-ro)

$ mount | grep data
/dev/mapper/pve-data on /var/lib/vz type ext3 (rw)


Avantatges:

  • Les màquines virtuals creades dins d'un volum lògic LVM, més tard es poden canviar de mida.

Recursos:

Shared checkbox

What is the function of the Shared checkbox, when adding directory storage?

It uses a central lock manager when create/delete/modify VM images.

ISCSI

Exemples

Servidors projecte OpenFPnet

Consulteu OpenFPnet/Mosaic/Formació/Execució/Instal·lació_de_Proxmox#Configuraci.C3.B3_dels_storages

Afegir un segons disc virtual

virtio:

IMPORTANT: Els discs durs virtio estan accessibles com /dev/vda, /dev/vdb, etc....


  • Per afegir un disc a la màquina virtual anem a:
AfegirunDisc.png
AfegirunDisc1.png
  • JA tenim el nou disc:
AfegirunDisc2.png

Un cop tingueu afegit un segon disc virtual cal formatar-lo:

Primer cal crear la taula de particions i afegir una partició al disc:

$ sudo fdisk /dev/vda
n
p
1
[Enter]
[Enter]
p
w

Ara cal formatar la partició amb un sistema de fitxers. A l'exemple [ext4]]:

$ sudo mkfs.ext4 /dev/vda1

Reserveu 0% de l'espai a l'usuari root ja que és un disc que ha de contenir només dades i no cal reservar res a l'usuari root:

$ sudo tune2fs -m 0 /dev/vda1

Ara ja es pot muntar, a l'exemple estem muntant la partició a /samba:

$ sudo mkdir /samba
$ sudo mount /dev/vda1 /samba

Per fer la partició permanent:

$ sudo joe /etc/fstab

Afegiu al final la línia:

/dev/vda1 /samba ext4 rw 0 3

NOTA: Podeu consultar el fitxer /etc/mtab per saber el format que heu d'utilitzar

Ampliar la mida d'un disc dur secundari

En aquest exemple volem augmentar la mida d¡un disc dur virtual secundari que es troba en una LV de LVM. En el nostre cas volem canviar el disc 2 de la màquina virtual amb ID 141. Per tant el LV és:

$ sudo lvdisplay /dev/vg_vms/vm-141-disk-2
 --- Logical volume ---
 LV Path                /dev/vg_vms/vm-141-disk-2
 LV Name                vm-141-disk-2
 VG Name                vg_vms
 LV UUID                YyflhN-Sbbw-0R6G-UIdk-xSZf-lWQ0-LrU6b1
 LV Write Access        read/write
 LV Creation host, time proxmox01, 2012-08-23 06:47:32 +0200
 LV Status              available
 # open                 0
 LV Size                500.00 GiB
 Current LE             128000
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:11
  

Fem un extent:

$ sudo lvresize -L+250G /dev/vg_vms/vm-141-disk-2
 Extending logical volume vm-141-disk-2 to 750.00 GiB
 Logical volume vm-141-disk-2 successfully resized

Li hem afegit 250G. Actualitzem i comprovem:

$ sudo lvchange --refresh /dev/vg_vms/vm-141-disk-2
$ sudo lvdisplay /dev/vg_vms/vm-141-disk-2


Ara cal ampliar les particions:


TODO:

$ sudo dmsetup info /dev/dm-11
Name:              vg_vms-vm--141--disk--2
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      253, 11
Number of targets: 2
UUID: LVM-vrxlibQG7kdlaFMqjrRGKH0m8nU3W23KYyflhNSbbw0R6GUIdkxSZflWQ0LrU6b1
$ sudo partprobe /dev/dm-11
$ sudo blockdev --rereadpt /dev/dm-11

Sinó

$ sudo apt-get install kpartx 

Resize de PVs:

$ sudo pvresize /dev/sdb
$ sudo pvresize /dev/sdc
  Physical volume "/dev/sdc" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized


Backups

Proxmox proporciona una eina anomenada vzdump que permet crear còpies de seguretat consistents de màquines virtuals OpenVZ o KVM. Aquesta crear un fitxer tar (normalment comprimit) que inclou el disc o discs virtuals de la màquina i també els fitxers de configuració.

Les característiques principals són:

  • L'eina vzdump està integrada amb l'entorn gràfic (aplicació web) però també es pot utilitzar per línia de comandes (CLI).
  • A part de fer còpies també proporciona l'eina de restauració de les còpies (vzrestore i qmrestore).
  • Funciona tant per a OpenVZ com per a KVM. Cal tenir en compte però que hi ha una eina de restauració containers and for KVM VM´s
  • Es poden fer còpies de seguretat en calent utilitzant LVM snapshot
  • Es poden crear múltiples planificacions i programar les còpies de seguretat.
  • Totes les tasques de còpia de seguretat es poden consultar al logs i a “Recent tasks” des de l'entorn web.

Cal tenir en compte els dos tipus de màquines virtualz que es poden fer a Proxmox:

Per fer les còpies de seguretat s'utilitza vzdump però per a restaurar cal utilitzar vzrestore o qmrestore segons el tipus de màquina virtual.

També cal tenir en compte que la còpia de seguretat pot ser en calent (la màquina no deixa de donar servei) o amb un downtime de la màquina (la màquina s'atura mentrestant es fa la còpia de seguretat)

vzdump

VZDump és la utilitat que propociona Proxmox per tal de fer còpies de seguretat consistents de les màquines virtuals, tant màquines KVM com contenidors OpenVZ. Bàsicament el que fa es crear un fitxer tar (o lzo) amb una còpia de seguretat dels disc o discos de la màquina virtual i també amb la configuració de la màquina.

Hi ha diferents formes de fer la còpia:

  • stop: S'atura la màquina abans de fer la còpia.
  • suspend: Utilitza suspend/resume (el temps d'aturada de la màquina és mínim amb OpenVZ però llart amb KVM)
  • snapshot: Utilitza LVM2 (la màquina no s'atura, es fa tot online). Només es pot fer en màquines amb el discs dur en LVM.

Del manual:

$ man vzdump
NAME
      vzdump - backup utility for virtual machine

SYNOPSIS
       vzdump help

       vzdump {<vmid>} [OPTIONS]
         <vmid>     string

                   The ID of the VM you want to backup.

         -all      boolean   (default=0)

                   Backup all known VMs on this host.

         -bwlimit   integer (0 - N)

                   Limit I/O bandwidth (KBytes per second).

         -compress  (0 | 1 | gzip | lzo)   (default=lzo)

                   Compress dump file.

         -dumpdir   string

                   Store resulting files to specified directory.

         -exclude   string

                   exclude specified VMs (assumes --all)

         -exclude-path string

                   exclude certain files/directories (regex).

         -ionice    integer (0 - 8)

                   Set CFQ ionice priority.

         -lockwait  integer (0 - N)

                   Maximal time to wait for the global lock (minutes).

         -mailto    string

                   no description available

         -maxfiles  integer (1 - N)

                   Maximal number of backup files per VM.

         -mode      (snapshot | stop | suspend)   (default=stop)

                   Backup mode.

         -node      string

                   Only run if executed on this node.

         -quiet     boolean   (default=0)

                   Be quiet.

         -remove    boolean   (default=1)

                   Remove old backup files if there are more than 'maxfiles'
                   backup files.

         -script    string

                   Use specified hook script.

         -size      integer (500 - N)

                   LVM snapshot size im MB.

         -stdexcludes boolean  (default=1)

                   Exclude temorary files and logs.
          -stdout    boolean

                   Write tar to stdout, not to a file.

         -stopwait  integer (0 - N)

                   Maximal time to wait until a VM is stopped (minutes).

         -storage   string
                   Store resulting file to this storage.

         -tmpdir    string

                   Store temporary files to specified directory.

DESCRIPTION
      vzdump is an utility to make consistent snapshots of running virtual machines (VMs). It basically creates a tar archive of the VM private area, which also includes the VM configuration files. vzdump currently supports OpenVZ  
      and QemuServer VMs.

      There are several ways to provide consistency (option "mode"):

      "stop" mode
        Stop the VM during backup. This results in a very long downtime.

      "suspend" mode
        For OpenVZ, this mode uses rsync to copy the VM to a temporary location (see option --tmpdir). Then the VM is suspended and a second rsync copies changed files. After that, the VM is started (resume) again. This results in a  
        minimal downtime, but needs additional space to hold the VM copy.

        For QemuServer, this mode work like "stop" mode, but uses suspend/resume instead of stop/start.

      "snapshot" mode
        This mode uses LVM2 snapshots. There is no downtime, but snapshot mode needs LVM2 and some free space on the corresponding volume group to create the LVM snapshot.

BACKUP FILE NAMES
      Newer version of vzdump encodes the virtual machine type and the backup time into the filename, for example

       vzdump-openvz-105-2009_10_09-11_04_43.tar
      That way it is possible to store several backup into the same directory. The parameter "maxfiles" can be used to specify the maximal number of backups to keep.

RESTORE
      The resulting tar files can be restored with the following programs.
      vzrestore: OpenVZ restore utility
      qmrestore: QemuServer restore utility

      For details see the corresponding manual pages.

CONFIGURATION
      Global configuration is stored in /etc/vzdump.conf.

       tmpdir: DIR
       dumpdir: DIR
       storage: STORAGE_ID
       mode: snapshot|suspend|stop
       bwlimit: KBPS
       ionize: PRI
       lockwait: MINUTES
       stopwait: MINUTES
       size: MB
       maxfiles: N
       script: FILENAME
       exclude-path: PATHLIST

HOOK SCRIPT
      You can specify a hook script with option "--script". This script is called at various phases of the backup process, with parameters accordingly set. You can find an example in the documentation directory ("vzdump- 
hook-script.pl").

EXCLUSIONS (OpenVZ only)
      vzdump skips the following files wit option --stdexcludes

       /var/log/.+
       /tmp/.+
       /var/tmp/.+
       /var/run/.+pid

      You can manually specify exclude paths, for example:

       # vzdump 777 --exclude-path C</tmp/.+> --exclude-path C</var/tmp/.+>

      (only excludes tmp directories)

      Configuration files are also stored inside the backup archive (/etc/vzdump), and will be correctly restored.

LIMITATIONS
      VZDump does not save ACLs.

EXAMPLES
      Simply dump VM 777 - no snapshot, just archive the VM private area and configuration files to the default dump directory (usually /vz/dump/).

       # vzdump 777

      Use rsync and suspend/resume to create an snapshot (minimal downtime).

       # vzdump 777 --mode suspend

      Backup all VMs and send notification mails to root and admin.

       # vzdump --all --mode suspend --mailto root --mailto admin

      Use LVM2 to create snapshots (no downtime).

       # vzdump 777 --dumpdir /mnt/backup --mode snapshot

      Backup more than one VM (selectively)

       # vzdump 101 102 103 --mailto root

      Backup all VMs excluding VM 101 and 102

       # vzdump --mode suspend --exclude 101,102

      Restore an OpenVZ machine to VM 600

       # vzrestore /mnt/backup/vzdump-openvz-777.tar 600

      Restore an Qemu/KVM machine to VM 601

       # qmrestore /mnt/backup/vzdump-qemu-888.tar 601

      Clone an existing container 101 to container 300 using pipes

       # vzdump 101 --stdout|vzrestore - 300

El fitxer principal de configuració és:

/etc/vzdump.conf
# cat /etc/vzdump.conf
# vzdump default settings 

#tmpdir: DIR
#dumpdir: DIR
#storage: STORAGE_ID
#mode: snapshot|suspend|stop
#bwlimit: KBPS
#ionice: PRI
#lockwait: MINUTES
#stopwait: MINUTES
#size: MB
#maxfiles: N
#script: FILENAME
#exclude-path: PATHLIST 


Recursos:

vzrestore

qmrestore

Serveix per restaurar còpies de seguretat de màquines virtuals tipus KVM

$ cd /var/lib/vz/backups/archive
$ qmrestore --storage LVM1VMDisks vzdump-qemu-103-mykvm-2011_11_08-13_09_01.tgz 107

la sortida serà quelcom similar a:

INFO: restore QemuServer backup 'vzdump-qemu-103-mykvm-2011_11_08-13_09_01.tgz' using ID 107
INFO: extracting 'qemu-server.conf' from archive
INFO: extracting 'vm-disk-ide0.qcow2' from archive
INFO: Formatting '/storage/store001/vmdisks/images/107/vm-107-disk-1.qcow2', fmt=qcow2 size=32768 encryption=off cluster_size=0
INFO: new volume ID is 'LVM1VMDisks:107/vm-107-disk-1.qcow2'
INFO: restore data to '/storage/store001/vmdisks/images/107/vm-107-disk-1.qcow2' (9370796032 bytes)
INFO: 372+212934 records in
INFO: 372+212934 records out
INFO: 9370796032 bytes (9.4 GB) copied, 163.067 s, 57.5 MB/s
INFO: restore QemuServer backup 'vzdump-qemu-103-mykvm-2011_11_08-13_09_01.tgz' successful

Recursos:

Interfície gràfica

Per fer còpies de seguretat a Proxmox per la interfície gràfica, cal tenir un Storage que estigui marcat com a tipus:

saddsaasd

és a dir que permeti emmagatzemar copies de seguretat

IMPORTANT: Per defecte a Proxmox no hi ha cap Storage definit d'aquesta manera ja que el storage local per defecte està marcat per a Images, ISO, Containers i Templates. Cal anar a l'Storage View i editar el storage local per tal d'afegir també l'opció Backups (desplegable que permet escollir múltiples opcions)

Backups incrementals

Migracions

Importació de màquines virtuals

Recursos:

Servidor físic --> Proxmox amb Clonezilla

TODO

This method is fast, reliable and OS independent as it uses live cds.

   you need to get http://clonezilla.org/, which is a live linux cd.
   prepare the source host, make sure that you have standard IDE drivers enabled (for winxp/win2003 just use the mergeide.reg, for w2k I followed this link (solution 2 worked for me): [2]
   now, boot the physical host with clonezilla, go for beginner mode and select device-device and then remote, just follow the wizard
   on the Proxmox VE host, prepare a KVM guest, make sure you got a big enough ide disk assigned (add one gb extra to be on the safe side) and also boot this KVM guest with the live cd and execute a shell.
   become root and run fdisk (fdisk /dev/sda/) to make sure that sda is here, exit fdisk with 'w'. this was essential.
   now enter all command from the wizard from the source server tells you (configure network and request the copy process)
   after success (the wizard just copies the data, means I got a 80 gb disk but only 5 gb data on it so it was just a few minutes for the whole process, gbit network) just change the boot device to the hard disk and start the VM. Windows will install all needed drivers automatically, just the Intel NIC drivers for e1000 must be loaded from ISO (i got one big driver ISO from Intel containing all NIC drivers). 

Recursos:

Migració en calent

Els requeriments per tal de poder fer la migració en calent són:

  • KVM: Es pot moure una màquina virtual en calent de un servidor a un altre sense cap interrupció si es treballa en mode Cluster i els discs virtuals estan emmagatzemats en un storage compartit SAN, NAS o DRBD
  • OpenVZ: Es poden migrar inclús si s'utilitza un storage local ( no cal cap solució SAN o NAS)

Les màquines virtuals que estan a un storage local no es poden migrar en calent. Cal que estiguin en un storage compartit. Per fer això s'ha de crear un nou directori. Per exemple:

Xarxa

Configuració per defecte de la xarxa

Una configuració típica

# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:52:d1:43  
         inet6 addr: fe80::a00:27ff:fe52:d143/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:1323 errors:0 dropped:0 overruns:0 frame:0
         TX packets:408 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:234918 (229.4 KiB)  TX bytes:35374 (34.5 KiB)

lo        Link encap:Local Loopback  
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:8 errors:0 dropped:0 overruns:0 frame:0
         TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
         inet6 addr: fe80::1/128 Scope:Link
         UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:3 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vmbr0     Link encap:Ethernet  HWaddr 08:00:27:52:d1:43  
         inet addr:192.168.111.52  Bcast:192.168.111.255  Mask:255.255.255.0
         inet6 addr: fe80::a00:27ff:fe52:d143/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:995 errors:0 dropped:0 overruns:0 frame:0
         TX packets:350 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:180554 (176.3 KiB)  TX bytes:31522 (30.7 KiB)

Fixeu-vos que la adreça IP la té el bridge vmbr0:

# brctl show
bridge name	bridge id		STP enabled	interfaces
vmbr0		8000.08002752d143	no		eth0

Però com podeu veure la targeta de xarxa física (eth0) forma part del bridge.

Canviar l'adreça IP inicial i/o el nom de màquina

Al entrar al sistema trobeu un missatge que diu:

Welcome to the Proxmox Virtual Environment....
... connect to:

https://ADREÇA_IP:8006/

Cal tenir en compte que aquesta adreça IP és més important del que sembla i no es pot canviar sense seguir un procediment. Bàsicament cal tenir en compte que apareix al fitxer /etc/hosts:

$ sudo joe /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.0.2.15 proxmox.hey.com proxmox pvelocalhost
...

És molt important canviar l'adreça IP en aquest fitxer i reiniciar. Si voleu canviar el nom de màquina del servidor Proxmox també l'heu de canviar aquí i fixeu-vos també en posar correctament el domini. Finalment si canvieu el nom de màquina també heu de tocar el fitxer:

$ sudo joe /etc/hostname

IMPORTANT: No elimineu mai del fitxers hosts el nom de màquina pvelocalhost

També cal tenir en compte un altre tema al canviar el nom de màquina... Si ja teniu configuracions i màquines virtuals al node, al entrar a l'entorn gràfic us apareixeran dos nodes, com si tinguéssiu el servidor nou i l'antic. El que cal fer és esborrar el node antic:

# rm -rf /etc/pve/nodes/nom_antic

Canviar les DNS i/o el domini

En aquest sentit no hi ha res especial, es modifica igual que es modificaria en una Debian o Ubuntu, modificant el fitxer /etc/resolv.conf

$ sudo joe /etc/resolv.conf
domain domini.com
search domini.com
nameserver 10.36.253.3
nameserver 10.36.253.6

IMPORTANT: Si voleu canviar el domini cal canviar-lo en aquest fitxer però també al fitxer /etc/hosts

VLANS

Crear un bonding

Vegeu:

La clau està en treure la interfície principal del bridge que crea Proxmox, un cop treta crear un bonding amb les dos targetes i ara assignar aquest bonding al bridge.

LACP

Nota: bond_mode 802.3ad = 4
$ cat /etc/network/interfaces
# network interface settings
auto lo
iface lo inet loopback

iface eth0 inet manual   

auto eth1
iface eth1 inet manual

iface eth2 inet manual 

auto bond0
iface bond0 inet manual 
	slaves eth0 eth1 
	bond_miimon 100
	bond_mode 802.3ad

auto vmbr0
iface vmbr0 inet static
	address  192.168.50.12
	netmask  255.255.255.0
	gateway  192.168.50.1
	bridge_ports bond0
	bridge_stp off
	bridge_fd 0

Vegeu també LACP

Límit de nombre d'interfícies de xarxa (6)

Sembla que al menys la versió 2 de proxmox el límit està establert a 6 targetes de xarxa (net0 a net5). Al afegir la setena dona l'error:

Parameter verification failed. (400)

net6: property is not defined in schema and the schema does not allow additional properties

Exemple VLANs + Bonding

Consulteu:

OpenFPnet/Mosaic/Formació/Execució/Instal·lació_de_Proxmox#Configuraci.C3.B3_de_les_VLANS_i_el_bonding

Eines relacionades

Control i configuració dels bridges. brctl

Consulteu brctl.

NAT MODE

NOTA: Si marco una interfície virtual com a NAT mode no funciona la xarxa. Pendent de provar:

Lo primero - hacer backup del fichero /etc/network/interfaces -, luego directamente desde el panel de proxmox he modificado el bridge vmbr1 con esta informacion:

IP:10.10.11.1
Subnet:255.255.255.0
Autostart:Marcado
¡¡¡Bridge Ports:[Nada, dejar en blanco]¡¡¡ 

Con esto reinicamos la maquina.

Tenemos ahora que editar manualmente el fichero /etc/network/interfaces - en mi caso he usado nano, para dejar la interface vmbr1 del siguiente modo:

auto vmbr1
iface vmbr1 inet static
address 10.10.11.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.11.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.11.0/24' -o vmbr0 -j MASQUERADE

Es decir, tenemos que añadir las tres ultimas lineas que lo que hacen es mandar el trafico de la interfaz por la red 10.10.11.0/24 al bridge por defecto vmbr0. Reiniciamos nuevamente para que los cambios tengan efecto - seguro que podemos hacerlo sin tanto reinicio, pero mis conocimientos de debian son los justos :-)

Una vez tenemos configurado el proxmox, vamos a por la maquina virtual. Lo primero tenemos que asegurarnos que la hemos enganchado al bridge 1 (vmbr1). Accedemos a la maquina y configuramos la IP manualmente:

IP: 10.10.11.2
Subnet:255.255.255.0
Gateway:10.10.11.1

DNS:213.186.33.99 (el de OVH)
8.8.8.8 (el de GOOGLE)

Con esto ya tenemos la maquina virtual con conexion a internet sin exponerla al exterior.

Cluster

Característiques principals (versió 2.0):

  • Gestió centralitzada via web (inclou consola VNC segura)
  • Permet múltiples fonts d'autenticació (local, MS ADS, LDAP, ...)
  • Gestió de permisos basat en rols per a tots els objectes (VM´s, storages, nodes, etc.)
  • Arquitectura multimaster (no existeix un únic master)
  • Proxmox Cluster file system (pmxcfs): Sistema de fitxer Database-driven que permet l'emmagatzemament dels fitxers de configuració replicats en temps real a tots els nodes del cluster utilitzant corosync
  • Migració de màquines virtuals entre hosts físics.
  • Cluster-wide logging
  • RESTful web API


Més informació:

Requeriments:

  • Cada node del cluster ha de tenir el hostname diferent.
  • Tots els nodes han d'estar a la mateixa subxarxa ja que s'utilitza IP Multicast per la comunicació entre nodes (Corosync Cluster Engine). Cal tenir en compte que alguns commutadors no permeten multicast.
  • El temps i la data han d'estar sincronitzats.
  • SSH tunnel on port 22 between nodes is used
  • VNC console traffic is secured via SSL, using ports between 5900 and 5999

Avantatges

  • Gestió web centralitzada de totes les màquines proxmox que formen part d'un cluster
  • Login únic per a tots els nodes i hostes.
  • Connexió a la consola de totes les maquines virtuals des de la web centralitzada
  • Sincronització del magatzem de plantilles

No és un sistema d'alta disponibilitat, però combinant-ho amb DRBD i heartbeat és pot configurar un cluster amb alta disponibilitat.

Versió 1 vs Versió 2

Hi ha hagut canvis a la versió 2 alliberada recentment (--acacha 15:12, 22 maig 2012 (UTC)).

  • Canvia l'eina d'administració, ja no és pveca sinó pvecm.
  • El nou model de cluster està basat en el sistema de fitxer Proxmox Cluster file system (aka pmxcfs). Simplicant aquest sistema de fitxers gestionat per una base de dades ( database-driven) es capaç de replicar en temps real els fitxers de configuració d'un node proxmox cap als altres nodes proxmox que formen part del cluster (utilitza la tecnologia corosync). Per tant amb aquesta tecnologia no existeix més el concepte de master i esclau sinó una arquitectura de cluster multi-master.

Proxmox Cluster file system (pmxcfs)

A Proxmox VE 2.0 el cluster ja no necesita d'un node de gestió central (managment node). Tots els nodes tenen les mateixes capacitats de gestió, fet que eliminar l'efecte single point of failures (SPOF).

Com funciona?

Promox utilitza Proxmox Cluster file system (pmxcfs), un sistema de fitxers database-driven (XML) on es guarden el fitxers de configuració i aquest són replicats en temps real a tots els nodes utilitzant corosync. El sistema de fitxers es basa en fuse que permet crear el sistema de fitxers en userspace en comptes de kernelspace. SQlite és el sistema de base de dades utilitzat per al fitxer de base de dades.

Tot i que el sistema de fitxers guarda totes les dades en un dis dur persistent, una copia de les dades resideix a la RAM. Això implica una restricció en la mida màxima, que actualment (--acacha (discussió) 20:00, 25 ago 2012 (CEST)) és 30MB. Tot i això, és suficient per emmagatzemar la informació de diversos centenars de màquines virtuals.

Avantatges:

  • Elimina la necessitat d'un node de gestió centralitzat
  • Es replica en temps real la configuració a tots els nodes.
  • Proveïx d'una consistència més forta i evita VM IDs duplicats
  • El sistema de fitxers es posa en mode Read-only quan un node per el quorum
  • Tots els nodes reben automàticament actualitzacions de la configuració del cluster corosync.
  • POSIX compatible (per que utilitzar fuse)

L'objectiu és que la configuració de Proxmox (és a dir la carpeta /etc/pve) sigui igual en tot moment a tots els nodes del cluster:

$ mount | [grep]] pve
...
/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,default_permissions,allow_other)

Tal i com hem comentat el sistema de fitxers és fuse que permet implementar un sistema de fitxers in userspace (és a dit gestionat no pel kernel sinó per un programa del sistema).

El servei es control al fitxer:

/etc/init.d/pve-cluster

I el executable és:

/usr/bin/pmxcfs


Recursos:

Drets d'accés al sistema de fitxers /etc/pve

La majoria de fitxers són propietat de root i pertanyent al grup 'www-data'. Només l'usuari root pot fer modificacions (i això mentres el sistema de fitxers estigui muntat en rw ja que per fallada d'alguns dels nodes del cluster (falta de quorum) pot ser que el sistema de fitxers estigui en només lectura). L'usuari 'www-data' només pot llegir fitxers excepte:

/etc/pve/priv/
/etc/pve/nodes/${NAME}/priv/

Un exemple de la carpeta:

# ls -la /etc/pve
total 9
drwxr-x---   2 root www-data    0 Jan  1  1970 .
drwxr-xr-x 102 root root     4096 Nov  4 22:23 ..
-r--r-----   1 root www-data 8468 Jan  1  1970 .clusterlog
-rw-r-----   1 root www-data    2 Jan  1  1970 .debug
-r--r-----   1 root www-data  255 Jan  1  1970 .members
-r--r-----   1 root www-data 1570 Jan  1  1970 .rrd
-r--r-----   1 root www-data  289 Jan  1  1970 .version
-r--r-----   1 root www-data  449 Jan  1  1970 .vmlist
-rw-r-----   1 root www-data  451 Jul 19 18:19 authkey.pub
-rw-r-----   1 root www-data 1164 Nov  4 23:01 cluster.conf
-rw-r-----   1 root www-data  237 Jul 23 13:45 cluster.conf.old
-rw-r-----   1 root www-data   13 Jul 19 18:16 datacenter.cfg
lrwxr-x---   1 root www-data    0 Jan  1  1970 local -> nodes/virt01
drwxr-x---   2 root www-data    0 Jul 19 18:19 nodes
lrwxr-x---   1 root www-data    0 Jan  1  1970 openvz -> nodes/virt01/openvz
drwx------   2 root www-data    0 Jul 19 18:19 priv
-rw-r-----   1 root www-data 1533 Jul 19 18:19 pve-root-ca.pem
-rw-r-----   1 root www-data 1675 Jul 19 18:19 pve-www.key
lrwxr-x---   1 root www-data    0 Jan  1  1970 qemu-server -> nodes/virt01/qemu-server
-rw-r-----   1 root www-data  199 Oct 18 13:11 storage.cfg
-rw-r-----   1 root www-data  175 Oct 31 20:15 user.cfg
-rw-r-----   1 root www-data  256 Oct 13 17:53 vzdump.cron

pveca

IMPORTANT: Aquesta comanda només està disponible a la versió 1.0. A partir de la 2.0 utilitzeu pvecm

Un resum de les opcions més utilitzades:

      pveca -l             # show cluster status
      pveca -c             # create new cluster with localhost as master
      pveca -s [-h IP]     # sync cluster configuration from master (or IP)
      pveca -d ID          # delete a node
      pveca -a [-h IP]     # add new node to cluster
      pveca -m             # force local node to become master

Per a més detalls consulteu el manual:

$ man pveca

pvecm

pvecm són les inicials de Proxmox VE cluster manager toolkit

Per més detalls consulteu el manual:

$ man pvecm

pvecm(1)           Proxmox Documentation                                                 pvecm(1)

NAME
      pvecm - Proxmox VE cluster manager toolkit

SYNOPSIS
       pvecm <COMMAND> [ARGS] [OPTIONS]

       pvecm help [<cmd>] [OPTIONS]

         Get help about specified command.

         <cmd>      string

                   Command name

         -verbose   boolean

                   Verbose output format.

       pvecm add <hostname> [OPTIONS]

         Adds the current node to an existing cluster.

         <hostname> string

                   Hostname (or IP) of an existing cluster member.

         -force     boolean

                   Do not throw error if node already exists.

         -nodeid    integer (1 - N)

                   Node id for this node.

         -votes     integer (0 - N)

                   Number of votes for this node

       pvecm addnode <node> [OPTIONS]

         Adds a node to the cluster configuration.

         <node>     string

                   The cluster node name.

         -force     boolean

                   Do not throw error if node already exists.

         -nodeid    integer (1 - N)

                   Node id for this node.

         -votes     integer (0 - N)

                   Number of votes for this node

       pvecm create <clustername> [OPTIONS]

         Generate new cluster configuration.

         <clustername> string

                   The name of the cluster.

         -nodeid    integer (1 - N)

                   Node id for this node.

         -votes     integer (1 - N)

                   Number of votes for this node

       pvecm delnode <node>

         Removes a node to the cluster configuration.

         <node>     string

                   The cluster node name.

       pvecm expected <expected>

         Tells CMAN a new value of expected votes.

         <expected> integer (1 - N)

                   Expected votes

       pvecm keygen <filename>

         Generate new cryptographic key for corosync.

         <filename> string

                   Output file name

       pvecm nodes

         Displays the local view of the cluster nodes.

       pvecm status

         Displays the local view of the cluster status.

       pvecm updatecerts  [OPTIONS]

         Update node certificates (and generate all needed files/directories).

         -force     boolean

                   Force generation of new SSL certifate.

         -silent    boolean

                   Ignore errors (i.e. when cluster has no quorum).

DESCRIPTION
      pvecm is a program to manage the cluster configuration. It can be used to create a new cluster, join nodes to a cluster, leave the cluster, get status information and do 
various other cluster related tasks.

COPYRIGHT AND DISCLAIMER
       Copyright (C) 2007-2011 Proxmox Server Solutions GmbH

      This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software 
Foundation, either version 3 of the License, or (at your option) any later version.

      This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the GNU Affero General Public License for more details.

      You should have received a copy of the GNU Affero General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.

pvecm status

Mostra l'estat del cluster des de la perspectiva local:

$ sudo pvecm status
Version: 6.2.0
Config Version: 2
Cluster Name: AUGUTEEBRETIC
Cluster Id: 5997
Cluster Member: Yes
Cluster Generation: 184
Membership state: Cluster-Member
Nodes: 2
Expected votes: 2
Total votes: 2
Node votes: 1
Quorum: 2  
Active subsystems: 1
Flags: 
Ports Bound: 0  
Node name: virt04
Node ID: 1
Multicast addresses: 239.192.23.132 
Node addresses: 109.69.15.11 

pvecm nodes

Mostra els nodes d'un cluster.

$ sudo pvecm nodes
Node  Sts   Inc   Joined               Name
  1   M    172   2012-05-19 17:02:26  virt04
  2   M    184   2012-05-22 14:37:24  virt03

Creació del cluster

Versió 2.0

Consulteu l'estat del cluster:

$ sudo pvecm status
cman_tool: Cannot open connection to cman, is it running ?

Això vol dir que no teniu cluster. Creeu-lo:

$ sudo pvecm create cluster1
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
89:a5:b7:cc:32:5c:f8:cd:a7:5b:bc:e7:43:db:93:77 root@proxmox
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .        |
|       = .       |
|      + S        |
|     . * + .  .  |
|      + = o +. o.|
|       o   + .+oE|
|          o..o..+|
+-----------------+
Restarting pve cluster filesystem: pve-cluster[dcdb] notice: wrote new cluster config '/etc/cluster/cluster.conf'
.
Starting cluster: 
   Checking if cluster has been disabled at boot... [  OK  ]
   Checking Network Manager... [  OK  ]
   Global setup... [  OK  ]
   Loading kernel modules... [  OK  ]
   Mounting configfs... [  OK  ]
   Starting cman... [  OK  ]
   Waiting for quorum... [  OK  ]
   Starting fenced... [  OK  ]
   Starting dlm_controld... [  OK  ]
   Unfencing self... [  OK  ]

On cluster1 és el nom que voleu posar al Cluster. Ara al fer l'status:

$ sudo pvecm status
Version: 6.2.0
Config Version: 1
Cluster Name: cluster1
Cluster Id: 26777
Cluster Member: Yes
Cluster Generation: 4
Membership state: Cluster-Member
Nodes: 1
Expected votes: 1
Total votes: 1
Node votes: 1
Quorum: 1  
Active subsystems: 5
Flags: 
Ports Bound: 0  
Node name: proxmox
Node ID: 1
Multicast addresses: 239.192.104.2 
Node addresses: 192.168.111.52 

Ara cal entrar per CLI a un altre node per afegir-lo al cluster.

$ sudo pvecm add 192.168.111.52
...
copy corosync auth key
stopping pve-cluster service
Stopping pve cluster filesystem: pve-cluster.
backup old database 
Starting cluster: 
  Checking if cluster has been disabled at boot... [  OK  ]
  Checking Network Manager... [  OK  ]
  Global setup... [  OK  ]
  Loading kernel modules... [  OK  ]
  Mounting configfs... [  OK  ]
  Starting cman... [  OK  ]
  Waiting for quorum... [  OK  ]
  Starting fenced... [  OK  ]
  Starting dlm_controld... [  OK  ]
  Unfencing self... [  OK  ]
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
Restarting PVE Daemon: pvedaemon.
Restarting web server: apache2 ... waiting .
successfully added node 'proxmox02' to cluster.

Recursos

Versió 1.x

Per tal de crear un cluster cal definir quines màquines faran de Master i quines d'esclaus del cluster.

S'utilitza l'ordre pveca per tal de gestionar el cluster

Creació del Master:

En el nodo que será el master:

# pveca -c
cluster master successfully created

# pveca -l
CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---DISK
1 : 10.31.1.67      M     A     1 day 05:11   0.08    30%     3%

Node esclau:

Consulteu l'estat abans de que la màquina formi part del cluster:

# pveca -l
local node '10.31.1.60' not part of cluster

Afegiu la màquina al cluster com a esclau o node:

# pveca -a -h 10.1.1.1
cluster node successfully created

IMPORTANT: L'adreça 10.1.1.1 de l'exemple s'ha de canviar per l'adreça IP del node master

Ara torneu a consultar l'estat:

# pveca -l
CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---DISK
1 : 10.1.1.1      M     A     1 day 05:13   0.01    30%     3%
2 : 10.1.1.2      N     A           01:57   0.00    11%     2%

Migració manual d'una màquina

El primer que cal fer és posar el nombre de vots esperats a 1 per tornar a obtenir quorum:

$ pvecm expected 1

I ara es pot moure el fitxer de configuració:

# mv /etc/pve/nodes/kvm2/qemu-server/100.conf /etc/pve/nodes/kvm1/qemu-server/

A l'exemple es mou de la màquina kvm2 a la kvm1.

Còpies de seguretat

Aturar el dimoni de cluster

$ service pve-cluster stop

Quorum

Conceptes:

  • CMAN: Són les inicial de Cluster Management. CMAN és un gestor de cluster distribuit que s'executa a cada node del cluster de forma que la gestió del cluster es distribueix entre tots els nodes. CMAN controla els membres membres d'un cluster monitoritzant els missatges provinents d'altres nodes del cluster. Quan es modifica algún membre del cluster, CMAN ho notifica als altres components de la infraestructura i es pren la decisió apropiada segons els canvis realitzats. Si un node del cluster no es comunica amb la resta de nodes en un temps predeterminat, aleshores CMAN elimina el node del cluster i comunica als altres membres del cluster que un node a deixat de ser membre. Entre les accions a realitzar al desapareixer un node pot estar el Fencing.
  • Quorum: CMAN gestiona el quorum del cluster. Si més de la meitat dels nodes estan actius aleshores eś diu que hi ha quorum. Si menys de la meitat estan actius, aleshores el cluster no té quorum i s'atura tota la activitat del cluster. El quorum evita que succeixi el que s'anomena una condició d'split-brain. Quorum és un algorisme basat en votacions utilitzat per CMAN. Un cluster només pot funcionar correctament si hi ha un acord general entre els membres del cluster sobre l'estat del mateix. Es diu que un cluster té quorum si la majoria simple dels nodes estan actius (alive), es comuniquen entre ells i tenen els mateixos membres del cluster. Per exemple si un cluster té 13 membres només hi haurà quorum si 7 membres conmpleixen les condicions indicades.
  • quorate: vol dir que és té quorum en aquest node. Aleshores este permís d'escriptura als fitxer de la carpeta /etc/pve
  • split-brain: aquest efecte succeix quan dos instàncies del mateix cluster s'executen al mateix temps. Si això succeix pot passar que cada instància accedeixi alhora a recursos comuns del cluster sense conèixer l'existència de l'altre instància fet que pot provocar inconsistència de dades i per tant afectar la integritat del cluster.

IMPORTANT: Noteu que en un sistema en cluster de 2 nodes no es possible aconseguir una majoria simple si un dels dos nodes falla!

Amb l'ordre:

$ sudo pvecm status
Version: 6.2.0
Config Version: 4
Cluster Name: AUGUTEEBRETIC
Cluster Id: 5997
Cluster Member: Yes
Cluster Generation: 428
Membership state: Cluster-Member
Nodes: 3
Expected votes: 3
Total votes: 3
Node votes: 1
Quorum: 2  
Active subsystems: 5
Flags: 
Ports Bound: 0  
Node name: virt03
Node ID: 2
Multicast addresses: 239.192.23.132 
Node addresses: 109.69.15.10 

Podeu saber les següents dades:

  • Expected votes: Nombre de vots esperats al cluster
  • Total votes: vots totals rebuts
  • Node votes: nombre de vots del node local
  • Quorum: Nombre de vots necessaris per tal de tenir quorum.

Establir el valor de votes esperats a 1:

$ sudo pvecm e 1

Segons el manual:

$ man pvecm
...
 expected <expected>

         Tells CMAN a new value of expected votes.

         <expected> integer (1 - N)

                   Expected votes

Fitxers

/etc/cluster/cluster.conf

$ sudo cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="AUGUTEEBRETIC" config_version="4">

  <cman keyfile="/var/lib/pve-cluster/corosync.authkey">
  </cman>

  <clusternodes>
  <clusternode name="virt04" votes="1" nodeid="1"/>
  <clusternode name="virt03" votes="1" nodeid="2"/></clusternodes>

</cluster>

Cluster i Storage groups

TODO

Cal tenir varies coses en compte:

  • ÉS possible que Proxmox vulgui que els storages es diguin igual per tal de poder fer migracions i altres?
  • Sembla ser que no troba els vg de LVM (la interfície gràfica de proxmox vull dir) que no existeixen a les dues màquines. Hi ha l'excepció del VGs que es van crear abans d'afegir una segona màquina al cluster
  • Amb els storage que són simplement carpetes la sensació es que se generen automàticament als nodes que s'afegeixen a un cluster. Comprovar
  • Pot ser una mica liant però tot i dir-se igual es mostrarà el que toqui segons a la màquina que s'estigui.
  • Que tinguin el mateix nom no implica que tinguin el mateix contingut ni cap tipus de HA. Això s'ha de fer a part si es vol fer
  • Implicacions de la opció shared?

Caldria provar:

  • Si el cluster es crea abans que els storage groups, potser que toqui crec els grups VG a totes dues màquines per tal que els detecti a la interfície gràfica

Cluster en Alta disponibilitat

Documentació i manuals

Gestió Web

http://pve.proxmox.com/wiki/Documentation

Gestió Consola

http://pve.proxmox.com/wiki/Command_line_tools

Instal·lació certificat SSL

:*http://blog.michaelboman.org/2012/04/getting-real-ssl-certificate-in-my.html

Install SSL certificate into Proxmox/Apache Proxmox stores its SSL-certificates in the /etc/pve/local folder, so lets head there:

$ cd /etc/pve/local

Lets move the old certificates away, but keep them if something goes wrong:

$ mkdir old
$ mv pve-ssl.key  pve-ssl.pem old/

Time to put the certificates we created and downloaded to use. First copy the server key (I stored the downloaded files in /root).

$ cp /root/ssl.key pve-ssl.key
$ openssl x509 -in /root/ssl.crt -out pve-ssl.pem
$ openssl rsa -in pve-ssl.key >> pve-ssl.pem

Almost done now. We just need to store the intermediate and root CA certificates as well. I downloaded those directly to /etc/pve/local

$  wget https://www.startssl.com/certs/sub.class1.server.ca.pem https://www.startssl.com/certs/ca.pem

Now all the certificate files are in place, time to modify the Proxmox apache configuration file to make use of them

Modify /etc/apache2/sites-available/pve-redirect.conf so it looks like this (bold is added/modified lines):

   <VirtualHost *:80>
       #RewriteLog "/root/rewrite.log"
       #RewriteLogLevel 10
       RewriteEngine on
       RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
       RewriteRule .* - [F]
       RewriteRule ^/(.*) https://%{HTTP_HOST}:8006/$1 [L,R]
   </VirtualHost>
   <VirtualHost *:443>
       SSLEngine on
       SSLProtocol all -SSLv2
       SSLCertificateFile /etc/pve/local/pve-ssl.pem
       SSLCertificateKeyFile /etc/pve/local/pve-ssl.key
       SSLCertificateChainFile /etc/pve/local/sub.class1.server.ca.pem
       SSLCACertificateFile /etc/pve/local/ca.pem
       SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
       CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
       RewriteEngine on
       RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
       RewriteRule .* - [F]
       RewriteRule ^/(.*) https://%{HTTP_HOST}:8006/$1 [L,R]
   </VirtualHost>

Modify /etc/apache2/sites-available/pve.conf so it looks like this (bold is added/modified lines):

   <IfModule mpm_prefork_module>
       StartServers 2
       MinSpareServers 1
       MaxSpareServers 2
       MaxClients          50
       MaxRequestsPerChild 200
   </IfModule>
   ServerName localhost
   ServerSignature Off
   ServerTokens Prod
   ServerAdmin root
   AddDefaultCharset On
   # Hint1: Ajax use KeepAlive. We wnat that to get better performance.
   # Hint2: We need to limit the number of request to avoid exhaustive
   # memory usage (we still have small memory leaks).
   # Apache KeepAlive in effect disables MaxRequestsPerChild,
   # (max request are  MaxRequestsPerChild*MaxKeepAliveRequests)
   # so we implemented and additional limit in REST.pm
   # But KeepAlive spawns too many processes - so we disable that for now
   KeepAlive off
   MaxKeepAliveRequests 200
   <IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE application/json
   </IfModule>
   CustomLog ${APACHE_LOG_DIR}/access.log combined
   Listen 8006
   <VirtualHost *:8006>
       SSLEngine on
       SSLProtocol all -SSLv2
       SSLCertificateFile /etc/pve/local/pve-ssl.pem
       SSLCertificateKeyFile /etc/pve/local/pve-ssl.key
       SSLCertificateChainFile /etc/pve/local/sub.class1.server.ca.pem
       SSLCACertificateFile /etc/pve/local/ca.pem
       SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
       CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
       RewriteEngine on
       RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
       RewriteRule .* - [F]
       DocumentRoot /usr/share/pve-manager/root
       <Directory />
   Options FollowSymLinks
   AllowOverride None
       </Directory>
       <Directory /usr/share/pve-manager/root>
   Options FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   allow from all
       </Directory>
       Alias /pve2/css/ /usr/share/pve-manager/css/
       Alias /pve2/ext4 /usr/share/pve-manager/ext4/
       Alias /pve2/images/ /usr/share/pve-manager/images/
       Alias /vncterm/ /usr/share/vncterm/
       # avoid authentication when accessing favicon
       Alias /favicon.ico /usr/share/pve-manager/images/favicon.ico
       PerlRequire /usr/share/pve-manager/startup.pl
       <Location /index.pl>
           SetHandler perl-script         PerlHandler ModPerl::Registry
           Options ExecCGI     </Location>
       <Location /api2/>
           SetHandler perl-script
           PerlHandler PVE::REST
       </Location>
   </VirtualHost>


Serveis

A la pestanya Services, un cop seleccionat un node/servidor Proxmox, es mostra una relació dels serveis.

Els serveis són:

Servidor Apache

S'utilitza la següent configuració:

$ cat /etc/apache2/sites-available/pve-redirect.conf
<VirtualHost *:80>
    #RewriteLog "/root/rewrite.log"
    #RewriteLogLevel 10
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]
    RewriteRule ^/(.*) https://%{HTTP_HOST}:8006/$1 [L,R]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile /etc/pve/local/pve-ssl.pem
    SSLCertificateKeyFile /etc/pve/local/pve-ssl.key

    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]
    RewriteRule ^/(.*) https://%{HTTP_HOST}:8006/$1 [L,R]
</VirtualHost>

Com podeu veure els certificats SSL són:

SSLCertificateFile /etc/pve/local/pve-ssl.pem
SSLCertificateKeyFile /etc/pve/local/pve-ssl.key

Servei PVECluster

IMPORTANT: Vegeu l'apartat Proxmox#Cluster per obtenir informació sobre com crear i gestionar un Cluster Proxmox. Aquest apartat està dedicat al servei pve-cluster. També podeu trobar una explicació de com funciona el cluster a: Proxmox#Proxmox_Cluster_file_system_.28pmxcfs.29

Aquest servei està controlat per l'script System V /etc/init.d/pve-cluster

$ cat /etc/init.d/pve-cluster 
#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          pve-cluster
# Required-Start:    $remote_fs $network $syslog $time fuse
# Required-Stop:     $remote_fs $network $syslog $time fuse
# X-Start-Before:    apache2 cron
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the pve cluster filesystem
# Description:       Starts and stops the pve cluster filesystem
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/bin/pmxcfs        # Introduce the server's location here
NAME=pve-cluster              # Introduce the short server's name here
DESC="pve cluster filesystem" # Introduce a short description here

PIDFILE=/var/run/$NAME.pid

test -x $DAEMON || exit 0 

. /lib/lsb/init-functions

# Default options, these can be overriden by the information
# at /etc/default/$NAME
DAEMON_OPTS="-q"          # Additional options given to the server
                        
# Include defaults if available
if [ -f /etc/default/$NAME ] ; then
	. /etc/default/$NAME
fi  

set -e 

running_pid() {
# Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
    # Is this the expected server
    [ "${cmd##*/}" != "${name##*/}" ] &&  return 1
    return 0
}

running() {
# Check if the process is running looking at /proc
# (works for all users) 

    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    pid=`cat $PIDFILE`
    running_pid $pid $DAEMON || return 1
    return 0
} 

start_server() {

   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
   errcode=$?
   return $errcode
}

stop_server() {
   start-stop-daemon --stop --quiet --retry TERM/2/TERM/10/KILL/2 --pidfile $PIDFILE
   errcode=$?
   return $errcode
}

case "$1" in
   start)
	log_daemon_msg "Starting $DESC " "$NAME"

       # Check if it's running first
       if running ;  then
           log_progress_msg "apparently already running"
           log_end_msg 0
           exit 0
       fi
	errcode=0
       start_server || errcode=$?
	# try to create required directories. This only works
	# for a single node setup, because we have no quorum
	# in a cluster setup. But this doesn't matter, because the 
	# cluster manager creates all needed files (pvecm)
	if [ $errcode -eq 0 ] ; then
	    /usr/bin/pvecm updatecerts --silent || true
	fi
        log_end_msg $errcode
	;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
       if running ; then
           # Only stop the server if we see it running
	    errcode=0
 	    stop_server || errcode=$?		
	    log_end_msg $errcode
        else
           # If it's not running don't do anything
	    log_progress_msg "apparently not running"
	    log_end_msg 0
	    exit 0
        fi
        ;;
   restart|force-reload)
       log_daemon_msg "Restarting $DESC" "$NAME"
	errcode=0
       stop_server || errcode=$?
	errcode=0
       start_server || errcode=$?
	log_end_msg $errcode
	;;
   status)
       log_daemon_msg "Checking status of $DESC" "$NAME"
       if running ;  then
           log_progress_msg "running"
           log_end_msg 0
       else
           log_progress_msg "apparently not running"
           log_end_msg 1
           exit 1
       fi
       ;;
   reload)
       log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
       log_warning_msg "cannot re-read the config file (use restart)."
       ;;

   *)
	N=/etc/init.d/$NAME
	echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0

Com podeu veure les opcions són:

Usage: $N {start|stop|restart|force-reload|status}

Per exemple:

$ sudo /etc/init.d/pve-cluster status
Checking status of pve cluster filesystem: pve-cluster running.

El dimoni (binari executable del servei) és el fitxer:

/usr/bin/pmxcfs

Consulteu:

pmxcfs

Es poden configurar els valors per defecte a:

$ cat /etc/default/pve-cluster
# Defaults for pve-cluster initscript
# sourced by /etc/init.d/pve-cluster
# installed at /etc/default/pve-cluster by the maintainer scripts 

#
# This is a POSIX shell fragment
#

# Additional options that are passed to the Daemon.
DAEMON_OPTS=""

Recursos:

nodeManager

Dimoni que gestiona els nodes de PVE.

$ cat /etc/init.d/pve-manager
#!/bin/sh 

### BEGIN INIT INFO
# Provides:        pve-manager
# Required-Start:  $remote_fs apache2 qemu-server vz pvestatd
# Required-Stop:   $remote_fs apache2 qemu-server vz pvestatd
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: PVE VM Manager
### END INIT INFO

. /lib/lsb/init-functions 

PATH=/sbin:/bin:/usr/bin:/usr/sbin
DESC="PVE Status Daemon" 
PVESH=/usr/bin/pvesh

test -f $PVESH || exit 0

case "$1" in
	start)
		echo "Starting VMs and Containers"
 		pvesh --nooutput create /nodes/localhost/startall 
  		;; 
	stop) 
		echo "Stopping VMs and Containers"
		pvesh --nooutput create /nodes/localhost/stopall 
   		;;
	reload|restart|force-reload)
	        # do nothing here 
 		;;
	*)
	        N=/etc/init.d/$NAME
 		echo "Usage: $N {start|stop|reload|restart|force-reload}" >&2
 		exit 1
		;;
esac

exit 0

Cman: Cman/Corosync cluster daemon

Vegeu també:

RGmanager: Resource Group Manager Daemon

Altres serveis

/etc/init.d/pvenetcommit

$ cat /etc/init.d/pvenetcommit
#!/bin/sh 

### BEGIN INIT INFO
# Provides:        pvenetcommit
# Required-Start:  checkroot
# Required-Stop:
# Default-Start:   S
# Default-Stop:
# Short-Description: commits network changes
### END INIT INFO

set -e

. /lib/lsb/init-functions

PATH=/sbin:/bin

IFFN=/etc/network/interfaces

# we cant use perl here, because this skript runs before
# we have /usr mounted

case "$1" in
    start)
	if test -f "${IFFN}.new"; then
	    echo "committing new network configuration";
	    if ! mv "${IFFN}.new" $IFFN; then
		echo "unable to commit changes to '${IFFN}' - $!\n";
	    fi
	fi
	;;
    stop|restart|force-reload) 
	exit 0 
	;; 
   *)
	echo "Usage: /etc/init.d/pvenetcommit {start}"
	exit 0
	;;
esac

exit 0

/etc/init.d/pvestatd

$ cat /etc/init.d/pvestatd
#!/bin/sh 

### BEGIN INIT INFO
# Provides:        pvestatd
# Required-Start:  $remote_fs $network $syslog pve-cluster pvedaemon cman clvm
# Required-Stop:   $remote_fs $network $syslog pve-cluster pvedaemon cman clvm
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: PVE Status Daemon
### END INIT INFO

. /lib/lsb/init-functions

PATH=/sbin:/bin:/usr/bin:/usr/sbin
NAME=pvestatd
DAEMON=/usr/bin/pvestatd
DESC="PVE Status Daemon" 

PIDFILE=/var/run/pvestatd.pid

test -f $DAEMON || exit 0

case "$1" in
	start)
		log_daemon_msg "Starting $DESC" "$NAME"
 		start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
		log_end_msg $?
 		;;
	stop)
		log_daemon_msg "Stopping $DESC" "$NAME"
 		start-stop-daemon --stop  --quiet --retry TERM/5/TERM/10/KILL/2 --pidfile $PIDFILE
		log_end_msg $?
  		;;
	reload)
		log_daemon_msg "Reloading $DESC" "$NAME"
		if ( [ -e $PIDFILE ] && kill -0 `cat $PIDFILE`) then
		    start-stop-daemon --stop --quiet --pidfile $PIDFILE --signal HUP
		else
		    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
		fi
		log_end_msg $?
 		;;
	restart|force-reload)
		log_daemon_msg "Restarting $DESC" "$NAME"
 		start-stop-daemon --stop --quiet --retry TERM/5/TERM/10/KILL/2 --pidfile $PIDFILE
 		start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
		log_end_msg $?
 		;;
	*)
	        N=/etc/init.d/$NAME
  		echo "Usage: $N {start|stop|reload|restart|force-reload}" >&2
 		exit 1
		;;
esac

exit 0

/etc/init.d/pvedaemon

$ cat /etc/init.d/pvedaemon
#!/bin/sh

### BEGIN INIT INFO
# Provides:        pvedaemon
# Required-Start:  $remote_fs $network $syslog pve-cluster cman clvm
# Required-Stop:   $remote_fs $network $syslog pve-cluster cman clvm
# X-Start-Before:  apache2
# X-Stop-After:    apache2
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: PVE Daemon
### END INIT INFO

. /lib/lsb/init-functions

PATH=/sbin:/bin:/usr/bin:/usr/sbin
DAEMON=/usr/bin/pvedaemon
NAME=pvedaemon
DESC="PVE Daemon"
PIDFILE=/var/run/pvedaemon.pid

test -f $DAEMON || exit 0

# avoid warnings about uninstalled locales when pvedaemon executes commands
export LC_ALL="C"

case "$1" in
	start)
		log_daemon_msg "Starting $DESC" "$NAME"
  		start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
		log_end_msg $?
  		;;
	stop)
		log_daemon_msg "Stopping $DESC" "$NAME"
  		start-stop-daemon --stop --quiet --retry TERM/2/TERM/10/KILL/2 --pidfile $PIDFILE
		log_end_msg $?
  		;;
	reload)
		log_daemon_msg "Reloading $DESC" "$NAME"
		if ( [ -e $PIDFILE ] && kill -0 `cat $PIDFILE`) then
		    start-stop-daemon --stop --signal HUP --pidfile $PIDFILE
		else
		    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
		fi
		log_end_msg $?
  		;;		
	restart|force-reload) 
		log_daemon_msg "Restarting $DESC" "$NAME"
 		start-stop-daemon --stop --quiet --retry TERM/2/TERM/10/KILL/2 --pidfile $PIDFILE
                sleep 2
  		start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON 
		log_end_msg $?
 		;;
	*)
	        N=/etc/init.d/$NAME
  		echo "Usage: $N {start|stop|restart|force-reload}"
 		exit 1
		;;
esac

exit 0

/etc/init.d/pvebanner

$ cat /etc/init.d/pvebanner

Executa la comanda /usr/bin/pvebanner (pvebanner):

# pvebanner 
Welcome to the Proxmox Virtual Environment. Please use your web browser to 
configure this server - connect to:

  https://10.140.128.18:8006/ 

--------------------------------------------------------------------------------

API de programació

Consulteu:

http://pve.proxmox.com/pve2-api-doc/

Summary of the advantages

   Easy and human readable data format (native web browser format)
   Automatic parameter verification (we can also verify return values)
   Automatic generation of API documentation
   Easy way to create command line tools (use the same API)
   Resource Oriented Architecture (ROA)
   declarative API definition using JSON Schema

Recursos:

Troubleshooting. Resol·lució de problemes

Parameter backupfile is missing

És un canvi de la versió 2.3:

http://pve.proxmox.com/wiki/Downloads#Update_a_running_Proxmox_Virtual_Environment_2.x_to_latest_2.3

Cal apagar (stop, no pas un reboot) i tornar a iniciar la màquina.

Recursos:

Convertir una màquina virtual de vmdk a raw

El primer que cal fer es trobar el fitxer imatge, sole estar a la carpeta:

/var/lib/vz/images/

Imagineu-vos que voleu fer la màquina mab id 106, aleshores la imatge la trobareu a la carpeta:

/var/lib/vz/images/106

Per passar a raw utilitzeu qemu-img:

$ /var/lib/vz/images/106
$ sudo qemu-img convert -f vmdk vm-106-disk-1.vmdk -O raw vm-106-disk-1.raw

Ara cal modificar la màquina virtual:

$ sudo qm config 106
bootdisk: ide0
cores: 2
ide0: local:106/vm-106-disk-1.vmdk,size=100G
memory: 2048
name: radius.tortosa.guifi.net
net1: virtio=B6:F0:F8:33:5A:F7,bridge=vmbr10
onboot: 1
ostype: l26
sockets: 1
unused0: local:106/vm-106-disk-1.vmdk

Per fer la modificació:

$ sudo qm set 106 --ide0 vm-106-disk-1.raw

Ara ja podeu tornar a arrancar la màquina.

NOTA: Els format vmdk no es poden importar a LVM, només es pot fer amb raw, per tant per passar de vmdk a LVM cal passar abans per raw

Assignar un disc dur existent a una màquina virtual

Per l'entorn gràfic no es pot fer. Podeu afegir un disc per veure com queda la configuració per línia de comandes amb:

$ sudo qm config 107
bootdisk: ide0
cores: 2
ide1: local:iso/clonezilla-live-1.2.12-67-amd64.iso,media=cdrom,size=114M
memory: 3000
name: tallafocsASI
net0: virtio=56:70:03:82:33:76,bridge=vmbr0
net1: virtio=F6:C0:BB:FD:A7:23,bridge=vmbr14
net2: virtio=8E:BD:32:1A:75:C4,bridge=vmbr15
net3: virtio=DA:94:36:D9:CC:1F,bridge=vmbr16
net4: virtio=B6:2B:74:E5:3D:12,bridge=vmbr17
net5: virtio=26:70:D7:42:42:1C,bridge=vmbr18
ostype: l26
sockets: 1
virtio0: vg_iscsi:vm-107-disk-2,size=32G

Fixeu-vos que assigna el disk 2 qaun ja existeix un disc dur 1 que volem aprofitar! Dessasigneu el disc dos per la interfície gràfica (cal fer-ho dos cops, un per dessasignar i un altre per esborrar-lo físicament, OCO! tingueu en compte si realment el borreu esborrar)

$ sudo qm set 107 --virtio0 vg_iscsi:vm-107-disk-1,size=32G

Cant migrate running VM without --online (500)

El missatge és bastant clar, no es poden migrar màquines sense la opció online. Si estan si s'estan . La solució és aturar abans la màquina i fer una migració en fred.

storagy type 'lvm' not supported

storagy type 'lvm' not supported

ERROR: migration aborted ... Failed to sync data - can't do online migration - VM uses local disks

Les migracions online només es poden fer amb discs durs de xarxa compartits, és a dir la màquina origen i destinació han de compartir la mateixa unitat de disc (ja sigui un NFS, un iscsi, etc...). Es pot fer la migració offline però.


vm is locked (backup)

Es pot desbloquejar una màquina amb:

$ sudo qm unlock <vmid>


No es mostra cap Base volume de ISCSI al crear un LVM grup

El problema en el meu cas era haver posat un password d'autenticació CHAP al servidor ISCSI (un Openfiler)

INFO: trying to get global lock - waiting...

L'error m'ha donat al intentar fer un backup. En el meu cas era per que s'estaven fent els backups automatitzats (programats amb cron per Proxmox) i resta a l'espera d'alliberar recursos, o el que és el mateix acabar els backups per fer les còpies de seguretat.

Canviar el títol del GUI web de Proxmox

Cal modificar els fitxers:

$ sudo joe /usr/share/pve-manager/ext4/pvemanagerlib.js

I busqueu la línia:

17913:    title: 'Proxmox Virtual Environment',

I poseu per exemple:

title: 'Proxmox Virtual Environment. IES Leopoldo Querol',

També modifiqueu:

/usr/share/pve-manager/root/index.pl

Màquines virtuals massa petites. Fer més grans els discos virtuals

Cal tenir en compte que sempre cal fer 3 passos:

  • Ampliar la mida de la partició lògica LVM
  • Ampliar la mida de les particions del sistema de la màquina virtual
  • Ampliar la mida del sistema de fitxers

VMDK

No es pot? abans cal passar la imatge a raw

Raw

$ cd /var/lib/vz/images/xxx
$ qemu-img resize diskimage.zzz +1G

LVM storage


No funciona Teamviewer

Cal escollir a la màquina virtual el driver Standard VGA.

Tabular a la consola

NOTA: No m'ha funcionat! Sí funciona però cal reiniciar navegadors, proxmoxs ,etc

$ sudo joe /usr/share/pve-manager/ext4/pvemanagerlib.js

I canvieu la línia 1834 (1842 en noves versions, --acacha (discussió) 10:26, 5 ago 2012 (CEST)) de:

{tag: 'param', name: 'Show Controls', value: 'No'},

a:

{tag: 'param', name: 'Show Controls', value: 'Yes'},

És necessari tancar el navegador i la consola i tornar a entra per aplicar els canvis.

NOTA: També es pot utilitzar Alt Gr + Tab

També sembla que hi ha problemes si Java és la versió 7...

....

If you are having trouble using the TAB key on the Proxmox 2.0 VNC console you are probably running Java 7.

Instead of downgrading to Java 6, simply edit '/usr/share/pve-manager/ext4/pvemanagerlib.js' at line 1834 by changing it from "No" to "Yes".
 
Then do a hard refresh on the Proxmox GUI and re-launch the console. Now you can use TAB again without shifting focus away from the console.

Problema amb locales

Consulteu:

Locale#Resoluci.C3.B3_de_problemes._Troubleshooting


perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_TIME = "ca_ES.UTF-8",
	LC_MONETARY = "ca_ES.UTF-8",
	LC_ADDRESS = "ca_ES.UTF-8",
	LC_TELEPHONE = "ca_ES.UTF-8",
	LC_NAME = "ca_ES.UTF-8",
	LC_MEASUREMENT = "ca_ES.UTF-8",
	LC_IDENTIFICATION = "ca_ES.UTF-8",
	LC_NUMERIC = "ca_ES.UTF-8",
	LC_PAPER = "ca_ES.UTF-8",
	LANG = "en_US.UTF-8"
   are supported and installed on your system.

TASK ERROR: command '/bin/nc -l -p 5900 -w 10 -c '/usr/bin/ssh -T -o BatchMode=yes -c blowfish-cbc 10.140.128.16 /usr/sbin/qm vncproxy 103 2>/dev/null failed: exit code 255

Aquest error m'ha passat al canviar les adreces IP de les màquines que formen part d'un cluster. El problema està que al canviar l'adreça IP el fitxer know_hosts de les connexions SSH entre màquines del cluster que fa l'usuari root no té aquestes noves adreces. La sol·lució es, des de la màquina física la que ens connectem al cluster::

$ sudo su
# ssh IP_NODE_DELCLUSTER

Veureu que no entra directament que us indica que la màquina és nova i si la voleu guardar a know_hosts. Un cop es diu que si ja podeu comprovar que funciona.

Waiting for quorum a un cluster

Cal tenir en compte que és treballa amb multicast. Consulteu l'article multicast i especialment com podeu depurar els paquets multicast amb tcpdump per veure si els nodes del cluster es comuniquen entre sí amb multicast:

$ sudo tcpdump -i vmbr0 ip multicast

Un problema que m'he trobat és que no s'envien els paquets multicast per totes les interfícies de xarxa, només s'envia per la interfície de xarxa on es va fer la instal·lació inicial de proxmox (vmbr0) i a més cal tenir en compte que els rangs de xarxa dels nodes en aquesta xarxa principal han de ser les mateixos. De fet lo important és la adreça IP que aparegui a fitxer:

/etc/hosts

del proxmox. A totes les màquines del node ha d'haver-hi una IP del mateix rang i aquesta IP ha de ser la que apareix a aquest fitxer. Si no és així es pot canviar el fitxer hosts i reiniciar la màquina.

Tingueu en compte també que al canviar les IP les connexions sense paraula de pas de l'usuari root a través de SSH entre màquines deixarà d'anar de forma automàtica. Cal actualitzar els fitxers know_hosts de l'usuari root de cada màquina. Es pot fer entrant entre les màquines per SSH amb les noves IPs al menys una vegada.

Apareixen nodes antics a un cluster

Si després d'eliminar una màquina d'un cluster encara us apareix a la interfície gràfica aleshores us cal borrar la carpeta:

/etc/pve/nodes/nomnode

cman_tool: Cannot open connection to cman, is it running ?

CMAN és el gestor del cluster.

No es pot tornar a afegir un node a Proxmox un cop eliminat

Proveu amb l'opció force:

$ sudo pvecm add -force 1 109.69.15.10

Sembla ser que la única solució es tornar a instal·lar proxmox al node i tornar a afegir-lo al cluster.

Canviar la IP de un node de proxmox

Si és canvia per la línia de comandes cal enrecordar-se de canviar també el fitxer:

/etc/hosts

NOTA: He tingut problemes amb el node que formava part dun cluster i no els he arreglat pas! Compte al canviar la IP

La consola de proxmox no funciona (console crash) on openjdk/Ubuntu

Consulteu:

Permision Denied: invalid csrf token

???. Se m'ha arreglat al tancar el navegador i tornar a entrar.

unable to copy ssh ID al afegir un node al cluster

Opció 1. Cluster fet malbé per haver quedat un node a mig afegir

En el meu cas donava aquest error al haver quedat un node a mig afegir. El node principal al no tenir quorum no permet modificar els fitxers de la carpeta /etc/pve. A la carpeta:

 /root/.ssh

Hi ha els següents fitxers:

# ls -la
total 20
drwxr-xr-x 2 root root 4096  1 jul 21:46 .
drwx------ 3 root root 4096  1 jul 21:09 ..
lrwxrwxrwx 1 root root   29  1 jul 21:09 authorized_keys -> /etc/pve/priv/authorized_keys
-rw------- 1 root root  791  1 jul 21:18 authorized_keys~
-rw------- 1 root root 1679  1 jul 21:09 id_rsa
-rw-r--r-- 1 root root  394  1 jul 21:09 id_rsa.pub

Fixeu-vos en el fitxer authorized_keys és un link a /etc/pve/priv/authorized_keys. Al mirar d'editar-lo per afegir la clau dona un error per que el sistema de fitxers /etc/pve està muntat en només lectura al no haver quorum. El que heu de fer és:

$ sudo pvecm expected 1

I ja podreu afegir el node al cluster.

Opció 2

Si us dona el següent error:

$ sudo pvecm add cluster1
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
78:67:dd:37:32:b1:82:26:ed:d6:0c:a3:a2:af:c5:85 root@proxmox02
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|             .   |
|      ... .. .o  |
|     E.oS*o..+...|
|    . ..=o= . o..|
|     + . o o     |
|    o . .        |
|   oo.           |
+-----------------+
unable to copy ssh ID

Observeu l'error tonto! En el nostre cas cluster1 és el nom del cluster i no pas el nom del "master" del cluster. Poseu un nom de màquina o la IP correcta i funcionarà:

$ sudo pvecm add 192.168.111.52

Vegeu també

Enllaços externs