[Postfix-es] Re: Fw: migrar base de mysql a hash

Simon J Mudd sjmudd en pobox.com
Sab Abr 23 17:39:13 CEST 2005


> Tengo un sistema con postfix 2.0.algo corriendo con mysql (todos 
> usuarios virtuales) y amavis con antivirus y spamassassin. Es infernal 
> la cantidad de spam que entra, casi todo destinado a usuarios 
> inexistentes (diccionario)

Deberias rechazar mensajes para destinos inexistentes. De esta manera 
evitas muchos problemas.

> Ya restringí los hard_errors a 3 y los soft_errors a 6, pero igual, 
> cada mail que entra es una consulta a la base de datos.

Cierto. Ademas Postfix hara varias consultas para cada mensaje y esto 
puede dar una carga significativa a tu servidor.

> La misma base de datos que usan los usuarios de dial up para entrar y 
> que sirve al pop3 y al imap. O sea que está cargadita. Entonces pensé 
> que si hiciera un proceso de cron donde una vez por hora o cada dos 
> horas se copiaran los dos campos necesarios (dirección de correo y 
> maildir) a un archivo de texto y después se hiciera postmap de ese 
> archivo, podría hacer una consulta hash en lugar de una mysql. Por lo 
> menos aliviaría a la base de datos, y creo que sería más rápido.

Creo que tienes 2 opciones:
- tener varios servidores de mysql (replicados) para poder reducir la 
carga.

- como surgieres hacer un "dump" periodico de los datos a un archivo que
   Postfix puede utilizar. Esta opcion tiene muchas ventajas ya que sera
   mas rapido (por ser un acceso directo al disco local)

> ¿tengo razón?

Si.

Lo que se suele hacer es copiar archivos de base de datos a uno o mas 
archivos en formato

<clave>	<resultado>

Esto dependera de cada "mapa" que vas a crear pero seguramente sabes ya el 
formato que tendran.

Posteriormente haces un postmap hash:/path/to/archivo_XXX
Y luego mv /path/to/archivo_XXX.db /path/to/ubicacion_final_XXX.db

De esta manera Postfix solo detecta el cambio en el ultimo momento cuando 
cambias la version anterior de /path/to/ubicacion_final_XXX.db a su 
version nueva.  En este momento los demonios de postfix cierran, y un 
proceso nuevo abre el archivo nuevo y continua como antes.

Debe ser facil para ti hacer una prueba como uno de tus queries a mysql y 
mirar como realizar el cambio de

.... mysql:/etc/postfix/mysql_algo.cf a
.... hash:/etc/postfix/algo

Tambien puedes comprobar tanto el resultado como el tiempo en ejecutarse 
cada query haciendo algo como:

$ time postmap -q clave_a_comprobar mysql:/etc/postfix/mysq_algo.cf [1] y
$ time postmap -q clave_a_comprobar hash:/etc/postfix/algo          [2]

Seria interesante que nos comentaras los resultados ya que aunque se lee 
que es mas rapido la gente no suele decir que el [1] tarda 100ms y el [2] 
10ms o sus valores correspondientes.

Simon


Más información sobre la lista de distribución Postfix-es