Możesz spróbować Redis Sentinel, aby to osiągnąć:
Redis Sentinel to system zaprojektowany, aby pomóc w zarządzaniu instancjami Redis. Wykonuje następujące trzy zadania:
-
Monitorowanie . Sentinel stale sprawdza, czy instancje master i slave działają zgodnie z oczekiwaniami.
-
Powiadomienie . Sentinel może powiadomić administratora systemu lub inny program komputerowy za pośrednictwem interfejsu API, że coś jest nie tak z jedną z monitorowanych instancji Redis.
-
Automatyczne przełączanie awaryjne . Jeśli urządzenie główne nie działa zgodnie z oczekiwaniami, Sentinel może rozpocząć proces przełączania awaryjnego, w którym urządzenie podrzędne jest promowane do stanu nadrzędnego, pozostałe dodatkowe urządzenia podrzędne są ponownie konfigurowane tak, aby korzystały z nowego urządzenia głównego, a aplikacje korzystające z serwera Redis informują o nowym adresie, który ma być używany podczas łączenia.
... lub użyć zewnętrznego rozwiązania, takiego jak Zookeeper i 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();
}
});
Zobacz tę prezentację Zookeeper + Redis.
[Aktualizacja] ... lub rozwiązanie w czystej Javie z Jedis + Sentinel to użycie wrappera, który obsługuje zdarzenia Redis Sentinel, zobacz SentinelBasedJedisPoolWrapper.