Quando se utiliza contas virtuais no Postfix usando
base de dados MySQL, por um lado facilitamos a
administração de sites com grande número de contas e
domínios e por outro aumentamos a utilização de recursos
nos servidores.
A cada e-mail enviado ou recebido, o Postfix realiza
diversas consultas no MySQL, dependendo da situação. Aqueles
que pararam para analisar isso provavelmente notaram que
diversas instâncias do cliente mysql foram abertas,
aumentando a utilização de memória.
Para evitar esse problema, há duas possibilidades:
1) Configurar bem as tabelas do MySQL, criando índices em
campos chaves, como "mailbox" e outros.
2) Voltar a utilizar tabelas estáticas ou gerar tabelas
estáticas regularmente, com base nas tabelas do MySQL.
3) Utilizar o serviço de proxymap do Postfix.
No primeiro caso, tudo depende de como você criou a sua
tabela. Se seguiu as recomendações de uma boa documentação,
provavelmente você já deve ter suas tabelas bastante otimizadas.
Por outro lado, caso decida criar scripts de geração de tabelas
estáticas ("estaticalização de tabelas dinâmicas"), saiba que
isso aumenta a chance de problemas e erros. Sugiro criar um
script que verifique erros em tabelas geradas antes de
substituir a tabela antiga.
O último ponto, o mais recomendado, exige uma configuração que
é simples. Basta substituir as entradas mysql:* no seu
main.cf por proxy:mysql:*
Exemplo:
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
vira:
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
Depois disso, basta executar um "postfix reload" e tudo deve funcionar.
Há, porém, possíveis problemas, que já adianto pra vocês: :)
a) Problemas de permissões nos arquivos lidos pelo proxymap, (ex: /etc/postfix/mysql_virtual_alias_maps.cf)
Correção sugerida:
# chgrp postfix /etc/postfix/mysql*
# chmod g+r /etc/postfix/mysql*
O grupo "postfix" utilizado aqui pode ser outro em seu sistema.
b) Proxymap não está autorizado a fazer a consulta "tal".
Basta adicionar no seu main.cf:
proxy_read_maps = $local_recipient_maps $mydestination
$virtual_alias_maps
$virtual_alias_domains $virtual_mailbox_maps
$virtual_mailbox_domains
$relay_recipient_maps $relay_domains $canonical_maps
$sender_canonical_maps
$recipient_canonical_maps $relocated_maps $transport_maps
$mynetworks
E no final dessas configurações você deverá colocar a
consulta que tenha provocado problemas - veja sempre o log -
(exemplo: "proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf")
ou a variável de configuração que ela representa
($virtual_alias_maps, que neste caso já vem autorizada por
padrão na opção proxy_read_maps).
O resultado é que o Postfix irá utilizar conexões já
abertas pelo proxymap para fazer as suas consultas,
economizando recursos em seu servidor.
Boa sorte!
Yves Junqueira
Nenhum comentário foi encontrado.