Quantcast
Channel: Blog Virtualizacion
Viewing all articles
Browse latest Browse all 679

Linux: Guardar estado de procesos con CRIU

$
0
0

Linux: Guardar estado de procesos con CRIU

Si administráis servidores Linux, infraestructuras de Contenedores, ya sean Docker, Podman o LXC, creo que esta entrada os interesará. Hoy vamos a hablar de la herramienta CRIU.

CRIU o Checkpoint and Restore In Userspace, surge de un proyecto opensource de Virtuozzo (OpenVZ), que aunque no es de las comunidades más populares a nivel de virtualización, ha conseguido que la herramienta CRIU se ponga en la diana de otros proyectos más importantes, como Docker.

Se utiliza integrado en OpenVZ, que es una solución de virtualización como hemos comentado, sobre contenedores LXC/LXD, Docker, Podman…y ya está empaquetado en la mayoría de distribuciones importantes de Linux.

CRIU nos permite guardar el estado de uno o un grupo de procesos y luego reanudar el trabajo donde lo dejamos. Pero esto no es lo mejor, ya que incluso podemos reanudar ese estado, después de reiniciar el sistema o en otro servidor sin romper las conexiones de red ya establecidas. ¿Impresionante no?

FUNCIONES CRIU

CRIU se puede utilizar tanto en 32 bits, 64 bits o incluso en sistemas ARM. Dispone de muchas funciones para manejar procesos, entre las que destacan:

  • Como ya hemos hablado su función más destacable es la de manejar procesos y funciones comunes como:
    • Jerarquía
    • PID
    • Autenticadores de usuarios y grupos (UID, GID, SID, etc.)
    • Capacidades del sistema
    • Subprocesos
    • Estados de ejecución y detenido
  • Memoria de la aplicación:
    • Archivos asignados en memoria y memoria compartida
  • Podemos abrir archivos
  • Pipes y FIFOs:
    • Pipe: provee una interfaz entre dos procesos
    • FIFOs: es un fichero especial. Una tubería con nombre
  • Unix domain sockets:
    • Es un punto final de comunicaciones de datos para intercambiar datos entre procesos que se ejecutan en el mismo sistema operativo host
  • Network sockets:
    • Incluidos TCP sockets en el estado ESTABLISHED
  • System V IPC:
    • Mecanismos de comunicación entre procesos
  • Timers:
    • Nos permite agendar tareas de forma periódica de una forma similar a Cron
  • Signals:
    • Una señal es una forma limitada de comunicación entre procesos empleada en Unix y otros sistemas operativos compatibles con POSIX
  • Terminales
  • Llamadas del Kernel al sistema específico:
    • Inotify, Signalfd, Eventfdyepoll

Os dejo las URLs del proyecto CRIU…

URLS PROYECTO CRIU:

linux-guardar-estado-de-procesos-con-criu-1

INSTALAR CRIU EN CENTOS

CRIU está en la mayoría distribuciones como parte de los paquetes disponibles. Para instalarlo en Centos simplemente lo haremos de la siguiente forma:

[root@NGINX01 ~]# yum -y install criu

CRIU EN ACCIÓN: MANEJANDO PROCESO

Para ver el poder de CRIU vamos a hacerlo con un ejemplo muy simple. Lo vamos a probar sobre un proceso que consiste en un bucle que va sumando números. Crearemos un fichero con el siguiente contenido:

root@localhost:~# cat simple_loop.c                                             
#include <stdio.h>                                                              
#include <unistd.h>                                                             
                                                                                
int main()                                                                      
{                                                                               
    long long i = 0;                                                            
    while(1) {                                                                  
        printf("%lld\n", ++i);                                                  
        sleep(1);                                                               
    }                                                                           
    return 0;                                                                   
}

Lo compilamos:

root@localhost:~# gcc simple_loop.c

Nos genera un fichero ejecutable, que lanzaremos de la siguiente forma, y comenzará la cuenta del bucle:

root@localhost:~# ./a.out                                                       
1                                                                               
2                                                                               
3                                                                               
4                                                                               
5                                                                               
6

Sacamos el identificador del proceso:

root@localhost:~# pidof a.out                                                   
10015

Creamos un directorio para el punto de control o checkpoint:

root@localhost:~# mkdir checkpoint

Ejecutamos CRIU sobre el proceso:

root@localhost:~# criu dump -t 10015 -D checkpoint/ -j -v4

Se congelará el estado del proceso:

(00.019031) Closing image 14                                                    
(00.019053) Closing image 18                                                    
(00.019078) Closing image 8                                                     
(00.019096) Running post-dump scripts                                           
(00.019101) Unfreezing tasks into 2                                             
(00.019107)     Unseizing 10015 into 2                                           
(00.019242) Writing stats                                                       
(00.019276) Closing image 6                                                     
(00.019295) Dumping finished successfully

Para volver a descongelarlo, simplemente volvemos a ejecutar el siguiente comando:

root@localhost:~# criu restore -D checkpoint/ -j
7
8
9
10

Imaginaros la aplicación de esto sobre contenedores u otras tecnologías…súper interesante! Intentaré hacer entradas sobre ello…

¿Te ha gustado la entrada SÍGUENOS EN TWITTER?

La entrada Linux: Guardar estado de procesos con CRIU se publicó primero en Blog Virtualizacion.


Viewing all articles
Browse latest Browse all 679