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:
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:
1 |
[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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 |
root@localhost:~# gcc simple_loop.c |
Nos genera un fichero ejecutable, que lanzaremos de la siguiente forma, y comenzará la cuenta del bucle:
1 2 3 4 5 6 7 |
root@localhost:~# ./a.out 1 2 3 4 5 6 |
Sacamos el identificador del proceso:
1 2 |
root@localhost:~# pidof a.out 10015 |
Creamos un directorio para el punto de control o checkpoint:
1 |
root@localhost:~# mkdir checkpoint |
Ejecutamos CRIU sobre el proceso:
1 |
root@localhost:~# criu dump -t 10015 -D checkpoint/ -j -v4 |
Se congelará el estado del proceso:
1 2 3 4 5 6 7 8 9 |
(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:
1 2 3 4 5 |
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?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?