Replicando beanstalkd para alta disponibilidade

14

Título diz tudo.

Alguém sabe de uma maneira de replicar o beanstalkd de forma que, se um servidor de pé de feijão cair, outros escravos poderiam assumir o controle?

Aqui está uma abordagem que eu pensei: Eu poderia fazer com que o beanstalk escrevesse seu log binário (com o -b) para um local compartilhado e, de alguma forma, um servidor de secundário / de backup iniciasse beanstalkd se o primário falhar.

Deve haver uma maneira melhor, no entanto.

    
por Josh Nankin 21.02.2012 / 20:23

1 resposta

4

Como está gravando em disco via binlog, eu acho que você poderia fazer algo parecido com o que os administradores do MySQL normalmente fazem: pulsação com DRBD ( exemplo aqui.

A última vez que tentei usar o heartbeat, ele não suportou a verificação não-multicast entre nós, o que significa que era mais ou menos impossível executar na infraestrutura de nuvem / VPS (AWS, Linode, Slicehost, etc). Na verdade, a maioria dos serviços de cluster usa multicast. Isso pode não ser mais o caso, mas é algo em que se deve estar ciente. Você pode usar keepalived para fornecer failover baseado em ip, que também suporta apenas multicast, mas tem um patch disponível via Willy Tarreau (autor de HAProxy ) para adicionar suporte unicast . Eu testei isso pessoalmente em um par de servidores Linode VPS e o keepalived é capaz de fazer failover de um endereço IP compartilhado no caso de falha do servidor mestre.

Uma coisa que você pode fazer, que é provavelmente menos ideal, é gravar trabalhos em um número de servidores beanstalkd (também conhecido como particionamento). Se um deles cair, faça com que seu aplicativo detecte isso e grave em outra (s) instância (s). Seus funcionários terão que pesquisar inteligentemente cada uma das instâncias do beanstalkd e ser capazes de ignorar instâncias mortas. Como você está fazendo binlogging, fazer backup de uma instância deve ser tão fácil quanto reiniciá-la, e o app / workers detectará isso e continuará como de costume (e começará a processar as tarefas na instância recém-iniciada). Estou obviamente simplificando o processo, mas essa é outra maneira de lidar com isso.

    
por 20.07.2012 / 02:29