2013-05-01 9 views
7

In una situazione semplice con 3 server con 1 master e 2 slave senza sharding. Esiste una soluzione comprovata con java e Jedis che non ha un singolo punto di errore e si occuperà automaticamente di un singolo server in fase di down master o slave (failover automatico). per esempio. promuovere i master e resettare dopo l'errore senza dati persi.Redis/Jedis nessun singolo punto di errore e failover automatico

Mi sembra che dovrebbe essere un problema risolto ma non riesco a trovare alcun codice su di esso solo descrizioni di alto livello dei possibili modi per farlo.

Chi ha effettivamente questo coperto e funzionante in produzione?

risposta

9

Si consiglia di dare una prova di Redis Sentinel per raggiungere questo:

Redis Sentinel è un sistema progettato per aiutare la gestione delle istanze Redis. Svolge le seguenti tre compiti:

  • monitoraggio. Sentinel controlla costantemente se le istanze master e slave funzionano come previsto.

  • Notifica. Sentinel può notificare all'amministratore di sistema, o ad un altro programma per computer, tramite un'API, che qualcosa non va con uno delle istanze di Redis monitorate.

  • Failover automatico. Se un master non funziona come previsto, Sentinel può avviare un processo di failover in cui uno slave viene promosso a master, gli altri slave aggiuntivi sono riconfigurati per utilizzare il nuovo master e le applicazioni che utilizzano il server Redis informate sul nuovo indirizzo da usare durante la connessione.

... o per utilizzare una soluzione esterna, come 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(); 
    } 
}); 

Vai a questa presentation of Zookeeper + Redis.

[Update] ... o una soluzione Java puro con Jedi Sentinel + è quello di utilizzare un wrapper che gestisce gli eventi Redis Sentinel, vedere SentinelBasedJedisPoolWrapper.

+0

non sembra essere un frammento di codice per java che posso usare con le sentinelle. Ricevo l'idea dominante, ma cosa stanno effettivamente usando le persone come nel codice letterale in produzione? –

+1

La gestione del failover automatico di Redis ** senza Sentinel ** richiede sempre un software esterno. Tuttavia hai dato un'occhiata all'implementazione di FailSafe? https: // GitHub.com/xetorthio/jedis/pull/386 Non sarà buono come un vero failover ma se stai cercando una soluzione rapida potrebbe essere un buon punto di partenza – FGRibreau

+1

"ma cosa stanno effettivamente usando le persone come nel codice letterale in questo momento in produzione?" Zookeeper e ora Redis Sentinel, per lo più. – FGRibreau

1

Attualmente utilizzando Jedis 2.4.2 (da git), non ho trovato un modo per eseguire un failover basato solo su redis o sentinella. Spero che ci sarà un modo. sto pensando di esplorare l'opzione zookeeper in questo momento. Il cluster redis funziona bene in termini di prestazioni e stabilità, ma è ancora in fase beta.

se qualcuno ha una visione migliore fatecelo sapere.

Problemi correlati