Manejo de proyectos en Solaris

En estos días tuve la tarea de configurar un servidor que corre Solaris 10 y tuve un requerimiento algo especial; tenia que dividir a varios usuarios y asignarlos a proyectos diferentes con privilegios diferentes.

opensolaris

Antes de empezar, voy a aclarar un poco los conceptos y demás. Solaris tiene un subsistema llamado SRM (Solaris Resource Manager) y aunque no es una funcionalidad nueva, es fundamental si es usada en conjunto con Zonas u otras tecnologías. Esta función esta algo olvidada, ya muy pocos administradores lo ponen en practica ya sea por desconocimiento o por pereza, sin embargo es importante saber que existe. El manejador de recursos se implemento hace años para solucionar algunos inconvenientes de asignación de recursos a aplicaciones individuales, como por ejemplo: limitar la asignación de tiempo en el procesador para X proceso, para X usuario.

Los sistemas Unix siempre han tenido la habilidad de responder a multitud de tareas de manera simultanea en la misma maquina desde tiempos ancestrales pero nunca tuvo la flexibilidad para manejar de manera fina algunos aspectos. ¿Que ocurre si nuestro proceso se sale de control y se consume los recursos de la maquina hasta dejarla sin servicio?

Para poder entender como poder aplicar estas reglas en nuestro sistema debemos diferenciar las tareas, proyectos y zonas. Las tareas son un conjunto de procesos como por ejemplo un servidor web; un conjunto de procesos y actividades para poder correr un servicio web. Los projectos son una coleccion de tareas y las zonas son un grupo de uno o más proyectos.

Ya teniendo lo anterior claro, podemos entonces deducir que la idea global del manejo de recursos es agrupar un conjunto de procesos y actividades e imponerles ciertos limites en el sistema.

Por lo general, ya venimos incluidos en un proyecto cuando ingresamos al sistema:

[arpunk@hax:~%] id -p
uid=101(arpunk) gid=10(staff) projid=10(group.staff)
[arpunk@hax:~%]

Si cambiara a superusuario en mi maquina, entro a trabajar en otro grupo asignado a root.

[arpunk@hax:~%] ps -af -o pid,user,zone,project,taskid,args
PID USER ZONE PROJECT TASKID COMMAND
647 arpunk global system 0
745 arpunk global group.staff 77 irssi
2266 arpunk global group.staff 77 ssh arpunk@void
2323 arpunk global group.staff 77 ps -af -o pid,user,zone,project,taskid,args
[arpunk@hax:~%]

Y ahora los procesos con su respectivo proyecto (y zona). Podemos dividir así muchas aplicaciones y servicios de nuestra infraestructura sin necesidad de restringir a todo el sistema, solo basta con crear un proyecto.

[arpunk@hax:~%] projadd -p 1000 proyecto.prueba
[arpunk@hax:~%] projmod -c “Esta es una prueba” proyecto.prueba

Y asignarlo a los usuarios.

# usermod -K project=proyecto.prueba arpunk
# projmod -K "task.max-lwps=(privileged,10,deny)" proyecto.prueba

Y no importa cuantos fork() bombs haga ni cuanto intente ahogar recursos con ejecuciones (LWP), ya estoy limitado.

Espero hayan entendido lo valioso del manejo de recursos en Solaris. Este ha sido un ejemplo muy básico de todas las funcionalidades que esto trae, ya que puedo tunear todos los aspectos de mi maquina para proyectos y tareas, e inclusive jugar con configuraciones mucho más poderosas con zonas.

Después con algo de tiempo explicare funciones más avanzadas.

Subir