Redis: escravo somente leitura versus escravo failover?

2

Estou lendo muita documentação sobre as configurações de rede do Redis, e estou confuso sobre como parece que os requisitos no modelo mental de arquitetura que tive, parecem não mapear com as opções atuais.

Primeiro de tudo: não preciso de sharding, porque a escalabilidade não é um problema no momento. Então, um mestre por enquanto (nó M).

Segundo: eu quero redundância, isto é, se um nó mestre falhar, quero que um segundo nó assuma e execute as solicitações que o cliente está enviando. Vamos chamar isso de primeiro escravo: o escravo failover (nó FS).

Terceiro: eu também quero outro nó de réplica, que é um escravo, mas que só serve consultas somente leitura. Se um cliente se conectar a ele e o cliente tentar modificar os dados, o nó deverá fornecer um erro. Vamos chamar isso de segundo escravo: o escravo somente leitura (RS).

Por último: quero failover para o escravo somente leitura. Ou seja, caso o RS morra, quero que outro escravo somente leitura assuma suas tarefas. Vamos chamar isso de quarto escravo: o escravo somente leitura failover (FRS).

Existe uma maneira de configurar o Redis assim? Parece que todos os modos de implantação (estava lendo este artigo: link ) têm um único mestre, exceto o Cluster. Agora, parece que meu nó "FS" seria um segundo mestre porque ele aceita consultas de gravação, no entanto, a configuração do cluster é padronizada como Sharding ativado e parece que não há uma maneira normal de desabilitá-lo, a menos que esteja faltando alguma coisa.

    
por knocte 30.10.2018 / 10:47

1 resposta

1

Pelo que entendi, o sentinela redis atenderá às suas necessidades.

Você terá 1 mestre (M) e 3 escravos (FS, RS e FRS). Cada um dos escravos está conectado ao mesmo mestre.

Você então implanta um número ímpar de processos sentinela que monitoram o mestre. Se o mestre falhar, as sentinelas promoverão um dos três escravos para o novo mestre.

Agora, a partir das suas anotações, você quer fazer o escravo "FS" como o novo mestre. O Sentinel não sabe que o "FS" é especial, ele pode escolher qualquer um dos 3 escravos como o candidato para o novo mestre. Para tornar "FS" especial, você precisa definir "réplica de prioridade" para cada um dos escravos. Você não quer que "RS" e "FRS" se tornem o mestre - então configure replica-priority = 0 para ambos os nós. Em seguida, o sentinela só considerará "FS" quando for a hora de fazer um failover.

A outra parte da sua pergunta - o que acontece quando o "RS" morre? Não há mecanismo de failover para escravos - simplesmente não é necessário. "RS" e "FRS" são apenas duas réplicas de leitura, ambas apontando para o mesmo mestre. Os clientes devem ser configurados para tentar uma das duas réplicas aleatoriamente - assim você distribui a carga. Se "RS" morre, o cliente simplesmente tenta "FRS". Como é somente leitura - a consistência dos dados não importa.

Para RS e FRS - defina uma propriedade adicional replica-read-only yes . Isso garantirá que as gravações falhem.

Você pode usar uma configuração que não seja sentinela, se desejar. Se você fizer isso, o failover de M para FS não ocorrerá automaticamente. Se / Quando o mestre M cair, você terá que a) detectá-lo, b) marcar FS como escravo de nenhum, c) assegurar que todos os seus clientes redis comecem a gravar no novo mestre ed) reconfigure RS e FRS para começar a seguir o novo mestre. O Sentinel faz isso automaticamente, mas aumenta a complexidade. Você pode fazê-lo em seu próprio manualmente manualmente também.

    
por 14.11.2018 / 01:53