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.