Você pode tentar o Redis Sentinel para conseguir isso:
O Redis Sentinel é um sistema projetado para ajudar a gerenciar instâncias do Redis. Ele executa as três tarefas a seguir:
Monitoramento . O Sentinel verifica constantemente se suas instâncias master e slave estão funcionando conforme o esperado.
Notificação . O Sentinel pode notificar o administrador do sistema, ou outro programa de computador, por meio de uma API, que algo está errado com uma das instâncias do Redis monitoradas.
Failover automático . Se um mestre não estiver funcionando conforme o esperado, o Sentinel pode iniciar um processo de failover em que um escravo é promovido a mestre, os outros escravos adicionais são reconfigurados para usar o novo mestre e os aplicativos que usam o servidor Redis informados sobre o novo endereço a ser usado na conexão.
... ou para usar uma solução externa como Zookeeper e Jedis_failover:
JedisPool pool = new JedisPoolBuilder()
.withFailoverConfiguration(
"localhost:2838", // ZooKeeper cluster URL
Arrays.asList( // List of redis servers
new HostConfiguration("localhost", 7000),
new HostConfiguration("localhost", 7001)))
.build();
pool.withJedis(new JedisFunction() {
@Override
public void execute(final JedisActions jedis) throws Exception {
jedis.ping();
}
});
Veja esta apresentação do Zookeeper + Redis.
[Atualizar] ... ou uma solução Java pura com Jedis + Sentinel é usar um wrapper que manipula eventos Redis Sentinel, consulte SentinelBasedJedisPoolWrapper.