colas en zimbra (parte 1)

3 de septiembre de 2008

Este post aunque se llama "colas en zimbra" bien se podría llamar "colas en postfix" ya que postfix es el mta que utiliza zimbra.

Postfix tiene varias colas donde va guardando todo el correo que procesa y el correo que no ha podido procesar por cualquier motivo. Por regla general a cada concepto de cola en postfix se le asigna una carpeta fisica dentro del sistema de ficheros. En el caso de zimbra las colas se encuentran dentro de la carpeta "/opt/zimbra/postfix/spool". Si entramos por ejemplo dentro de la cola incoming podremos ver archivos los cuales cada uno corresponden a un mensaje de correo electrónico que esta entrando en este momento. Una vez el mensaje ha entrado desaparecerá de la cola. Lógicamente si no hay ninguno archivo es que no está entrando correo. Como veis hay un montón de colas en postfix y cada una tiene su función. Lógicamente todo este árbol de carpetas no hay que tocarlo para nada porque para eso están las utilidades de postfix.

Si tenemos una maquina dedicada al correo, es seguro que el 99% de la congestión que pueda tener es debido al procesamiento de los mensajes que entran y salen. Las colas más importantes que tiene postfix son las siguientes:

+ cola incoming: en esta cola están todos los nuevos mensajes que entran en postfix. Estos ficheros que se crean por cada mensaje los crea un servicio de postfix llamado cleanup. Este fichero tendrá de propietario postfix y permisos 0600 mientras se esté recibiendo y 0700 una vez se ha terminado de recibir.

+ cola active: desde esta cola se envían los mensajes a sus destinatarios. Esta es una de las colas más importantes ya que internamente hay mucha logica para implementarla. Desde esta cola se crearán todas las conexiones smtp necesarias (consultando los registros MX de los DNS) para los destinatarios. Aunque a esta cola le corresponda una carpeta, internamente en postfix se crean estructuras de memoria para su procesamiento. Las colas de incoming, hold o deferred no ocupan memoria en el sistema. Normalmente el análisis de los cuellos de botella se centran en esta cola.

+ cola hold: en esta cola van a parar indefinidamente los mensajes que el administrador quiere que no se procesen. Es posible configurar postfix para que mueva mensajes a esta cola de forma automática utilizando access.

+ cola deferred: en esta cola van a parar los mensajes que no se han podido enviar alguno de los destinatarios y por tanto postfix tiene que volver a reitentar el envió. Tanto las colas de incoming y deferred se miran periódicamente para ver si hay algún mensaje para enviar. Hay tres parámetros básicos en postfix para controlar cada cuanto se miran estas colas y que afectan al rendimiento de postfix: $queue_run_delay, $minimal_backoff_time y $maximal_backoff_time. El funcionamiento es el siguiente: cuando un mensaje llega este es procesado por el mta y enviado a la cola incoming. Por otro lado cuando se decide enviar un mensaje y postfix se tiene que poner en contacto con otros mta estos mensajes son enviados a la cola active. Si por cualquier motivo el mensaje no puede ser enviado a otro mta este pasará a la cola deferred hasta que pueda ser entregado más tarde o expire el tiempo de vida. El tiempo de vida de un mensaje en la cola deferred viene marcado por la variable $maximal_life_time. Si transcurrido este tiempo el mensaje no se pudo enviar este mensaje se devuelve al remitente pero solo en un tamaño concreto marcado por la variable $bunce_size_limit. Si el remitente ha enviado un mail del 50Mb no tiene sentido devolverle otra vez el mail de 50Mb.

El escaneo de la cola de deferred para los reintentos sigue un algoritmo un poco complicado pero que básicamente es algo así: la cola deferred se escanea cada $queue_run_delay en busca de mensaje para enviar. Cuando un mensaje está en esta cola se le pone una marca de tiempo T. Si a los T segundos se hace el envío y este no tiene éxito, el siguiente envío se hace a los 2T y así sucesivamente.

En la siguiente imagen es la más completa que he podido encontrar por Internet (google images) de la relación entre las colas y lo procesos de postfix:


En el próximo post explicaré los comandos para el manejo de las colas y unos apuntes de tunnig de postfix.

Más informacion:
+ http://www.postfix.org/QSHAPE_README.html
+ http://linux.die.net/man/1/postqueue

1 comentarios:

César Andrés dijo...

excelente artículo. Te agradezco esta inforamción. La necesitaba mucho.