# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Instalar una versión específica de Parallels Virtuozzo Containers


VirtuozzoEl otro día se publicó una KB de Parallels sobre algo que llevaba tiempo intentando poder hacer. Cuando te bajas el instalador de Parallels Virtuozzo Containers para Linux, al comenzar la instalación siempre te fuerza a instalar la última versión disponible. En caso de estar obligado a instalar una versión específica, podemos hacerlo siguiendo estos pasos:

Lo primero es bajar el instalador como lo haríamos normalmente:

# wget http://download.parallels.com/pvc/47/lin/vzinstall-linux-x86_64.bin
# chmod a+x vzinstall-linux-x86_64.bin

Una vez descargado, con el parámetro ‘list‘ podemos ver las versiones y arquitecturas disponibles para la instalación:

# ./vzinstall-linux-x86_64.bin list
Downloading index files...
Templates set: (Default set)
Version  Platform  Architecture  Download size
4.7.0-94 Linux     i386          544MB
4.7.0-94 Linux     x86_64        789MB
4.6.0-187Linux     i386          607MB
4.6.0-187Linux     x86_64        782MB
4.0.0-448Linux     i386          848MB
4.0.0-448Linux     ia64          940MB
4.0.0-448Linux     x86_64        1.0GB
4.0      w2k3      i386          41MB
4.0      w2k3      ia64          60MB
4.0      w2k3      x86_64        48MB

Ahora solo queda elegir la versión, plataforma y arquitectura para nuestra instalación. Si quisieramos instalar la versión 4.6.0-187 para 64 bits Linux:

# ./vzinstall-linux-x86_64.bin install --archs x86_64 --dist-ver 4.6.0-187 --platforms Linux

Virtuozzo Containers: plantilla de CentOS 6 OS disponible


VirtuozzoYa está disponible la plantilla EZ del sistema operativo CentOS 6 para sistemas de virtualización Virtuozzo Containers. La plantilla es compatible tanto para Virtuozzo Containers for Linux 4.6 como Virtuozzo Containers for Linux 4.0.

La plantilla está disponible tanto para 32 como 64 bits a través de los siguientes rpm:

centos-6-x86-ez-4.0.0-2.noarch.rpm
centos-6-x86_64-ez-4.0.0-2.noarch.rpm

Y las aplicaciones disponibles son las siguientes:

32-bit:

cyrus-imap-centos-6-x86-ez-4.0.0-1.noarch.rpm
devel-centos-6-x86-ez-4.0.0-1.noarch.rpm
jre-centos-6-x86-ez-4.0.0-1.noarch.rpm
jsdk-centos-6-x86-ez-4.0.0-1.noarch.rpm
mailman-centos-6-x86-ez-4.0.0-1.noarch.rpm
mod_perl-centos-6-x86-ez-4.0.0-1.noarch.rpm
mod_ssl-centos-6-x86-ez-4.0.0-1.noarch.rpm
mysql-centos-6-x86-ez-4.0.0-1.noarch.rpm
php-centos-6-x86-ez-4.0.0-1.noarch.rpm
postgresql-centos-6-x86-ez-4.0.0-1.noarch.rpm
spamassassin-centos-6-x86-ez-4.0.0-1.noarch.rpm
tomcat-centos-6-x86-ez-4.0.0-1.noarch.rpm
vsftpd-centos-6-x86-ez-4.0.0-1.noarch.rpm
webalizer-centos-6-x86-ez-4.0.0-1.noarch.rpm

64-bit:

cyrus-imap-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
devel-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
jre-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
jsdk-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
mailman-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
mod_perl-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
mod_ssl-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
mysql-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
php-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
postgresql-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
spamassassin-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
tomcat-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
vsftpd-centos-6-x86_64-ez-4.0.0-1.noarch.rpm
webalizer-centos-6-x86_64-ez-4.0.0-1.noarch.rpm

Si no sabéis instalar plantillas de sistemas operativos o aplicaciones en Virtuozzo revisad este otro artículo: Instalar plantillas en Virtuozzo.

OpenVZ & Virtuozzo: activar noatime para un contenedor


El otro día escribí un artículo en el que se explicaban las diferencias entre atime, noatime y relatime, podéis leerlo si queréis saber las diferencias entre cada una de estos atributos asignables a los sistemas de ficheros.

En esta entrada vamos a ver la forma correcta de modificar este atributo a una máquina virtual o contenedor en los sistemas de virtualización Virtuozzo y OpenVZ. En lugar de asignar los atributos a nivel de /etc/fstab debemos hacerlo mediante el comando

vzctl set

. En el siguiente ejemplo asignamos el atributo noatime al contenedor con ID 150, lo haremos en el nodo hardware:

# vzctl set 150 --noatime yes --save
Setting noatime mount flag for Container
Saved parameters for Container 150

Una vez realizado, podemos acceder a la máquina virtual y verificar que el cambio se ha realizado correctamente:

# mount
/dev/vzfs on / type vzfs (rw,noatime)

Backups en Virtuozzo 4.6 con vzabackup / vzarestore


Virtuozzovzabackup y vzarestore son las utilidades designadas a la gestión de copias de seguridad tanto para nodos Hardware y máquinas virtuales Virtuozzo.

vzabackup

vzabackup permite hacer copia de seguridad tanto del propio nodo Hardware como de uno, varios o todos los contenedores del mismo. También permite hacer backups de nodos remotos. A continuación podéis ver todas las opciones disponibles:

vzabackup [BACKUP OPTIONS...] NODE1 ... [CT OPTIONS...]

[BACKUP OPTIONS]
-F, -I, --Tfull
	Create a full backup.
-i, --Tinc
	Make an incremental backup or, if no full backups are available, a full backup.
--Tdiff
	Make a differential backup or, if no full backups are available, a full backup
-o,--rm-old
	Create a backup and then remove the oldest backups.
-d,--rm-tag
	Create a backup and then remove the backup with the
	specified backupID. You can learn the backup IDs of the
-J
	Do backing up nodes simultaneously if more than one source node specified.
--force
	Don't stop on errors during backup of Container. Should be used when more than
	one Container's specified to backup.
--view-folder
	 Show current backup storage configuration.
--set-folder-creds [USER[:PASSWORD]]
	 Set backup storage login credentials.
--backup-folder-path PATH
	Path to a custom backup storage location.
--backup-folder-login USER
	Username for a custom backup storage on a samba share.
--backup-folder-passwd PASSWORD
	Password for a custom backup storage on a samba share.
--set-folder
	Use --backup-folder-* options values to change backup storage configuration.
-D DESCRIPTION
	Set backup description.
-C
	Set compression level in range from 0 to 3.
--storage [USER[:PASSWD]]@ADDRESS
	Set address and credentials for storage server, where backup is stored.
NODE
	NODE parameter specifies the node to be backed up.

	 Node should be specified in format: [USER[:PASSWD]]@ADDRESS.

[CT OPTIONS]
-e
	List of Containers to backing up. Back up all the Containers if omitted.
-x
	List of Containers to skip. Do not skip any Containers if omitted.
--include-files
	Paths(files) to include in backups.
--exclude-files
	Paths(files) to exclude from backups.

Vamos a hacer un ejemplo práctico en el que queremos hacer una copia de seguridad de todos los contenedores del nodo Hardware local en la ruta /backup (en este caso una unidad montada por NFS):

# vzabackup --backup-folder-path /backup -i localhost

Con -i indicamos que queremos hacer backups incrementales y con “localhost” que son para el nodo local. Si quisieramos hacerlo en un storage remoto y de un nodo remoto sería así:

# vzabackup  --storage root:password@192.168.0.100 root:password_remoto@192.168.0.111

Si quisieramos hacerlo únicamente del contenedor 101:

# vzabackup --backup-folder-path /backup -i localhost -e 101

El resto es jugar con las opciones, la compresión, el tipo de backup, etc. A la hora de hacer backups de servidores remotos hay que asegurarse que la conectividad SSH es satisfactoria y que pueden comunicarse mediante llave SSH.

vzarestore

Lo primero que debemos saber de vzarestore es que permite mostrar un listado de los backups disponibles en el nodo seleccionado. Si quisieramos ver los backups disponibles en el nodo local y en la ruta /backup:

# vzarestore --list --backup-folder-path /backup
Show existing backups...
CTID    Title                   Creation date/time     Type Size
2719275 vps1                2011-04-15T111346+0002 full 213.19 Mb
305470  vps2                2011-04-15T110646+0002 full 262.13 Mb
3574391 vps3               2011-04-15T110041+0002 full 245.63 Mb
5195637 vps4               2011-04-15T111616+0002 full 710.83 Mb
8426989 vps5               2011-04-15T113722+0002 full 291.22 Mb

Para ver los backups en nodos remotos utilizaríamos el parámetro –storage:

# vzarestore --list --storage root:password_remoto@192.168.0.110

Bien, para restaurar un backup únicamente tendríamos que seleccionar su ID (CTID) y en caso de estar en una ubicación remota especificarla:

Remoto:

# vzarestore 101 --storage root:password_remoto@192.168.200.200

Local:

# vzarestore 101

En caso de contar con backups incrementales, podríamos especificar el punto de restauración con el parámetro “-b” seguido del identificador del backup (no el del contenedor). A continuación la ayuda del comando:

vzarestore is the utility to restore Container's which were backed up by means
of vzbackup. Also it can be used to remove, listing backups
and browsing contents of backups.

vzarestore [CTID[:New CTID] | -e  | -x ] [RESTORE OPTIONS] [STORAGE SERVER]
vzarestore -r, --remove  [STORAGE SERVER]
vzarestore -l,--list [LIST OPTIONS...] [STORAGE SERVER]
vzarestore --browse backupID [BROWSE OPTIONS...] [STORAGE SERVER]
vzarestore --print-ve-config BackupID [STORAGE SERVER]
vzarestore -h,--help

RESTORE OPTIONS:
-B
	Treat parameters for -e and -x options as backup ID's.
--force
	Don't stop on errors during restore of Container.
--files
	Separate files to restore, FILE is the full path to the file.
--skip-ve-config
	Do not restore Container config.
-b backupID
	Backup ID to restore files, if omitted then last backup will used.
--skip-locked
	Don't stop on errors during restore of locked files.

LIST OPTIONS
-f,--full
	Show full information (this option can be used only with --list).
--latest
	Show latest backups only (this option can be used only with --list).
-e
	List of Container's to show.
-B
	Treat parameters for -e option as backup ID's.

BROWSE OPTIONS
-d,--dir DIR
	Set the paths to the folder whose contents is to be shown.

STORAGE SERVER
--storage [USER[:PASSW]]@ADDRESS
	Set address and credentials to storage server.
	When this argument is omitted then local node will be used as storage server.
--backup-folder-path PATH
	Path to a custom backup storage location.

Virtuozzo: Averiguar a que contenedor pertenece un proceso


Dentro de un nodo físico Virtuozzo, si ejecutamos un top podemos ver los procesos que más CPU y memoria están consumiendo, pero no podemos averiguar a simple vista a que máquina virtual pertenece. Para averiguarlo tenemos dos opciones.

La primera es sustituir el uso de top por vztop. Se trata de una versión de top modificada por Virtuozzo a través de la cual aparece una nueva columna que muestra el ID de la máquina virtual.

$ vztop

vztop - 16:59:44 up 72 days,  5:11,  1 user,  load average: 2.04, 2.60, 2.76
Tasks: 528 total,   1 running, 522 sleeping,   0 stopped,   5 zombie
Cpu(s): 19.6% us,  7.4% sy,  0.2% ni, 62.2% id,  9.9% wa,  0.0% hi,  0.6% si
Mem:   4038416k total,  3948496k used,    89920k free,   173288k buffers
Swap:  4192956k total,      160k used,  4192796k free,  1701956k cached

 CTID   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  104 20875 nobody    15   0 41748  32m 1508 S   11  0.8   0:00.17 httpd
  104 11085 nobody    15   0 41904  33m 1564 S   10  0.8   0:01.53 httpd
  104 20899 nobody    15   0 41748  32m 1508 S   10  0.8   0:00.09 httpd
  104 18757 nobody    15   0 42016  33m 1556 S    8  0.8   0:00.64 httpd
  104 21077 527       18   0     0    0    0 Z    8  0.0   0:00.04 php
  104 21079 527       18   0     0    0    0 Z    8  0.0   0:00.04 php
  104 18752 nobody    15   0 41632  32m 1536 S    6  0.8   0:00.50 httpd
  104 19390 nobody    15   0 41748  32m 1532 S    6  0.8   0:00.44 httpd
  104 20884 nobody    15   0 41932  33m 1600 S    6  0.8   0:00.11 httpd

La otra opción es utilizar otro comando propio de Virtuozzo,

vzpid

. Su uso es sencillo, hay que pasar como parámetro el PID y nos dirá el contenedor/máquina virtual al que pertenece:

# vzpid 20845
Pid	VEID	Name
20845	109	httpd

109 es el ID de la máquina virtual, ejecutando un

vzlist

veremos el hostname y más información sobre la misma:

# vzlist 109
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
       109        90 running   192.168.0.155       vps1.test.com

Activar Quotas en VPS Virtuozzo


Vamos a seguir los pasos descritos en la documentación de cPanel sobre la activación de quotas en una máquina virtual Virtuozzo.

Lo primero que tenemos que hacer es activar las Quotas a nivel de Virtuozzo/Máquina virtual. Este es el primer nivel disponible, el cual permite asignar un espacio e inodos a un contenedor VPS. Para verificar si están activadas a nivel de contenedor, ejecutamos el siguiente comando:

# vzquota show ID_de_contenedor

Si tenemos activadas las Quotas, debería aparecer una información similar a:

   resource          usage       softlimit      hardlimit    grace
  1k-blocks        2900544        10485760       10485760
     inodes         146576          600000         620000    

Los valores de espacio en disco e inodos se definen en el fichero de configuración de la máquina virtual (ve.conf):

DISKINODES="600000:620000"
DISKSPACE="10485760:10485760"

Se pueden modificar a tiempo real:

# vzctl set 101 --diskspace 1000000:1100000 --save
# vzctl set 101 --diskinodes 90000:91000 --save

Las Quotas de segundo nivel las define el parámetro QUOTAUGIDLIMIT del fichero de configuración ve.conf, por defecto su valor es desactivado (0). Si lo activamos permitimos que se calculen las Quotas dentro de la máquina virtual por usuario y grupo.

Si la ejecución del siguiente comando es igual a 0 significa que no están activadas, si devuelve un valor distinto a 0 están activas (CT_ID es el ID de contenedor):

grep -i QUOTAUGIDLIMIT /etc/sysconfig/vz-scripts/CT_ID.conf

Cambiando este valor y reiniciando la máquina virtual ya las tendremos activadas, el número configurado indicará el límite de número de propietarios de fichero en el VPS. A tiempo real (también requiere reinicio se puede modificar también.

# zctl set 101 --quotaugidlimit 50 --save

Una vez realizado esto, si utilizamos cPanel/WHM únicamente tendríamos que inicializar las Quotas desde la interfaz WHM, sección “Initial Quota Setup“.

Arreglar inconsistencias y fallos en VZFS (máquina virtual Virtuozzo)


El otro día, tras la migración de una máquina virtual en modo online (sin parada de servicio) me encontré con el problema de que ciertos ficheros (realmente son enlaces simbólicos a la plantilla del sistema operativo que utiliza el VPS) estaban corruptos, por ejemplo, en la ruta /var/empty, sshd aparecía del siguiente modo:

?--------- ? ? ? ? ? sshd

Esto provocaba que el servicio SSH no levantara. Para solventar este tipo de problemas, Virtuozzo ofrece una herramienta que revisa todos los ficheros/enlaces simbólicos de la máquina virtual contra los de su plantilla, en caso de que no sean correctos los restablece. Efectivamente así fue, ejecutando el siguiente comando todos los enlaces fueron regenerados correctamente:

# vzfsutil --call=move --oall=do -t /vz/template /vz/private/$VEID

La utilidad se ejecuta con el comando vzfsutil, le indicamos la ruta en la que se encuentran en primera instancia las plantillas (templates) y después la zona privada de la máquina virtual (cambiaríamos $VEID por el id de la máquina virtual). El parámetro

--call

sirve para corregir todos los errores que la ejecución de la herramienta encuentre, y le especificamos que mueva “move” los ficheros con inconsistencias a la ruta

$VE_PRIVATE/lost_files

, podríamos decirle que los borre directamente o que únicamente nos informe y no haga nada.

Os recomiendo, en caso de encontrar este problema revisar bien la documentación de vzfsutil aquí.

Migración de un VPS Virtuozzo sin parada de servicio


Uno de los principios básicos de la virtualización es la flexibilidad a la hora de asignar recursos a las máquinas virtuales y por supuesto la de poder mover los VPS entre nodos físicos con el menor tiempo de parada posible, y a ser posible nulo.

En Virtuozzo, la utilidad para realizar migraciones es vzmigrate, a través de la cual podemos migrar un contenedor entre dos máquinas físicas de forma transparente para el usuario final.

A continuación podéis ver como sería para hacer una migración entre dos nodos físicos sin parada de servicio, os recomiendo revisar la documentación de Virtuozzo, en esta página encontraréis toda la información sobre esta utilidad.

En el siguiente ejemplo utilizamos el parámetro –online para indicar que no habrá parada de servicio en la migración, –require-realtime sirve para indicar que la principal cantidad de memoria del contenedor se transfiere al nodo de destino antes de volcar y guardar la imagen del VPS en un fichero. Esto permite lograr la menor cantidad de pérdida de servicio. En mi experiencia, para máquinas virtuales de alrededor de 3GB la pérdida de servicio ha sido de apenas 5 segundos, y para máquinas virtuales de unos 22GB de un minuto aproximadamente. Con los parámetros –new-private y –new-root podemos modificar la ruta en la que se almacenará la máquina virtual. Si queremos también podemos modificar el ID del contenedor con el parámetro –new-id.

A continuación el ejemplo, migramos sin parada de servicio la máquina virtual con ID 126, cambiando las rutas en las que se almacenará en el nodo de destino. El nodo de destino es el host nodo2.virtuozzo.com. El comando lo ejecutaríamos en el nodo en el que se encuentra actualmente el contenedor. Debe haber conectividad ssh entre ambas máquinas físicas:

# vzmigrate --online --require-realtime --new-private=/virtuozzo/private/126 --new-root=/virtuozzo/root/126 nodo2.virtuozzo.com 126