RabbitMQ - filas vazias e não sincronizadas inesperadas após falha do nó do cluster

1

Eu baixei e instalei o RabbitMQ no cluster no Windows:

  • baixado e instalado ERLANG e RABBITMQ em dois servidores (por exemplo, Alpha e Bravo)
  • plug-in de gerenciamento instalado, defina a porta tcp_listener personalizada (para aumentar a segurança) e adicione login de administrador personalizado em vez do convidado padrão: login de convidado
  • define o mesmo cookie em ambas as máquinas (nas duas pastas C: \ Windows \ e C: \ Users \ nome_do_usuário)
  • instalou o RabbitMQ como serviço do Windows
  • juntou-se ao nó Bravo ao nó Alfa ao cluster
  • política adicionada para espelhar ambas as filas (Pattern="", Definition="ha-mode: all")
  • Eu criei uma fila espelhada durável e publiquei uma mensagem para ela - ela está sincronizada entre os dois nós (ela funciona bem como eu esperava)

Mas tentei testar o que acontecerá se eu desligar um nó:

  • desliguei o nó Bravo
  • adicionei a mensagem ao nó Alpha
  • Voltei ao nó Bravo
  • a mensagem ausente foi sincronizada com o nó Bravo, mas no console de gerenciamento esse nó foi marcado como "não sincronizado"

O que há de errado nessa fila? Mas existem outros problemas. Por exemplo:

  • desliguei o nó Bravo
  • adicionei a mensagem ao nó Alpha
  • Voltei ao nó Bravo e esperei para sincronizar a mensagem
  • desativamos o nó alfa
  • Adicionei a mensagem ao nó Bravo
  • Voltei a ligar o nó Alpha
  • todas as mensagens adicionadas na fila desapareceram magicamente

Isso é muito estranho. Alguém tem ideia do que aconteceu?

Além disso, há um terceiro caso de teste:

  • Desativei o nó Alpha, adicionei a mensagem ao Bravo e desative o nó Bravo
  • então eu liguei o nó Alpha e recebi a mensagem "timeout_waiting_for_tables". Eu tentei mais vezes. Começou a funcionar apenas quando eu voltei também ao nó Alpha

Talvez eu não saiba como o clustering funciona no RabbitMQ. Alguém pode me ajudar e dizer o que está acontecendo?

    
por Tomáš Jecha 28.02.2013 / 19:02

1 resposta

0

O mesmo problema, mas há um pouco de compreensão a ser feito, bem como uma possível armadilha.

Primeiramente, eu fui enganado pelo fato de não ter passado meu vhost para o comando:

rabbitmqctl set_policy -p myvhost HA '*' '{"ha-mode": "all"}'

Caso contrário, o vhost usa como padrão "/"

Depois disso, quando eu entrei no console da web, vi que o campo do nó estava relatando dois nós ... agora. Ótimo: -)

No entanto, se você levar um para cima e para baixo, o outro para cima e para baixo, a fila desaparece !? Isso ocorre porque não há "sincronização" no espelhamento, apenas "empilhamento". Ou seja, se você desativar um nó, o restante das mensagens será servido do nó (ou nós) restante. Se você trouxer um nó novo / existente para cima, ele apenas espelhará NOVAS mensagens adicionadas.

Eu sou relativamente novo nisso, então eu diria que ter 3 nós seria muito melhor que dois. Isso significa que, se um nó ficar inativo, ainda haverá resiliência sobre os outros dois nós (dependendo do seu caso de uso correto). É claro que, se dois nós forem desativados, você terá perdido a replicação para qualquer coisa deixada nas filas. Eu acho que isso deveria ser chamado de "configuração de 3 greves"!

    
por 07.03.2013 / 14:32