wiki:Servicos/Cyrus/Aggregator

Version 15 (modified by viani, 3 years ago) (diff)

--

Cyrus IMAP Aggregator

O que é ?

É uma forma de você escalar horizontalmente o Cyrus IMAP entre vários servidores.
Para provedores com um número muito grandes de caixas o servidor IMAP se torna um componente muito crítico,
a falha de um servidor acaba afetando a milhares de usuários. A idéia do Aggregator é que você possa particionar
o problema distribuindo as caixas entre vários servidores.

Como funciona ?

Existem basicamente 3 tipos de servidores envolvidos:

Frontends - São os servidores em que os clientes IMAP/POP3 e MTAs(Mail transfer Agent ) se conectam.
Para os clientes eles funciona como se fosse um servidor imap/pop3/lmtp normal. Quando uma operação é disparada
ele verifica no MUPDATE em que Backend está localizada a caixa do usuário e dispara a operação neste Backend.
Se você move a caixa do usuário para um Backend diferente para o usuário é transparente já que o Frontend
sabe a nova localização da caixa do usuário através do MUPDATE.
Os Frontends funcionam de forma redundante.

Backends - São os servidores aonde fica localizado efetivamente a caixa do usuário, a diferença deste servidor para
um servidor IMAP Cyrus normal é que toda a operação efetuada nele é commitada no servidor MUPDATE.

Mupdate - É o servidor que coordena as operações do ambiente, ele funciona como um tipo Banco de Dados.
Ele é responsável em informar aos Frontends a localização da caixa do usuário e em coordenar as operações efetuadas
pelos Backends. Se o mupdate master está fora não é possível criar novas pastas , nem alterar as propriedades das mailboxes.
A entrega também fica comprometida, mas abaixo na documentação é citado como contornar esta limitação.

Como o Expresso atualmente se comporta com o ambiente configurado em Aggregation (Murder)

O Expresso funciona normalmente com o Cyrus Aggregator. A única adaptação necessária
é informar no /etc/imapd.conf os seguintes parâmetros:

.....
defaultserver:  backend1
defaultpartition: default
.....

Por enquanto no Expresso não é possível selecionar em que servidor IMAP
e em que partição você quer criar a caixa IMAP. Por isto estes dois parâmetros
devem ser informados. As caixas criadas pelo módulo Expresso Admin vão ser criadas
inicialmente neste servidor e partição, mas depois você pode movê-la entre qualquer
backend e partição do ambiente.

Como mover uma caixa entre os Backends

Basta usar o comando RENAME do IMAP.

cyradm --user admin frontend1
frontend1> rename user/joe user/joe backend2!default

Instalando e configurando um Frontend

.. Ainda não escrito ...

Instalando e configurando um Mupdate

.. Ainda não escrito ...

Instalando e configurando um Backend

.. Ainda não escrito ...

Acertando o postfix para fazer a entrega via lmtp em um Frontend

Usando o Murder o postfix passa a ter que entregar obrigatoriamente as mensagens via TCP/IP
para o lmtpproxyd. Com isto a configuração se altera um pouco da padrão.

Em modo Aggregator todas as entregas via lmtp devem ser necessariamente autenticadas.
Ou seja, o postfix deve se autenticar como lmtp_admin para realizar a entrega no Cyrus.

Configuração Passo a Passo:

Edite o /etc/postfix/main.cf e altere os parametros:

...............
mailbox_transport = lmtp:<frontend_server.domain>:lmtp
lmtp_sasl_auth_enable = yes
lmtp_sasl_password_maps=hash:/etc/postfix/lmtp_passwd
lmtp_sasl_security_options = noanonymous

virtual_transport =  lmtp:<frontend_server.domain>:lmtp
.................

O arquivo /etc/postfix/lmtp_passwd:

<frontend_server.domain>  <lmtp_admin>:<senha>
<frontend2_server.domain>  <lmtp_admin>:<senha>
<frontend3_server.domain>  <lmtp_admin>:<senha>

Sendo que o ltmp_admin é o mesmo configurado no parametro lmtp_admins: do /etc/imapd.conf.
Após isto:

postmap /etc/postfix/lmtp_passwd
chown postfix:postfic /etc/postfix/lmtp_passwd
chmod o-rwx /etc/postfix/lmtp_passwd*
postfix reload

Como otimizar a entrega LMTP para usar o Mupdate local e não o Mupdate Master

Por padrão o lmtpproxyd utiliza para consultar aonde devem ser entregues a mensagem o mupdate_server: informado no arquivo
/etc/imapd.conf ou seja se você tem um número muito grande de entregas você acaba sobrecarregando o MUPDATE MASTER com as solicitações.

Uma maneira simples de resolver este problema é fazer o lmtpproxyd do Frontend usar o próprio mupdate para consulta ao invés de usar o mupdate master. A configuração é realizada da seguinte forma:

Copie o /etc/imapd.conf como um arquivo /etc/imapd-local.conf'

  cp /etc/imapd.conf /etc/imapd-local.conf

Edite o arquivo /etc/imapd-local.conf e altere apenas o mupdate_server

....
mupdate_server: 127.0.0.1
....

Depois edite o /etc/cyrus.conf e mude o serviço lmtpptoxyd para usar este arquivo ao invés do default.

SERVICES {
 ..............
  lmtp    cmd="lmtpproxyd -C /etc/imapd-local-lmtpd.conf" listen="lmtp" prefork=1
 ...............
}

Outra vantagem desta abordagem é que mesmo que o mupdate master falhe todo sistema continua entregando as mensagens normalmente.
Ou seja, os clientes continuam acessando as suas caixas IMAP, e a entrega continua normal mesmo com o mupdate master fora.