Posso usar redis com balanceador de carga?

1

Estou usando o 1 master & 1 escravo.

Eu também quero usar ambos sob balanceador de carga. Então, eu posso usar ambos os servidores redis de uma só vez.

Também quero adicionar slave como failover do master. Então, posso fazer isso?

    
por Debugger 05.06.2012 / 16:45

3 respostas

2

Eu nunca tentei, mas o principal problema é que com a replicação, mesmo replicação síncrona, os redis só permitem um relacionamento mestre escravo e não um relacionamento mestre / mestre.

As conseqüências disso é que, se você escrever para o escravo, essas gravações não estarão disponíveis no mestre.

    
por 05.06.2012 / 16:52
0

Eu não recomendaria isso. O Redis é atualmente um mecanismo de replicação mestre-escravo e você precisaria particionar as gravações versus as leituras. Um balanceador de carga não fará isso por você sem um trabalho significativo. Você precisará particionar leituras x gravações em seu aplicativo ou escrever uma camada intermediária. Depois de fazer isso, você pode colocar vários escravos atrás de um balanceador de carga e apontar gravações para um único mestre.

O Redis é rápido o suficiente para que você raramente veja um atraso significativo na replicação. Especialmente se você executar o mestre configurado para não gravar localmente e executar um ou mais escravos que não estejam atrás do balanceador de carga que manipula a persistência.

No que diz respeito ao gerenciamento de um down master, você poderia escrever / usar um monitor de estilo de heartbeat em um ou mais slaves que monitoram um master morto e assumem o comando. Você ainda pode usar um balanceador de carga para isso. Por exemplo, use um IP virtual no LB e defina o secundário designado como um peso menor ou seja qual for o termo do LB escolhido por ele). Em seguida, configure este servidor para ser um escravo do mestre - mas não no pool de leitura. Ouça uma porta não padrão para a qual o LB não direciona. Quando detecta o mestre falhou o processo que você usa, em seguida, reconfigura-o para usar a porta adequada e emite um comando ESCRAVO DE NENHUM.

Eu também preferiria ver esse processo de monitor e dizer ao balanceador de carga para não usar o mestre. Dessa forma, se ele ficar on-line antes de você estar pronto, você poderá esclegá-lo para o mestre atual e, em seguida, migrar de volta para ele assim que sincronizar com o mestre de backup.

Em última análise, quanto valor está no trabalho depende de quão rigorosos são os seus verdadeiros requisitos. De qualquer forma, se você realmente precisa não perder uma única gravação, você desejará codificar seu gravador de forma que, se ele não puder conectá-lo, enfileire as gravações em disco e registre ou avise alguém.

    
por 07.06.2012 / 09:12
0

Em vez de usar a sincronização integrada de redis, que tal lidar com isso no código do seu serviço de estado personalizado?

Assim, com dois ou mais servidores com balanceamento de carga, cada um deles teria uma lista dos outros servidores e depois de gravar em sua instância local do Redis, eles escreveriam a mesma entrada para o restante?

Supondo que funciona, então deve ser apenas uma questão de lidar com a sincronização de uma instância ao colocar o servidor online novamente. Você poderia forçar isso quando o serviço for reiniciado? Tornar a versão local sincronizada com outra instância? Ou é só pegar todas as entradas com datas posteriores às mais recentes localmente?

    
por 27.09.2013 / 18:14

Tags