Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Optimización y procedimientos de emergencia de Cyrus IMAP

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Este documento requiere haber configurado exitosamente Cyrus IMAP como se muestra en el documento titulado «Configuración de Cyrus IMAP con soporte SSL/TLS».

Optimización.

Herramienta squatter.

Los índices SQUAT consisten en archivos índice unificados de todas las cabeceras y cuerpos de mensaje de un buzón determinado. Su presencia reduce considerablemente los tiempos de búsqueda IMAP de los buzones mejorando sensiblemente el desempeño. Se recomienda para buzones muy activos o bien aquellos que almacenan grandes cantidades de correo. La herramienta squatter que incluye Cyrus IMAP permite crear nuevos índices SQUAT para uno o más buzones.

La ausencia de índices SQUAT en un buzón muy activo o muy grande generará entradas en los registros de sistema similares a los siguientes:

Jan 18 03:21:16 servidor imaps[37342]: SQUAT failed to open index file
Jan 18 03:21:16 servidor imaps[37342]: SQUAT failed

Cada vez que se ejecuta squatter se generará siempre un nuevo índice SQUAT que incluirá todas las cabeceras y cuerpos de todos los mensajes. Cabe señalar que carece de soprot epara generar índices incrementales. Todos los mensajes nuevos que llegan al buzón después de generarse un índice SQUAT estarán excluidos de éste hasta la siguiente ocasión que se vuelva a ejecutar squatter. Estos mensajes excluidos del índice SQUAT podrán ser buscados sin problema, pero de manera más lenta. Es por lo anterior que se recomienda ejecutar periódicamente squatter, sobre todo con buzones muy activos y de gran tamaño.

Para configurar la ejecución periódica de squatter sólo es necesario añadir dos tareas. Una tarea que ejecute squatter —con baja prioridad— cada cierta cantidad de minutos sobre aquellos buzones cuyo índice SQUAT sea más viejo que el índice del buzón y otra tarea que regenere los índices diariamente a una hora que tenga poco uso sel servicio de correo.

Basado sobre lo anterior, edite el archivo /etc/cyrus.conf:

vi /etc/cyrus.conf

Añada a la sección de eventos las siguiente líneas resaltadas:

EVENTS {
  # this is required
  checkpoint    cmd="ctl_cyrusdb -c" period=30

  # this is only necessary if using duplicate delivery suppression,
  # Sieve or NNTP
  delprune      cmd="cyr_expire -E 3" at=0400

  # this is only necessary if caching TLS sessions
  tlsprune      cmd="tls_prune" at=0400

  # Regenerar cada 120 minutos de manera descendente todos los índices de 
  # todos los buzones, excepto los de aquellos cuyo archivo índice es más
  # viejo que el índice SQUAT. Lo anterior usando baja prioridad de recursos
  # de sistema
  squatterUpdate cmd="ionice -c 3 nice -n 19 squatter -s -r *" period=120

  # Regenerar de manera descendente todos los índices diario a las 5 AM
  squatterFull cmd="squatter -r *" at=0500
}

Guarde los cambios y salga del editor de texto.

Ejecute lo siguiente para generar un enlace simbólico dentro de /usr/lib/cyrus-imapd/ que apunte hacia /usr/bin/ionice:

ln -s /usr/bin/ionice /usr/lib/cyrus-imapd/

Reinicie el servicio cyrus-impad para que surtan efecto los cambios:

service cyrus-imapd restart

Purgar automáticamente los buzones de papeleras y correo chatarra.

Edite el archivo /etc/cyrus.conf:

vi /etc/cyrus.conf

Añada a la sección de eventos las siguiente líneas resaltadas:

EVENTS {
  # this is required
  checkpoint    cmd="ctl_cyrusdb -c" period=30

  # this is only necessary if using duplicate delivery suppression,
  # Sieve or NNTP
  delprune      cmd="cyr_expire -E 3" at=0400

  # this is only necessary if caching TLS sessions
  tlsprune      cmd="tls_prune" at=0400

  # Regenerar cada 120 minutos de manera descendente todos los índices de 
  # todos los buzones, excepto los de aquellos cuyo archivo índice es más
  # viejo que el índice SQUAT. Lo anterior usando baja prioridad de recursos
  # de sistema
  squatterUpdate cmd="ionice -c 3 nice -n 19 squatter -s -r *" period=120

  # Regenerar de manera descendente todos los índices diario a las 5:00 AM
  squatterFull cmd="squatter -r *" at=0500

  # Purgar automáticamente todos los buzones de papeleras del correo anterior
  # a 14 días, todos los días a las 2:00 AM.
  purgetrash cmd="ipurge -d 14 -f user/%/Trash" at=0200

  # Purgar automáticamente todos los buzones de Spam del correo anterior a 14
  # días, todos los días a las 3:00 AM.
  purgejunk cmd="ipurge -d 14 -f user/%/Junk" at=0300

}

Reinicie el servicio cyrus-impad para que surtan efecto los cambios:

service cyrus-imapd restart

Procedimientos de emergencia.

Reparar bases de datos de Cyrus IMAP.

Cyrus IMAP utiliza bases de datos para su funcionamiento. Un apagado incorrecto del sistema, falla del suministro de energía o bien actualizar de la versión 2.3 a la 2.4 o de la 2.4 a la 2.5 puede ocasionar se corrompan éstas. En el caso de que ésto ocurra, puede apagar el servicio, borrar tranquilamente los archivos /var/lib/imap/tls_sessions.db, /var/lib/imap/deliver.db y el contenido de /var/lib/imap/db/ e iniciar de nuevo el servicio ejecutando lo siguiente:

service cyrus-imapd stop
rm -f /var/lib/imap/tls_sessions.db*
rm -f /var/lib/imap/deliver.db*
rm -f /var/lib/imap/db/*
service cyrus-imapd start

Reparar buzones.

Es posible reconstruir fácilmente los buzones de un usuario en particular si éstos se dañaron debido a la pérdida de datos ocasionada por un apagado incorrecto o el borrado accidental de archivos.

Cambie al usuario cyrus ejecutando lo siguiente:

su -l cyrus -s /bin/bash

Ejecute lo siguiente asumiendo un caso hipotético donde se requiere reparar de manera descendente todos los buzones del usuario fulano:

/usr/lib/cyrus-imapd/reconstruct -r user/fulano

Actualizar versión.

Actualizar de una versión 2.3.x a otra 2.3.x o bien de una 2.4.x a otra 2.4.x o bien de una 2.5.x a otra 2.5.x debe ser transparente y sin necesidad de realizar procedimiento alguno adicional.

Si va a actualizar Cyrus-IMAP de la versión 2.3 a 2.4 o 2.5 o bien de la versión 2.4 a 2.5, es importante señalar que los formatos de las bases de datos cambian entre cada versión. Siga el siguiente procedimiento para evitar problemas.

Detenga el servicio antes de actualizar de versión:

service cyrus-imapd stop

Actualice los paquetes correspondientes a Cyrus-IMAP de la forma que corresponda a su sistema operativo o método de instalación.

Cambie al usuarios cyrus:

su -l cyrus -s /bin/bash

Nota.

Si actualiza desde las versión 2.3 o 2.4 a la versión 2.5, ésta utiliza última un nuevo formato optimizado para las bases de datos denominado twoskip, el cual reemplza al formato skiplist y berkely. Ejecute lo siguiente sólo si va a actualizar a la versión 2.5 desde las versiones 2.3 o 2.4:

/usr/lib/cyrus-imapd/cvt_cyrusdb \
    /var/lib/imap/annotations.db berkeley \
    /var/lib/imap/annotations.db twoskip

/usr/lib/cyrus-imapd/cvt_cyrusdb \
    /var/lib/imap/deliver.db berkeley \
    /var/lib/imap/deliver.db twoskip

/usr/lib/cyrus-imapd/cvt_cyrusdb \
    /var/lib/imap/mailboxes.db berkeley \
    /var/lib/imap/mailboxes.db twoskip

/usr/lib/cyrus-imapd/cvt_cyrusdb \
    /var/lib/imap/statuscache.db berkeley \
    /var/lib/imap/statuscache.db twoskip

/usr/lib/cyrus-imapd/cvt_cyrusdb \
    /var/lib/imap/tls_sessions.db berkeley \
    /var/lib/imap/tls_sessions.db twoskip/span>

Convierta el resto de las bases de datos de Cyrus-IMAP al formato oficial más reciente:

/usr/lib/cyrus-imapd/cvt_cyrusdb_all

Reconstruya todas las demás bases de datos correspondientes a los buzones ejecutando lo siguiente:

/usr/lib/cyrus-imapd/reconstruct -V max

Repare las inconsistencias todas las bases de datos correspondientes a las cuotas de buzones ejecutando lo siguiente:

/usr/lib/cyrus-imapd/quota -f

Inicie de nuevo el servicio.

service cyrus-imapd start

El servicio debe operar normalmente.

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 22/08/2016, 21:09|Hits: 2,248 Ver la versión para imprimir