(Cerca de oito anos atrás, migrei mais de 50.000 contas de usuário de um antigo servidor de e-mail (executando o uw-imapd) para um novo 'farm' de servidores que consiste em três servidores e executando o Cyrus. para criar um script de migração que faria o login no servidor antigo e copiasse os emails do novo servidor via IMAP uma conta de usuário por vez.Um servidor OpenLDAP + Perdition
estava na frente dessa coisa decidindo para onde um usuário deveria ser encaminhado (para antigo servidor ou para o novo servidor) .A operação foi feita on-line sem qualquer tempo de inatividade.Isso está indo off-topic, então eu vou continuar com a minha resposta.)
Uma palavra de aviso: o trabalho que você vai fazer pode ser um pouco tedioso e digitar uma resposta curta o suficiente para você também não é fácil. :-) Aqui estão alguns pontos para você considerar.
Você tem algum trabalho a fazer. Atualizar o Cyrus em si não é impossível, mas a divisão dos usuários de um servidor para vários servidores ao mesmo tempo requer planejamento. Apenas copiar tudo, do servidor antigo para o novo, não funciona, pois o formato BerkeleyDB / skiplist foi alterado no meio e os arquivos de dados antigos não são utilizáveis fora da caixa.
Quando se trata da lista de usuários / caixas de correio, é melhor usar a opção ctl_mboxlist -d
para despejar as informações de usuário / caixa de correio no servidor antigo em um arquivo de texto e ctl_mboxlist -u
para carregar o conteúdo no novo servidor. Este é o caso se você apenas atualizaria o Cyrus e ao mesmo tempo mudaria para um servidor mais poderoso, porém único. As caixas de correio podem ser copiadas com rsync
, seguidas pelo comando reconstruct -rfx user/*
no Cyrus.
Se você quiser fazer a divisão ao mesmo tempo, convém testar se o comando xfermailbox
em cyradm
atualmente permite mover as caixas de correio de um servidor para outro. Em caso afirmativo, você pode simplesmente criar um script que chame xfermailbox
10 000 vezes e mova suas contas de usuário para onde desejar.
Outra dica: Você provavelmente precisará do comando reconstruct -rfx user/someaccount
se descobrir que após a migração algum usuário não consegue encontrar as pastas / e-mails.
Tudo bem e dandy até isso, mas você já considerou o seguinte:
- Se você vai dividir os usuários entre vários servidores, você tem algo como
Perdition
ouCyrus Murder
cuidando de redirecionar logins POP / IMAP para corrigir o servidor de e-mail? - Se estiver dividindo, você tem o OpenLDAP ou algum outro gerenciamento centralizado de autenticação / usuário?
- Se estiver dividindo, você configurou seu Postfix ou qualquer servidor SMTP para descobrir onde a conta de usuário realmente está?
- Você tem problemas de desempenho atualmente? 10 000 contas de usuários não são muito e, a menos que você tenha realmente alguns motivos sérios para dividir as contas de usuários em vários servidores, reconsidere cuidadosamente isso. Um armazenamento centralizado de algum tipo + dois servidores semipoderosos configurados no modo de failover ativo / passivo pode ser mais inteligente e mais simples em termos de administração do sistema. É claro que ter vários servidores menores com discos locais pode ajudar a distribuir a carga de E / S, mas a Cyrus diz 'Obrigado' se você der RAM suficiente e a E / S não deve ser um problema real.
- Se o motivo de sua decisão de dividir a carga em vários servidores for devido a problemas de desempenho, verifique se o seu Cyrus está usando o BerkeleyDB ou o Skiplist para
mailboxes.db
etc. O BerkeleyDB sem umDB_CONFIG
bem ajustado pode facilmente matar o desempenho e / ou levar a deadlocks. Skiplist é mais livre de preocupações. Além disso, a implementação POP3 no Cyrus é muito entropia e se o seu servidor não tiver um gerador de números aleatórios baseado em hardware, os logins podem ser MUITO lentos semrngd
daemon ou Cyrus configurado para usar/dev/urandom
em vez de/dev/random
para aleatoriedade.
Espero que isso ajude você um pouco.